mrkeyoor.com_
Sat 17 Oct 13:34 UTC
Self-Hostedevaluationupdated 26 Aug 2026

zitadel review

ZITADEL is an identity and access management platform for applications that need login, SSO, MFA, passkeys, service accounts, organization-level tenancy, and audit history. You can buy its cloud service or run the same code with PostgreSQL, but operating identity infrastructure is a much larger commitment than adding a login library.

+48stars / 7d
Verdict

Our ZITADEL checkout installed 2,123 pnpm packages and consumed 1,873 MB, but it exposed no root build or test target, so our run cannot certify the Go server. Shortlist it for serious B2B identity work where organizations, APIs, audit events, and self-hosting belong in one system. Do not choose it merely to avoid writing login code: the database, security updates, licensing, and recovery plan become your responsibility.

We ran it

Lab card: what happened when we ran zitadelScreenshot of zitadel (zitadel.com)
Install✓ · 225s2123 packages · 1873 MB
Buildn/ano build script
Testsn/ano test script
Repo9927 files~912,264 lines of source · 250.9 MB · 10 CI workflows · tests dir

Answers from our run

Does zitadel build from source?

Dependencies installed in 225 seconds (2123 packages), and the project has no separate build step. We cloned commit a1a4572 into a clean Debian container with 3 CPUs and no project-specific setup.

Does zitadel have tests you can run?

Not through a standard command: the project exposes no test script or target that our harness could run.

Who should not use zitadel?

Small applications that only need social login and a user table: ZITADEL's 9,927-file repository and multi-tenant model add a platform where a library may suffice.

What are the alternatives to zitadel?

Keycloak, Authentik, Ory Kratos. Our ZITADEL checkout installed 2,123 pnpm packages and consumed 1,873 MB, but it exposed no root build or test target, so our run cannot certify the Go server.

Setup2/5225-second web install; production also needs PostgreSQL and IAM ops
Docs5/5Quick starts, deployment, APIs, security, support, and updates covered
Community5/514,862 stars with same-day pushes and heavy issue and PR activity
Maturity4/5OIDC-certified v4 platform, with current auth fixes still arriving

Discussed on

  1. hnEasy to use OpenID Connect client and server library written for Go165 points
  2. hnZitadel: The best of Auth0 and Keycloak combined100 points
  3. hnMigrate Users from Keycloak to Zitadel37 points
  4. hnPassword Hashing Package for Go15 points
  5. hnAuthenticate with PHP Symfony Through OIDC9 points

Who it’s for

B2B SaaS teams that need organizations, delegated administration, projects, and policy boundaries.
Platform groups that want OIDC, SAML, SCIM, machine accounts, and APIs in one identity service.
Self-hosters with PostgreSQL operations, upgrade discipline, monitoring, and an incident process.
Companies that need an immutable event stream for identity changes and external audit integration.

Who it’s NOT for

Small applications that only need social login and a user table: ZITADEL's 9,927-file repository and multi-tenant model add a platform where a library may suffice.
Organizations unable to staff authentication as critical infrastructure: a bad upgrade, database outage, or policy mistake can block every dependent application.
Teams that cannot accept AGPL-3.0 terms for the main codebase: only named directories receive Apache-2.0 or MIT exceptions.
Buyers who need our measured checkout to prove the server builds and tests: the pnpm root exposed neither target, so both were skipped.
Provisioning systems that assume every no-op write is idempotent: issue 12642 reports v4.17.1 returning 200 for some unchanged writes and 400 for others.
OIDC clients relying on fragment response mode with encoded state today: issue 12645 reports v4.17.1 double-encoding the state value.

Setup reality

Our harness treated commit a1a4572 as a pnpm workspace. Installation succeeded in 225 seconds, adding 2,123 packages and using 1,873 MB. No root build script or test target was exposed, so both steps were skipped; our run did not verify the Go identity server.

Self-hosting needs PostgreSQL 14 or newer, a stable external domain, TLS, secrets, email delivery, backups, and an upgrade plan. The README offers Docker Compose for evaluation and Kubernetes for production-oriented deployment.

This is a 9,927-file, 250.9 MB checkout with about 912,264 source lines across Go and web applications. Identity policies, redirect URIs, signing keys, tenant boundaries, and recovery access all need production review before applications depend on it.

Organizations and projects are first-class boundaries

ZITADEL is designed for B2B identity rather than a single application's login screen. Its hierarchy separates an identity system, customer organizations, and projects, with roles and policies scoped at several levels. The feature set includes OIDC, SAML 2.0, SCIM 2.0, passkeys, MFA, identity brokering, service accounts, token exchange, delegated role management, and custom sessions. Every resource is available through connectRPC, gRPC, or HTTP APIs.

That breadth is most useful when customers administer their own members and applications share one identity platform. A small product with one tenant and a few social providers may spend more time understanding organizations, grants, instances, projects, actions, and policies than it saves. ZITADEL should replace a real IAM problem, not a password form. The README's 3-minute Compose claim describes first startup, not production readiness.

The event stream improves audits and raises database stakes

