Zitadel vs Casdoor: which fits multi-organization identity
Choose Zitadel when your product serves several customer organizations that each manage their own users and you need hard tenant boundaries, per-organization identity providers, SCIM provisioning and an audit trail that covers every change. Choose Casdoor when several organizations can share one deployment and the bigger driver is legacy protocol coverage, particularly CAS, LDAP and RADIUS for older applications, or an Apache-2.0 license. In Zitadel, each instance is a virtual tenant with full data isolation, and organizations sit inside an instance to hold projects and users. Casdoor takes the lighter path: several organizations share one instance, each with its own users, groups, roles, applications and branding.
Four decision drivers should settle this before any evaluation work. The first is license acceptance. Zitadel's core, Console and hosted login moved to AGPL-3.0 with Zitadel v3.0 on 31 March 2025, while Casdoor is Apache License 2.0. Have legal review the AGPL network-use obligations against how you will modify and expose the platform, and check whether Zitadel's commercial license is relevant to you. The second is protocol need. List every application that speaks only CAS, LDAP or RADIUS. If there are several, Casdoor covers those protocols in one product, while Zitadel's documented protocols centre on OpenID Connect, OAuth 2.0, SAML 2.0 and SCIM v2.
The third driver is the database. Self-hosted Zitadel requires PostgreSQL, with versions 14 through 18 supported. Casdoor stores data through XORM across MySQL, PostgreSQL, SQLite, SQL Server and other databases. If your organization has standardized on one engine, that alone can decide the question. The fourth driver is who operates the platform. Ask your platform team to name the owner for upgrades, backups and the event store, since Zitadel's event-sourced design changes how you reason about data retention. Confirm current release cadence and support windows for each project directly with the vendors and in your own test environment before committing.
Which Zitadel vs Casdoor scenario fits your team
This table maps common team situations to the platform that fits better and the supplied facts behind each choice. The scenarios are illustrative, so check each row against your own tenancy model, protocol needs, database standard and license policy before deciding.
| Scenario | Better fit | Reason |
|---|---|---|
| B2B SaaS where each customer manages its own users (illustrative) | Zitadel | Zitadel organizations act like tenants inside one instance, and each customer organization can use its own identity provider. Casdoor also supports several organizations per instance, so confirm the delegated admin and isolation model you need. |
| Internal platform serving legacy LDAP or RADIUS clients (illustrative) | Casdoor | Casdoor's documentation describes its CAS server also serving LDAP and RADIUS for systems that only support those protocols. Zitadel's supplied facts cover OIDC, OAuth 2.0, SAML 2.0 and SCIM, so confirm any RADIUS or LDAP serving need with the vendor. |
| Team that cannot accept AGPL-3.0 obligations (illustrative) | Casdoor | Casdoor is licensed under Apache License 2.0. Zitadel's core, Console and hosted login moved to AGPL-3.0 with v3.0, and a commercial license is offered, so legal review is needed before choosing Zitadel. |
| Team that needs one shared admin console for several business units (illustrative) | Casdoor | Casdoor describes several organizations sharing one instance, each with its own users, groups, roles, applications and branding. Zitadel's instance and organization model is built for tenant isolation, which adds structure you may not need for internal units. |
| Team with a standard on PostgreSQL (illustrative) | Zitadel | Zitadel self-hosted uses PostgreSQL, supporting versions 14 through 18, with no other database listed in the supplied facts. Casdoor also runs on PostgreSQL, so the choice rests on other factors if PostgreSQL is your only standard. |
| Team with an existing MySQL or SQL Server standard (illustrative) | Casdoor | Casdoor stores data in MySQL, PostgreSQL, SQLite, SQL Server and other databases through XORM. Zitadel's supplied database support is PostgreSQL only, so Casdoor avoids a new database platform. |
| Team that needs a built-in, unlimited-period audit trail of identity changes (illustrative) | Zitadel | Zitadel is built on event sourcing, storing every change as an event, which gives a built-in audit trail. Confirm how Casdoor records changes against your audit requirements before deciding. |
How Zitadel and Casdoor are built and what that means for operations
Zitadel and Casdoor both run as Go services with a database behind them, but they store state differently and ship through different release habits. The cards below take the parts that shape daily operations in turn: the runtime, the database, deployment methods, event-sourced storage and release cadence.
Server and runtime
Zitadel is written in Go and is built around event sourcing, so every change to users, organizations and configuration is recorded as an event. Casdoor is also written in Go, using the Beego framework, with a React frontend. Both are single services you run and patch, but the Zitadel team and the Casdoor team make different trade-offs in how state is modeled. Ask each vendor how a failed server restart is recovered and how the admin console is versioned against the API.
Database engine and support
Self-hosted Zitadel requires PostgreSQL, with versions 14 through 18 supported. Casdoor reaches MySQL, PostgreSQL, SQLite, SQL Server and other databases through XORM. If your organization standardizes on MySQL or SQL Server, Casdoor fits existing database operations more easily. If it standardizes on PostgreSQL, both options run on the same skills. Confirm the exact Casdoor database versions and any limits with the Casdoor documentation before you commit to a database engine.
Deployment methods
Zitadel documents self-hosting on Linux and macOS binaries, Docker Compose and Kubernetes, and recommends a Kubernetes cluster with the official Helm chart for high availability. Choose the path your platform team already runs, because each path still needs a PostgreSQL instance. Confirm which deployment methods Casdoor documents and supports, including any official container images or Helm charts, in its documentation before you plan the rollout.
Event-sourced storage growth
Because Zitadel records every change as an event, the event store grows with activity, not only with the current user count. That gives a built-in audit trail over an unlimited period, which helps when auditors ask who changed a policy and when. Plan storage, backup size and retention with that growth in mind, and ask how event history is archived and pruned. Casdoor stores current records in its database tables, so its growth profile and audit trail depend on how you enable logging and retain it.
Upgrade and release cadence
Zitadel v4.19.5 was released on October 15, 2026, and Casdoor v4.21.0 was published on October 18, 2026, after v4.20.0 on October 11 and v4.19.0 on October 10. Casdoor has shipped several minor releases within about a week, which means frequent review of changes. Zitadel's event-sourced schema and PostgreSQL migrations should be tested in staging before each upgrade. Ask both vendors which release lines receive security patches and for how long, and set a test cadence that matches your change control.
Zitadel vs Casdoor protocols, databases and licensing side by side
This table compares protocol coverage, licensing, federation and database support for Zitadel and Casdoor, using only documented facts. Where a row shows a gap in the supplied documentation, the confirm column tells you what to test in a proof of concept before deciding.
| Capability | Zitadel | Casdoor | What to confirm in a proof of concept |
|---|---|---|---|
| License | AGPL-3.0-only for core, Console and hosted login since v3; APIs, SDKs, Helm charts and Terraform configurations under Apache 2.0 | Apache-2.0 for the project | Have legal review the AGPL-3.0 network-use obligations for your modified deployment and whether a commercial Zitadel license is needed |
| OpenID Connect and OAuth 2.0 | Implemented | Implemented | Test the exact grant types and token claims your applications require |
| SAML 2.0 | Implemented | Implemented as identity provider | Test SAML metadata exchange and attribute mapping with your service providers |
| SCIM v2 | Service provider interface for standardized provisioning | SCIM 2.0 supported | Test provisioning and deprovisioning against your HR or downstream systems |
| CAS, LDAP and RADIUS serving | Not listed in the supplied Zitadel facts; confirm directly with Zitadel | CAS server, plus LDAP and RADIUS for legacy systems | If legacy systems need CAS, LDAP or RADIUS, confirm Zitadel support before choosing it |
| Device authorization grant | Provided for devices such as smart TVs | Not listed in the supplied Casdoor facts | Confirm Casdoor support if devices are in scope |
| Passkeys and WebAuthn | Passwordless login with FIDO2 and WebAuthn, with password fallback | WebAuthn supported | Test enrollment, recovery and fallback flows for your user population |
| TOTP multi-factor authentication | Not listed in the supplied Zitadel facts; confirm before relying on it | TOTP MFA supported | Confirm the MFA methods each platform offers for your policy |
| Upstream identity federation | Google, GitHub, GitLab, Apple, Entra ID, Okta, LDAP, OpenLDAP, Keycloak and any OIDC provider, per organization | Syncers import users from LDAP, Active Directory and Keycloak | Test per-organization federation with Entra ID and Okta, and confirm whether Casdoor federates them at login |
| Database support | PostgreSQL 14 to 18 for self-hosting | MySQL, PostgreSQL, SQLite, SQL Server and others through XORM | Confirm your target database version and high availability approach with each vendor |
| Multi-tenant model | Instances, organizations, projects; each organization can use its own identity provider | Several organizations share one instance with their own users, roles and branding | Test tenant isolation and administrator delegation for your customer model |
What drives the running cost of Zitadel and Casdoor
The largest recurring cost in either platform is usually the people who run it, not the software licence. For self-hosted Zitadel, every setup needs a PostgreSQL instance, and the supported range is PostgreSQL 14 through 18 according to the Zitadel database documentation. Running that database well means backups, restore tests, version upgrades and monitoring, all owned by your team or your DeployOpen retainer. If you want high availability, Zitadel recommends Kubernetes with the official Helm chart, which adds cluster operations to the skills list. Casdoor stores data through XORM across MySQL, PostgreSQL, SQLite, SQL Server and other databases, so your existing database team may already cover part of that work, but you still need to confirm which database and version your chosen release supports before you commit.
Licensing shapes cost in a less obvious way. Zitadel's core, Console and hosted login moved to AGPL-3.0 with v3.0 in March 2025, and the AGPL network-use terms can require you to publish source changes if you modify the service and offer it to users over a network. Casdoor is Apache-2.0, which carries no comparable source-sharing obligation for internal changes. Zitadel's LICENSING.md describes a commercial licence option. Ask your legal team whether that option is needed for your deployment, and ask Zitadel for a written price for it. Support is a separate line item: confirm with each vendor what paid support exists, what response commitments come with it, and whether it is priced per instance, per user or per year.
Upgrades are the recurring cost you can plan for most precisely. Check the release pages for each platform's patch cadence before you size the team. Zitadel v4.19.5, released on 15 October 2026, and Casdoor v4.21.0, published on 18 October 2026, are the current releases at the time of writing, and both should be treated as the starting point for your own upgrade test. Build a written quote that separates one-time work (integration, data migration, hardening, and the first backup and restore test) from recurring work (upgrades, backup verification, monitoring, on-call coverage and security patch review). Ask DeployOpen and each vendor to state the assumptions behind the effort, including number of organizations, identity providers, applications and environments.
Licensing and editions: what AGPL-3.0 and Apache-2.0 each require
Zitadel moved its core, Console and hosted login from Apache 2.0 to the GNU Affero General Public License 3.0 with Zitadel v3.0 on 31 March 2025. The project's LICENSING.md explains that this is not a blanket change: some directories stay under permissive terms, and a commercial license is offered for organizations that cannot accept AGPL-3.0 terms. Your team should read the license boundaries before assuming a whole repository works the same way.
- Core under AGPL-3.0-only: The core server, Console and hosted login are licensed under AGPL-3.0-only from v3.0 onward, so any code tied to those components carries that license.
- Permissive directories: Client packages, APIs, SDKs, proto definitions, examples, documentation, Helm charts and Terraform configurations remain under Apache 2.0 or MIT, according to the project's licensing notes.
- Commercial license: Zitadel offers a commercial license per LICENSING.md. Ask the vendor what it covers, how it is priced and whether it applies to self-hosted deployments.
- Cloud and enterprise options: Zitadel Cloud and the enterprise contracts are commercial offerings. Confirm their current scope and terms with Zitadel directly, because they are separate from the open source license.
- Current release: Zitadel v4.19.5 was released on 15 October 2026. Check the release notes before you pin a version in your environment.
Confirm with counsel which Zitadel components your team will modify, deploy or expose to users, and whether the commercial license is needed for your deployment model.
Casdoor is licensed under the Apache License 2.0, a permissive license that does not carry the network copyleft obligation of AGPL-3.0. Casdoor describes itself as a single sign-on and authentication server with a web console. The supplied facts do not describe a paid edition of Casdoor, so you should confirm with the Casdoor team whether any commercial or enterprise terms exist before you plan around them.
- Apache-2.0 license: Casdoor's repository is licensed under Apache License 2.0, which allows modification and internal use without the source disclosure triggered by AGPL-3.0 network use.
- Casdoor Cloud credit: The Casdoor README states that new Casdoor Cloud accounts get 20 US dollars in free credit. Casdoor Cloud runs a dedicated instance and database maintained by the Casdoor team.
- Paid edition not described: The supplied facts do not describe a paid Casdoor edition or enterprise license, so confirm this directly rather than assuming one exists or does not.
- Current release: Casdoor v4.21.0 was published on 18 October 2026, after v4.20.0 and v4.19.0. Verify the release and its changes before upgrading.
- Protocol scope under the same license: The Apache-2.0 license applies to the protocol features in the repository, including CAS, LDAP and RADIUS serving described in its overview.
Ask Casdoor for written confirmation of any commercial terms, support options or licensing for hosted and self-hosted use before procurement.
The practical difference is how each license treats modified code and network use. AGPL-3.0 requires users who interact with a modified version over a network to be offered its source code. Apache-2.0 places fewer conditions on modification and redistribution, which often matters when a team wants to change the software without publishing those changes. The decision depends on how your organization plans to modify and expose the platform.
- When AGPL-3.0 matters: If you modify Zitadel and users reach the modified service over a network, the network source offer obligation may apply. This is most relevant to customer-facing identity services that you change.
- When AGPL-3.0 matters less: If you run unmodified Zitadel internally, or use the Apache 2.0 or MIT directories only, the obligation may not be triggered. Confirm which components you touch.
- When Apache-2.0 matters: If your roadmap includes internal patches, custom connectors or a hosted service you do not want to publish, Casdoor's Apache-2.0 license imposes fewer conditions.
- Commercial alternatives: Zitadel's commercial license may remove AGPL-3.0 obligations for your organization. Compare its cost and scope with the effort of managing the open source license.
- Procurement and audit records: Record which license applies to each component and who approved it, so auditors and customers can see the basis for your decision.
This is not a legal conclusion. Have qualified counsel review the license terms against your deployment, modification and distribution plans before you choose.
Where Zitadel and Casdoor implementations run long
The longest Zitadel and Casdoor projects usually stall on the same few decisions: how identities map across organizations, how legacy clients are tested, and how data is backed up. Zitadel implementation work centers on its instance and organization design. Teams decide which tenants become instances (virtual tenants with full data isolation) and which become organizations inside an instance, then model projects, roles and grants so each customer organization manages its own users. Each organization can point to a different identity provider, so every upstream connection needs its own attribute mapping and test login. SCIM v2 provisioning adds a second mapping exercise, because the attributes a directory sends must match what the application expects.
Casdoor work is shaped differently. Several organizations share one instance, each with its own users, groups, roles, applications and branding, so the setup effort lies in organization and application configuration and in syncers that import users from LDAP, Active Directory or Keycloak. Legacy CAS, LDAP and RADIUS clients often take the most time, since each one has its own bind behavior, attribute expectations and failure modes. Expect the delay to come from testing those clients against real accounts rather than from the Casdoor configuration itself.
Across both platforms, the common delays are identity provider attribute mapping, legacy client testing, database choice and backup design, and per-organization branding. Ask early which PostgreSQL version your environment will run for Zitadel (14 through 18 are supported) or which database Casdoor will use, and plan backup and restore tests before go-live. Before any work starts, the client must supply directory owners, application owners and test accounts for each organization. Scope, deliverables and timelines are agreed in writing before work starts, so list every legacy client and identity source in the statement of work.
Moving between Zitadel and Casdoor: what transfers and what is rebuilt
This sequence shows which identity objects can be carried across, which must be rebuilt in the target, and how to cut applications over without a login outage. Each step ends with a check you can verify before moving on.
Inventory organizations, users, groups and applications
Start by listing every organization, user, group, role, application and client registration in the source instance, with its redirect URIs, scopes, signing settings and the protocol each application uses (OIDC, OAuth 2.0, SAML 2.0 or LDAP). Assign the work to the identity owner and an application owner for each client. The step is done when the inventory has one row per application and each row names its owner, its protocol and the environment it serves. Treat this list as the migration scope for every later step.
Confirm what credentials and MFA secrets can move
Decide, for each user population, whether password hashes and MFA enrollments can be exported and imported. Ask Zitadel and Casdoor directly what their import formats accept, which hash algorithms they support, and whether TOTP seeds or passkey credentials can be carried over. Zitadel documents migration guides from Auth0, Keycloak, Firebase and another Zitadel instance, using approaches such as just-in-time migration; confirm the Casdoor migration path in its documentation before assuming any. The check is a written answer per credential type. Where a secret cannot move, plan for users to re-enroll MFA and reset passwords.
Rebuild the tenant structure in the target
Recreate the tenant model in the target platform. In Zitadel, map each customer to an organization inside an instance, with projects that group applications, roles and grants. In Casdoor, create the organizations that share the instance, each with its own users, groups, roles, applications and branding. Keep names and identifiers stable so that claims and tenant references in your applications still resolve. The output is a target structure that matches the inventory, verified by listing each organization and confirming that its applications and roles exist.
Map SAML and OIDC client configuration
Translate each client registration into the target's configuration. Carry over redirect URIs, allowed scopes, token lifetimes, claim mappings and SAML entity IDs, assertion consumer URLs and signing certificates. Generate new client secrets in the target rather than copying them, and record which application receives which secret through your secret store. The check is a test login per application against a non-production copy, with the claims the application reads confirmed field by field.
Import users through SCIM or a syncer
Populate users and group membership with the method each platform supports. Zitadel provides a SCIM v2 service provider interface for standardized provisioning and lifecycle management. Casdoor describes syncers that import users from LDAP, Active Directory and Keycloak, and it also speaks SCIM 2.0; confirm which path fits your source directory and whether it preserves group membership. Run the import into a staging organization first, then compare user counts and group memberships with the source inventory. The step closes when the reconciliation shows no unexplained differences.
Cut over application by application with parallel logins
Move applications one at a time, not the whole estate at once. For each application, enable the target login alongside the source, route a small set of test users to the target, and confirm that sessions, role claims and logout behave as expected. Keep the source client active until every user in that application's population has signed in successfully on the target at least once. Record the cutover date and the rollback path for each application. The step is complete when each application shows successful target logins and no open authentication errors in its logs.
Retire the source instance after audit log retention
Before decommissioning the old instance, decide how its audit records will be kept. Zitadel is event-sourced and stores every change as an event, which gives a built-in change history over an unlimited period; Casdoor's audit retention should be confirmed in its own documentation. Export or archive the logs your compliance program requires, confirm the retention period with your auditors or internal policy owner, and then disable the source clients. The check is a signed archive record plus a confirmed list of closed client registrations. Only then delete the source database and its backups on the schedule your policy sets.
Questions buyers ask before choosing Zitadel or Casdoor
Is Casdoor or Zitadel cheaper to run yourself?
Neither platform's license fee is the main cost, because both are open source and self-hosted. The running cost is driven by the PostgreSQL or other database you operate, the hosting footprint, backups, upgrades and the staff time to operate them. Zitadel documents PostgreSQL 14 to 18 as its database, while Casdoor supports MySQL, PostgreSQL, SQLite, SQL Server and other databases through XORM, so your existing database standards may tip the balance. Zitadel's high availability recommendation is a Kubernetes cluster with the official Helm chart, which adds platform cost if you do not already run one. For a commercial quote, ask for the license terms you need (Zitadel offers a commercial license, and the Zitadel Cloud comparison covers its published plans), plus the labor and hosting assumptions behind each figure.
How long does a multi-organization identity rollout take?
It depends on the written scope, the number of identity providers to connect and how many legacy clients need migrating. A rollout that only creates organizations and one login flow is far shorter than one that connects several upstream providers, rewrites SAML or LDAP integrations and moves existing user stores. Zitadel organizes tenants as instances, with organizations inside them, so the design of that hierarchy is worth settling before any build starts. Casdoor's shared organizations are quicker to set up on one instance, but you still need to confirm how branding, roles and syncers behave for each tenant. Ask any provider for a timeline tied to a written scope, the list of identity providers and the inventory of applications that need changes.
Can our own team run this without outside help?
A capable platform team can run either platform, but it needs skills in the chosen database, reverse proxy or Kubernetes setup, OIDC and SAML configuration, and identity provider integration. For Zitadel, plan for event-sourced storage concepts, the organization and project model, and backup planning for a stateless server backed by PostgreSQL. For Casdoor, plan for its Go and React codebase if you need to change it, and for the protocol mix you must support, such as CAS, LDAP and RADIUS. Most engagements with DeployOpen are fixed-scope, so you can split the work: outside help for the design, integration and hardening, and your team for daily operations. Confirm the time your staff can commit before deciding.
Does AGPL-3.0 block internal use of Zitadel?
AGPL-3.0 does not prohibit running Zitadel inside your organization, but it attaches obligations if you modify Zitadel and make it available to users over a network. In plain terms, if you change the core code and users interact with that modified service, you may need to offer them the corresponding source. Zitadel moved its core, Console and hosted login to AGPL-3.0 with v3.0 on 31 March 2025, while its APIs, SDKs, Helm charts and Terraform configurations stay Apache 2.0. Whether your use triggers any obligation depends on how you deploy and whether you change the code, so have legal counsel review your plan. Casdoor is Apache-2.0, which many teams find simpler to approve. Zitadel also offers a commercial license for organizations that cannot accept AGPL-3.0.
Can Casdoor replace our LDAP or RADIUS servers?
Casdoor's documentation describes it as a CAS server that also serves LDAP and RADIUS for systems that only support those protocols, so it can cover some legacy clients. Confirm that before relying on it: check which LDAP operations and RADIUS authentication modes your devices and applications use, and test each one against your target version. Casdoor also imports users from LDAP, Active Directory and Keycloak through its syncers, which helps during transition. Zitadel does not present itself as an LDAP or RADIUS server in the supplied material; it federates from LDAP and OpenLDAP as an upstream source. If a network device needs RADIUS, Casdoor may simplify the design, but keep the decision tied to a tested inventory of clients.
How should we test Zitadel and Casdoor before deciding?
Build a proof of concept against a copy of your real requirements rather than a demo. Deploy each platform with the database you intend to run, then test a short list of cases: create two organizations with separate branding and roles, connect one external identity provider over OIDC or SAML, provision users through SCIM where your applications support it, and log in with passkeys. For Casdoor, add one CAS, LDAP or RADIUS client if you need them. Measure the operational steps for backups, upgrades and restores, since these drive long-term cost. Record the results against a written checklist, and use the same test data for both. Testing with DeployOpen can be scoped in writing as a fixed engagement, and the outcome is evidence for your own decision.
What should we ask for in a quote for this work?
Ask for a written scope that lists each deliverable, the number of organizations and identity providers in scope, the applications to integrate, the legacy protocols to support and the environments to build. Request a breakdown that separates one-time work such as design, integration, migration and hardening from recurring work such as upgrades, monitoring and support. Ask which parts depend on your own infrastructure, such as the database, Kubernetes platform or network, and what you must provide. Confirm how changes to scope are handled and what documentation and evidence you receive. DeployOpen does not publish a price list, so a quote follows from the agreed scope.
How DeployOpen helps choose, implement or migrate identity platforms
DeployOpen plans, implements, integrates, hardens, documents and supports self-hosted open-source platforms inside your own infrastructure, so the Zitadel vs Casdoor decision can be tested against your tenancy model, protocol needs and license position before anything is built. Engagements are fixed-scope, with scope and deliverables agreed in writing first.
How we scope
- Record which protocols your applications need, including whether any legacy systems require CAS, LDAP or RADIUS serving.
- Map your tenant model, covering whether customers need isolated instances or shared organizations within one deployment.
- Agree in writing the license review scope, including how AGPL-3.0 obligations and Apache-2.0 terms apply to your own use.
How we build
- Stand up a proof of concept on your own cloud account, data center or air-gapped network with the database you have chosen.
- Configure identity federation to your upstream providers, such as LDAP, Active Directory or Keycloak, and test user provisioning.
- Test sign-in flows, MFA and passkey behavior against your applications, then document the configuration and security settings.
How we hand over
- Deliver the architecture record, configuration files, runbooks and backup and restore procedures written for your operations team.
- Walk your administrators through tenant setup, role design and day-two tasks so the platform can run without outside help.
- Provide an exit assessment that documents the data export and migration paths if you later move between the two platforms.
How we support
- Offer ongoing support, upgrades and continuous testing as a retainer once the platform is live.
- Plan and test each upgrade of the chosen platform against your integrations before it reaches production.
- Prepare the identity controls and evidence your compliance assessors will ask for, while auditors and certification bodies issue any formal outcome.

