Skip to main content

Project

A Project is one application (or "solution") and its database, living inside your Environment. It's the unit you actually build against: it has its own identifier, its own users, its own authentication processes, and its own configuration. When you walk the create-project wizard (see Create Your First Project), the thing you create is a Project.

Environment            โ† created on registration, bound to your email
โ””โ”€โ”€ Project โ† one application/solution and its database โ† you are here
โ””โ”€โ”€ Tenant โ† an isolated slice of a project (multi-tenant projects only)

An Environment can hold many Projects; how many depends on your Cardinal plan.

info

In the Cardinal SDK, a Project is a Group (specifically a top-level app group). Its users, tenants, and processes are all nested under that group. The older Cockpit term for a Project was "Solution" โ€” you may still see that word in a few places, but it means the same thing.

A project's two identifiersโ€‹

Every project carries two IDs, and it's important not to mix them up:

IdentifierWho sets itWhat it's for
Project ID (set up by you)youthe reverse-domain Application ID (e.g. com.mycompany.myproject) your app passes to the SDK; it keeps projects isolated so a user only sees databases matching it
Project group ID (set up by Cardinal)CardinaliCure's internal group identifier โ€” not the value the SDK's projectId/Application ID expects

When you initialize the SDK, the value you pass as the projectId (Application ID) is the Project ID (set up by you) โ€” not the group ID โ€” see Initialize the Cardinal SDK.

Single-tenant vs multi-tenantโ€‹

A project is created single-tenant. Technically it still has exactly one tenant โ€” every project's data lives in a tenant โ€” but Cockpit keeps that single tenant hidden: there's no separate Tenants page and no per-tenant configuration to manage. You work with the project directly (its users appear on the Users page), as if the project and its one tenant were the same thing.

You can switch it to multi-tenant, which surfaces that hidden tenant and lets the project hold several isolated Tenants, each with its own users, data, and configuration โ€” now managed individually from the Tenants page.

The deployment model changes what the project looks like:

Single-tenantMulti-tenant
Databasesonemany (one per tenant)
Where users livedirectly under the project (Users page)under each tenant (Tenants page)
Typical useone organization / one shared datasetseparate practices, clinics, or customers kept isolated

You switch the model from Configuration โ†’ Danger zone (the Deployment model section, Switch to Multi-tenant / Switch to Single-tenant). It's in the Danger zone because changing it reshapes where your users and data live.

Working with a projectโ€‹

Open a project from its card on the dashboard (the Manage project button). What you see depends on the deployment model:

  • Configuration โ€” the project's settings (see the tabs below); always present.
  • Users (single-tenant) โ€” the HCPs, patients, devices, and organizations of the project.
  • Tenants (multi-tenant) โ€” the project's tenants; users live inside each tenant instead.
  • Administrators โ€” the admins who manage this project, with their access level.

The Configuration pageโ€‹

Configuration has six tabs:

  1. Project overview โ€” the project's name, both identifiers, its Deployment model and tenant count, a per-type user breakdown (single-tenant), and storage usage (data size, attachments, clusters).
  2. Processes โ€” the project's authentication processes (the email/SMS one-time-code flows your end users register and log in with). Each has a Process ID your app references.
  3. Roles โ€” the roles assigned to the users inside the project, and the permissions attached to each role. Every user type comes with a default set of roles; from here you can adjust that default list or create a new role with a different set of permissions.
  4. External JWT โ€” external JWT configuration for the project.
  5. Custom properties โ€” custom key/value properties on the project.
  6. Danger zone โ€” the irreversible / structural actions (below).

The Danger zoneโ€‹

Reached from Configuration โ†’ Danger zone. It holds the actions you can't casually undo:

  • Deployment model โ€” switch the project between single- and multi-tenant (above).
  • Transfer ownership โ€” move the project to another Environment, transferring its groups, users, and data. The receiving environment provides an operation token (see Environment).
  • Delete โ€” permanently delete the project and everything in it. You confirm by typing the project name.
caution

Transfer ownership and Delete are restricted to administrators with Environment Access. A Project-Access admin sees these as unavailable.

Project vs Environment vs Tenant โ€” quick mapโ€‹

ConceptWhat it isIn the Cardinal SDK
Environmentyour private space, bound to your emaila top-level Group
Projectone application/solution and its databasean app Group
Tenantan isolated slice of a multi-tenant projecta Group within the project

Where to go nextโ€‹

Cardinal SDK reference: a Project is a Group (a top-level app group) in the Cardinal SDK; its Project ID is the Application ID (projectId in SdkOptions).