Every mutation is recorded as an immutable event, which gives ZITADEL an API-accessible audit trail and a source for external webhooks or security systems. The relational core uses PostgreSQL 14 or newer. The project documents horizontal scaling and zero-downtime updates without an external session store. Those properties are attractive when identity changes must be traceable across many customer organizations.

Event-driven storage also makes database operations part of authentication. Backups must preserve more than a current user table, and restoration needs testing against projections and application behavior. Signing keys, SMTP credentials, external identity-provider secrets, redirect policies, and a break-glass administrator all need separate handling. A Compose container reaching a healthy state does not answer how users sign in during a region failure or a damaged migration.

What happened when we ran it

Our harness classified commit a1a4572 as a Node pnpm workspace and installed it in 225 seconds. The dependency tree added 2,123 packages and occupied 1,873 MB. The checkout before installation was already 250.9 MB with 9,927 files and about 912,264 source lines. This is the largest repository in the requested set by both file and source-line count.

No root build script or target was exposed to the harness, so the build was skipped. No root test script or target was exposed either, so tests were skipped. The repository did contain a tests directory and 10 CI workflow files. Skipping is not passing: our measurements do not prove that the Go server, login application, console, database migrations, or protocol suites compile and pass at commit a1a4572.

The run used a Node 22 Debian container with 3 CPUs, 8 GB of RAM, and no secrets. It did not start PostgreSQL, migrate a database, issue tokens, or exercise OIDC. The 225-second result is still useful for contributors working in the web monorepo, but production evaluation needs the documented server build, a real database, TLS, email, and a client application that verifies login and logout flows.

v4.17.1 fixed four authentication mistakes

Release v4.17.1 arrived on August 14, 2026 with four narrowly described fixes. It blocks Login V2 authentication for users whose organization is deactivated, enforces a permission check when issuing passkey enrollment codes, prevents a browser from requesting OTP codes through returnCode, and requires an MFA prompt before 2FA enrollment. That release content is exactly why identity software needs prompt patch review rather than casual quarterly upgrades.

Current work continues in the same area. Pull request 12616 says TOTP codes could be reused within their valid window and proposes recording a salted HMAC after successful use. Another pull request applies configured root CAs during LDAP StartTLS. These are active changes, not proof that every deployment is exposed. They are reasons to subscribe to advisories, pin supported releases, rehearse upgrades, and map each enabled protocol to its own regression tests.

v4.17.1 still has OIDC and API consistency reports

Issue 12645 reports that response_mode=fragment double-encodes OIDC state in versions 4.16.0 and 4.17.1, while query mode returns it correctly. A state mismatch can break a relying party even when authentication itself succeeds. Teams using fragment mode should reproduce the report with their client library and track the upstream issue before rollout.

Issue 12642 describes inconsistent no-op writes in v4.17.1. Some endpoints return 200 when the desired setting already exists, while policy, application, identity-provider, and other commands may return 400 NoChangesFound. That matters for declarative provisioning, which often repeats the same desired state. Wrap calls carefully, distinguish a true invalid request from an unchanged value, and test reconciliation twice.

AGPL licensing belongs in the architecture review

The main repository uses AGPL-3.0, while the licensing policy provides Apache-2.0 and MIT exceptions for specific directories. That is not the same as a permissive license across the product. A company modifying or serving ZITADEL should have counsel review the exact deployment, modifications, distribution, and exception boundaries before implementation starts. The cloud service is an alternative when operating or licensing the server is unattractive.

GitHub recorded 14,862 stars, 1,137 open issues and pull requests combined, and a last push on August 26, 2026. The combined count is not 1,137 bugs; it includes a large, active contribution queue. ZITADEL deserves a proof of concept when multi-tenant IAM is already a platform requirement. Our 1,873 MB pnpm result warns contributors about scale, while the untested server path means the final decision should rest on a full deployment exercise, protocol tests, restore rehearsal, and an upgrade plan.

Alternatives

ProjectWhat it isPick it when
Keycloak gh↗A widely deployed Java identity server with realms, federation, and a large integration ecosystem.pick this instead when established enterprise adapters and existing Keycloak experience outweigh ZITADEL's API design.
Authentik gh↗A self-hosted identity provider with visual flows and application proxy options.pick this instead when homelab or internal-app SSO and configurable login flows are the priority.
Ory KratosA headless identity service intended for custom user-facing flows.pick this instead when you want to own the UI and compose narrower Ory services around identity.
Authelia gh↗An authentication and authorization gateway for protecting web applications behind a proxy.pick this instead when protecting internal web apps is the job and full B2B IAM is unnecessary.

What people are saying

  1. [github-trending] zitadel/zitadel

Sources

  1. ZITADEL repository
  2. ZITADEL documentation
  3. ZITADEL v4.17.1 release
  4. OIDC fragment state encoding report
  5. No-op API consistency report
  6. TOTP reuse fix
  7. ZITADEL licensing policy

More self-hosted reviews

playport · edge-smart-doh · Comma · ProsperoEden · zulu · node_exporter · the whole board →