docs: introduce versioned docs and migrate to fuma (#11166)

## 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]>
This commit is contained in:
Florian Forster
2026-01-29 08:38:36 -08:00
committed by GitHub
co-authored by Federico Coppede
parent 7b6395c348
commit d8ea041c56
2826 changed files with 78739 additions and 23571 deletions
@@ -0,0 +1,52 @@
---
title: Billing
---
## Billing
In the billing page shows your configured payment methods and the invoice
![](../../../../public/img/manuals/portal/customer_portal_billing.png)
### Payment Method
If you click on the "+" Button a popup will be shown with the needed fields to add a new payment method.
At the moment we provide only "Credit Card" payment
Once a payment method is configured, it can be selected directly in the instance creation process.
## Customer
To be able to create correct billings we will need some customer information from you.
This includes the following fields:
- Name
- Country
- Email address
- Address line 1
- Address line 2
- Postal Code
- City
## Tax ID
If available, enter your tax ID type and VAT number.
The tax ID will be shown on the invoice.
<Callout title="Reverse Charge">
When you enter the tax ID we will automatically calculate taxability.
Depending on your billing address we will mark the invoice as reverse charge.
</Callout>
## Update Billing Information
You will only need to add billing information if your want to get the pro tier. There are two options on how to add your billing info.
1. Go to the billing menu and add a new payment method.
2. Add the billing information directly during the upgrade process.
## Invoices
We show all you invoices, and you are able to download them directly in the Customer Portal.
![](../../../../public/img/manuals/portal/customer_portal_invoices.png)
@@ -0,0 +1,48 @@
---
title: ZITADEL Cloud Egress IP Addresses
sidebar_label: Egress IPs
description: A list of static IP addresses ZITADEL Cloud uses to make outbound connections to your services.
---
When configuring your firewall or network security groups, you may need to allow traffic **from** ZITADEL Cloud to your internal infrastructure.
This page lists the static Egress (outgoing) IP addresses used by ZITADEL Cloud regions.
## When do I need this?
You need to allowlist these IP addresses if you use features where ZITADEL initiates a connection to your systems. This is commonly required for the following scenarios:
### [Identity Providers & Federation](/guides/integrate/identity-providers/introduction)
If you are federating an external Identity Provider (IdP) that sits behind a firewall:
* **LDAP / Active Directory:** When ZITADEL connects to your LDAP server (typically port `636` for LDAPS).
* **OIDC / OAuth:** When ZITADEL connects to your IdP for:
* **Discovery:** Fetching configuration from `/.well-known/openid-configuration`.
* **Token Exchange:** Exchanging the authorization code at the `token_endpoint`.
* **User Info:** Retrieving user details from the `userinfo_endpoint`.
* **Keys:** Fetching signing keys from the `jwks_uri`.
* **SAML:** If ZITADEL needs to fetch the `metadata.xml` or artifact resolution services from an internal SAML IdP.
### [Notification Providers](/guides/manage/customize/notification-providers)
* [**SMTP:**](/guides/manage/customize/notification-providers#smtp-providers) If you configured a custom SMTP sender pointing to your own mail server.
* [**Webhook / HTTP provider:**](/guides/manage/customize/notification-providers#webhook-http-provider) If you use a custom gateway for SMS or Emails.
### Custom Logic
* **[Actions V1](/concepts/features/actions)**
* **[Actions V2](/concepts/features/actions_v2)**
## IP Addresses by Region
We recommend allowing the IP address corresponding to the region where your ZITADEL instance is hosted.
| Region | Egress IP Address |
| :--- | :--- |
| **Switzerland** | `34.65.158.196` |
| **Europe** | `34.107.19.72` |
| **United States** | `34.69.146.246` |
| **Australia** | `34.87.243.23` |
<Callout type="info">
To find out which region your ZITADEL Cloud instance is running in, check the [ZITADEL Customer Portal](https://zitadel.com/admin/instances).
</Callout>
@@ -0,0 +1,91 @@
---
title: ZITADEL Instances
sidebar_label: Instances
---
The ZITADEL Customer Portal is used to manage all your different ZITADEL instances.
Instances are containers for your organizations, users and projects.
A recommended setup could look like the following:
1. Instance: "Dev Environment"
2. Instance: "Test Environment"
3. Instance: "Prod Environment"
In the free subscription model you have one instance included.
To be able to add more instances please upgrade to "ZITADEL Pro".
## Overview
The overview shows all the instances that are registered for your customer.
You can directly see the Custom Domain and data region.
With a click on an instance you get to the detail of the chosen instance.
![](../../../../public/img/manuals/portal/customer_portal_instance_overview.png)
## New instance
Click on the new button above the instance table to create a new instance.
1. Enter the name of your new instance
2. Add the credentials for your first administrator
- Username (prefilled)
- Password
3. Instance created! You can now see the details of your first instance.
<Callout type="info">
Every new instance gets a generated domain of the form [instancename][randomnumber].zitadel.cloud
</Callout>
![](../../../../public/img/manuals/portal/customer_portal_new_instance.gif)
## Detail
The detail shows you general information about your instance, the region and your usage.
![](../../../../public/img/manuals/portal/customer_portal_instance_detail.png)
### Upgrade to Pro
Your first instance is included in the free subscription.
As soon as you want to create your second instance or use a "pro" feature like choosing the region, you will have to upgrade to the Pro subscription.
To upgrade you must enter your billing information.
If you hit a limit from the free tier you will automatically be asked to add your credit card information and to subscribe to the pro tier.
You can also upgrade manually at any time.
1. Click the "Upgrade to PRO" button in the menu or go to the billing menu
2. If you choose the billing menu, you can now see your Free plan, click "Upgrade to Pro"
4. Add the missing data
- Payment method: Credit Card Information
- Customer: At least you have to fill the country
5. Save the information
![](../../../../public/img/manuals/portal/customer_portal_upgrade_tier.png)
### Add Custom Domain
We recommend register a Custom Domain to access your ZITADEL instance.
The primary Custom Domain of your ZITADEL instance will be the issuer of the instance. All other Custom Domains can be used to access the instance itself
1. Browse to the "Custom Domains" Tab
2. Click **Add Custom Domain**
3. Enter the domain you want and select the instance where the domain should belong to
4. In the next screen you will get all the information you will have to add to your DNS provider to verify your domain
> **_Please note:_** Do not delete the verification code, as ZITADEL Customer Portal will re-check the ownership of your domain from time to time
Be aware that it has some impacts if you change the primary domain of your instance.
1. The urls and issuer have to change in your app
2. Passkey authentication is based on the domain, if you change it, your users will not be able to login with the registered passkey authentication
![Add Custom Domain](../../../../public/img/manuals/portal/customer_portal_add_domain.png)
#### Verify Custom Domain
As soon as you have added your Custom Domain you will have to verify it, by adding a CNAME record to your DNS provider.
1. Go to your DNS provider
2. Add a new CNAME record (You can find the target on the detail page of your instance)
3. After adding the CNAME you need to wait till the domain is verified (this can take some time)
You will now be able to use the added Custom Domain to access your ZITADEL instance
@@ -0,0 +1,19 @@
---
title: "Overview"
description: "Our customer portal is used to manage all your ZITADEL instances. You can also manage your subscriptions, billing, newsletters and support requests."
---
{/* THIS FILE IS AUTO-GENERATED FROM SIDEBAR-DATA.
ANY MANUAL CHANGES WILL BE OVERWRITTEN.
*/}
import { Card, Cards } from 'fumadocs-ui/components/card';
import { FileText, Folder, Link as LinkIcon } from 'lucide-react';
<Cards>
<Card title="Start" href="/guides/manage/cloud/start" icon={<FileText />} />
<Card title="Instances" href="/guides/manage/cloud/instances" icon={<FileText />} />
<Card title="Settings" href="/guides/manage/cloud/settings" icon={<FileText />} />
<Card title="Billing" href="/guides/manage/cloud/billing" icon={<FileText />} />
<Card title="Users" href="/guides/manage/cloud/users" icon={<FileText />} />
</Cards>
@@ -0,0 +1,44 @@
---
title: Settings
---
In the settings you can change your team name, notification settings and delete your team.
![](../../../../public/img/manuals/portal/customer_portal_settings_general.png)
## Team name
Change your ZITADEL Cloud team name by entering a new name.
Confirm the changes by clicking the Change button.
## Notifications and newsletters
You can subscribe and unsubscribe to notifications and newsletters:
- Onboarding: Welcome information for new users
- Newsletter: Regular newsletter on ZITADEL
- Product News: Receive product updates
- Security: Receive notifications related to security issues
<Callout title="Technical Advisories">
If you want to stay up to date on our technical advisories, we recommend [subscribing here to the mailing list](/support/technical_advisory#subscribe-to-our-mailing-list).
Technical advisories are notices that report major issues with ZITADEL Self-Hosted or the ZITADEL Cloud platform that could potentially impact security or stability in production environments.
</Callout>
You can also manage your subscriptions by clicking the unsubscribe link in the emails.
<Callout title="Mandatory Information">
We are required to inform you about changes to the terms of service or based on regulatory requirements. You can't unsubscribe to these notifications.
</Callout>
## Delete team
Permanently delete your ZITADEL Cloud account.
This will delete your team and delete all associated information.
Click **Delete Account** and confirm the next step.
## Update billing information
Refer to the [billing guide](./billing).
@@ -0,0 +1,25 @@
---
title: Getting Started with ZITADEL
sidebar_label: Getting Started
---
If you are new to ZITADEL your first action is to create your first ZITADEL instance and an account to access the ZITADEL Customer Portal.
The ZITADEL customer Portal is used to manage all your different ZITADEL instances.
You can also manage your subscriptions, billing, newsletters and support requests.
Go to [ZITADEL Customer Portal](https://zitadel.com) and start by entering you email or use an existing account like Google.
![](../../../../public/img/manuals/portal/customer_portal_landing_page.png)
In a second step fill out your user data like First-, Last- and Team-name.
![](../../../../public/img/manuals/portal/customer_portal_landing_page_2.png)
If you did start with your email instead of a social login (e.g Google) you have to fill a password for your authentication.
In that case you will get an initialization mail to verify your account.
![](../../../../public/img/manuals/portal/customer_portal_landing_page_3.png)
You are now registered with a free account and ready to try all the features of ZITADEL.
Sign in to [ZITADEL Customer Portal](https://zitadel.com), to manage all you instances.
@@ -0,0 +1,34 @@
---
title: ZITADEL Support
sidebar_label: Customer Support
---
<Callout>
We describe our [support services](/legal/service-description/support-services) and information required in more detail in our legal section. Beware that not all features may be supported by your subscription and consult the [support states](https://help.zitadel.com/zitadel-support-states).
</Callout>
## General
We always recommend first having a look at our [documentation](/docs), [discord chat](https://zitadel.com/chat) and [GitHub repository](https://github.com/zitadel/zitadel). You can also ask our AI assistant for help before contacting Support.
![](../../../../public/img/manuals/portal/customer_portal_general_support.png)
![](../../../../public/img/manuals/portal/customer_portal_general_support_inkeep.png)
## Support Request
Create a new support request with the following information:
- Subject
- Detailed description
- Attachments (Optional)
- Ticket Priority
- Ticket Category
- Hosting
- Affected Instance (Only for cloud instances)
- Database Version (Only for self-hosted instances)
![](../../../../public/img/manuals/portal/customer_portal_support.png)
![](../../../../public/img/manuals/portal/customer_portal_support_2.png)
After submitting the form, you will receive a confirmation email, and our team will be in touch with you shortly.
@@ -0,0 +1,31 @@
---
title: Customer Portal Administrators
sidebar_label: Customer Portal Administrators
---
Manage all your administrators who are allowed to access the Customer Portal.
For the moment all users with access to the Customer Portal will have the role "Admin".
![](../../../../public/img/manuals/portal/customer_portal_administrator_list.png)
## Add new administrator
1. Go to the Administrators tab in the ZITADEL Customer Portal
2. Click the button "Create"
3. Fill in the Firstname, Lastname, Email and the username
4. Click create
The user will receive a verification email. Clicking the button in the email will lead to the user activation screen where password creation is required.
![](../../../../public/img/manuals/portal/customer_portal_add_admin.png)
## Delete administrator
1. Go to the Administrators tab in the ZITADEL Customer Portal
2. Click the bin icon in the users table for the user you like to delete
3. You will get a popup, where you have to enter the login name of the user to confirm that you like to delete the user
4. Click the "delete" button
The user will be deleted and has no access to the Customer Portal anymore
![](../../../../public/img/manuals/portal/customer_portal_delete_admin.png)