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.
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:
| Identifier | Who sets it | What it's for |
|---|---|---|
| Project ID (set up by you) | you | the 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) | Cardinal | iCure'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-tenant | Multi-tenant | |
|---|---|---|
| Databases | one | many (one per tenant) |
| Where users live | directly under the project (Users page) | under each tenant (Tenants page) |
| Typical use | one organization / one shared dataset | separate 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:
- 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).
- 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.
- 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.
- External JWT โ external JWT configuration for the project.
- Custom properties โ custom key/value properties on the project.
- 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.
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โ
| Concept | What it is | In the Cardinal SDK |
|---|---|---|
| Environment | your private space, bound to your email | a top-level Group |
| Project | one application/solution and its database | an app Group |
| Tenant | an isolated slice of a multi-tenant project | a Group within the project |
Where to go nextโ
- Tenant โ how isolated slices work inside a multi-tenant project.
- Create Your First Project โ walk the create-project wizard.
- Initialize the Cardinal SDK โ find the Project ID and the other values your app needs.
- Project Overview & Configuration โ the practical how-to for the Configuration tabs.
Cardinal SDK reference: a Project is a
Group(a top-level app group) in the Cardinal SDK; its Project ID is the Application ID (projectIdinSdkOptions).