mirror of
https://github.com/andwati/zitadel.git
synced 2026-10-21 23:14:26 +00:00
## Todos for release - [x] Configure Env in docs project on vercel - [x] Configure Root Path in the docs project on vercel - [ ] Remove old CSP https://github.com/zitadel/website/pull/1592 ## What we did This pull request migrates the project documentation from the old `docs/` directory to the new `apps/docs/` directory, introduces a new documentation system built with Next.js and Fumadocs, and updates all relevant references, configuration files, and documentation to reflect this change. It also adds new configuration and ignore files for the new documentation app, updates CI and linting to exclude the new docs from certain checks, and revises the contributing guidelines accordingly. **Documentation System Migration and New Docs App** * Migrated all documentation from `docs/` to `apps/docs/`, and updated all references in `README.md`, `CONTRIBUTING.md`, and other files to point to the new location. [[1]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L585-L640) [[2]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L660-R607) [[3]](diffhunk://#diff-eca12c0a30e25b4b46522ebf89465a03ba72a03f540796c979137931d8f92055L740-R687) [[4]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L2-R3) [[5]](diffhunk://#diff-b335630551682c19a781afebcf4d07bf978fb1f8ac04c6bf87428ed5106870f5L30-R30) * Added a new Next.js/Fumadocs-based documentation app under `apps/docs/`, including core app files, layouts, routing, search API, and a comprehensive `README.md` with development and contribution instructions. [[1]](diffhunk://#diff-5a1b07344a2c1b4d3f37b23ff1388b62cd9f57dea3c1cd23d8a0412b7602b132R1-R74) [[2]](diffhunk://#diff-462b9ad1eabbb7d1c29bb9c36e4931eb180fd7190900e6d2babf8f4d66ad1c28R1-R39) [[3]](diffhunk://#diff-e16ae25660ded787b10ac35dea96d5ecaacf895dae0afc8a9bd4382dc79a8c87R1-R7) [apps/docs/app/[[...slug]]/layout.tsxR1-R81](diffhunk://#diff-59e08acde4e805b7aeccef1dcf98f1d71dfc550777e6b9402085cee0e9fa4e0aR1-R81), [apps/docs/app/[[...slug]]/page.tsxR1-R79](diffhunk://#diff-e5df3f80d0fa01e12d63d81f29c57a9d14e846c78fd3beabb2ef768e38fd9580R1-R79), [[4]](diffhunk://#diff-389b34918e040cacaa87cd7201ffa462cc2b0b716736f537e3d3c660ac69353bR1-R7) [[5]](diffhunk://#diff-d3b03416d1c457b19f1c27b26f2db741412df841b875c26ccadc36e4522247f4R1-R29) [[6]](diffhunk://#diff-c8fb8339570a5305809be7c618e14705fd86390dc278e6ce8ba224a7bc8b0c3cR1-R25) **Configuration and Tooling Updates** * Updated `.github/workflows/codeql.yml`, `.golangci.yaml`, and `.github/dependabot.yml` to properly handle the new docs app: excluded `apps/docs` from certain checks, added npm dependency updates for the docs app, and excluded generated content. [[1]](diffhunk://#diff-12783128521e452af0cfac94b99b8d250413c516ec71fe6d97dbea666ff7ba27L8-R14) [[2]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R5-R6) [[3]](diffhunk://#diff-9917ddc9f1c3304218f7269265b746d997c5c0615478177b5fceecd33ef47cb5R126-R129) [[4]](diffhunk://#diff-dd4fbda47e51f1e35defb9275a9cd9c212ecde0b870cba89ddaaae65c5f3cd28R89-R106) * Updated `.devcontainer/devcontainer.json` to use the latest Go 1.25.3 version for consistency. **Licensing and Miscellaneous** * Added `apps/docs/` to the list of licensed directories in `LICENSING.md`. These changes ensure the documentation is now maintained in a modern, scalable system and all project tooling is updated to support the new structure. --------- Co-authored-by: Federico Coppede <[email protected]>
139 lines
6.5 KiB
Plaintext
139 lines
6.5 KiB
Plaintext
---
|
|
title: Organize applications, services, and roles with projects
|
|
sidebar_label: Projects
|
|
sidebar_position: 4
|
|
---
|
|
|
|
import ProjectDescription from "../../../concepts/structure/_project_description.mdx";
|
|
|
|
## What is a project?
|
|
|
|
<ProjectDescription components={props.components} name="ProjectDescription" />
|
|
|
|
A Project is the vessel that holds your Applications and Roles. It defines the security context for a specific software solution.
|
|
|
|
### Example Scenario
|
|
Imagine you are building a **Point of Sales (POS)** platform. In ZITADEL, you would create one Project (e.g., named `POS`).
|
|
* **Applications:** Your web portal for administration, your iOS app, and your Android app would all be defined as **Applications** within this single Project.
|
|
* **Roles:** You would create **Roles** (e.g., `admin`, `cashier`, `viewer`) inside this Project.
|
|
* **Authorization:** All applications in this project share these roles, allowing you to create unified authorizations for your users across all platforms.
|
|
|
|

|
|
|
|
## Core Components
|
|
|
|
### Applications
|
|
Applications define the different clients (web apps, native mobile apps, server-side APIs) that share the same roles and security context.
|
|
At the moment, we support OIDC and almost every OAuth2 client. We'll be expanding this with SAML shortly.
|
|
Go to [Applications](./applications-overview) for more details.
|
|
|
|
### Roles
|
|
A role consists of different attributes, but only the **Key** is relevant to the authorization and must be unique within the project.
|
|
* **Key:** The identifier used in code (e.g., `role.admin`).
|
|
* **Display Name:** A human-readable name for the UI.
|
|
* **Group:** Enables better handling in the ZITADEL Management Console (e.g., giving a user all roles of a specific group).
|
|
|
|
Read more about managing roles [here](./roles).
|
|
|
|
## The Default Project
|
|
When creating a new ZITADEL instance, you will find an automatically created project in the first organization.
|
|
This **Default Project** (named "ZITADEL") protects the ZITADEL Management Console and APIs.
|
|
|
|
<Callout type="caution">
|
|
We do not recommend changing any settings in the Default Project or using it for your own applications, as this could influence the behavior of ZITADEL itself.
|
|
</Callout>
|
|
|
|

|
|
|
|
## Create a Project
|
|
|
|
To create a project:
|
|
1. Navigate to your Organization in the Console.
|
|
2. Go to **Projects** (or visit `https://${CUSTOM_DOMAIN}.zitadel.cloud/ui/console/projects`).
|
|
3. Click the **Create New Project** button.
|
|
|
|
<img
|
|
alt="Empty Project"
|
|
src="/docs/img/console_projects_empty.png"
|
|
width="270px"
|
|
/>
|
|
|
|
4. Enter your project name and continue.
|
|
|
|
## Granted Projects (B2B)
|
|
|
|
A powerful feature of ZITADEL is the ability to **Grant** a project to other organizations. This is essential for B2B scenarios where you sell your software to business partners.
|
|
|
|
* **The Concept:** You enable another organization to use your Project.
|
|
* **Delegation:** The granted organization can manage the authorizations of *their own users* for your project. They can assign the roles you defined to their employees without your intervention.
|
|
* **Isolation:** You can select specifically which roles are available to the granted organization. This allows you to restrict features (e.g., "Premium" roles) per customer.
|
|
|
|
Using the POS example above: You could grant the `POS` project to a partner organization. That partner can then log in with their own domain, use their own branding, and manage their own cashier users, all while using your underlying application structure.
|
|
|
|
<img
|
|
alt="Granted project"
|
|
src="/docs/img/guides/console/grantedprojectgrid.png"
|
|
width="320px"
|
|
/>
|
|
|
|
### How to Grant a Project
|
|
|
|
1. Navigate to the Project you want to share (e.g., `POS`).
|
|
2. In the **Grants** section, click **New**.
|
|
|
|
<img src="/docs/img/guides/console/grantsmenu.png" alt="Grants" width="170px" />
|
|
|
|
3. Enter the **Domain** of the partner organization you want to grant access to.
|
|
* *Tip: If you don't know the domain, navigate to the Organization detail page to find it.*
|
|
4. Search and select the organization.
|
|
5. Select the **Roles** you want to grant to this organization and click **Save**.
|
|
|
|
## Project Settings
|
|
|
|
You can customize the behavior of your project, particularly regarding how login screens look and how tokens are issued.
|
|
|
|
### Branding
|
|
If you have different designs for your organizations (Private Labeling), you can define the login behavior on the project detail page.
|
|
|
|
<img
|
|
src="/docs/img/guides/console/projectbranding.png"
|
|
alt="Project branding"
|
|
width="400px"
|
|
/>
|
|
|
|
| Setting | Description |
|
|
| :--- | :--- |
|
|
| **Unspecified** | If nothing is specified, the system default settings will trigger. |
|
|
| **Enforce project's policy** | This forces the branding of the organization that *owns* the project throughout the entire login process. Useful if you want your users to always see *your* brand, even if they belong to a partner org. |
|
|
| **Allow login user policy** | The login starts with the project's branding. However, as soon as the user is identified (e.g., by entering their email), the branding switches to match the user's organization. |
|
|
|
|
In a B2B use case, you would typically use **Allow login user policy**. If you want to skip the detection step, you can preselect an organization using the [primary domain scope](/apis/openidoauth/scopes#reserved-scopes) (e.g., `urn:zitadel:iam:org:domain:primary:{domainname}`).
|
|
|
|
### Role Settings
|
|
You can configure strict security checks regarding roles during authentication.
|
|
|
|
<img
|
|
src="/docs/img/guides/console/rolesettings.png"
|
|
width="700px"
|
|
alt="Role settings"
|
|
/>
|
|
|
|
* **Assert Roles on Authentication:** Role information is sent from the Userinfo endpoint (and in tokens, depending on app settings).
|
|
* **Check authorization on Authentication:** Users are **only** allowed to login if they have at least one role assigned for this project. If they have no roles, access is denied immediately.
|
|
* **Check for Project on Authentication:** Checks if the user's organization actually has a grant for this project. If not, the user cannot be authenticated.
|
|
|
|
### Roles in Tokens
|
|
If you want roles to appear directly inside your Access or ID Tokens (to avoid calling the Userinfo endpoint), you must enable this per application.
|
|
|
|
1. Navigate to your **Application**.
|
|
2. Open **Token Settings**.
|
|
3. Check **Assert Roles on Authentication**.
|
|
|
|
<img
|
|
src="/docs/img/guides/console/tokenroles.png"
|
|
width="700px"
|
|
alt="Roles in token"
|
|
/>
|
|
|
|
You can learn more about Application and Token settings [here](./applications-overview).
|