Skip to content

Zitadel - Technical Overview

Zitadel is an open-source, cloud-native Identity and Access Management (IAM) platform built in Go. It provides authentication, authorization, and user management with a strong focus on multi-tenancy, event sourcing architecture, and developer experience. Zitadel combines the open-source commitment of Keycloak with the modern developer experience of Auth0.

High-Level Architecture

Authentication Flow (OIDC Authorization Code with PKCE)

Event Sourcing & CQRS Architecture

Event Sourcing Benefits

BenefitDescription
Complete Audit TrailEvery change is recorded as an immutable event
Time TravelReconstruct state at any point in time
DebuggingFull history of what happened and when
RecoveryReplay events to rebuild state if needed
ComplianceBuilt-in audit logging for regulatory requirements

CQRS Pattern

  • Command Side: Handles all write operations (user creation, login, role changes)
  • Query Side: Optimized read operations from denormalized projections
  • Eventual Consistency: Query views are updated asynchronously
  • Strong Consistency by ID: Individual resource lookups can verify against Event Store

Multi-Tenancy Model

Multi-Tenancy Concepts

ConceptDescription
InstanceCompletely isolated ZITADEL deployment
OrganizationTenant within an instance (users, policies, branding)
ProjectCollection of applications with roles
Project GrantDelegated access to projects for other organizations
UserBelongs to one organization, can have cross-org authorizations

B2B Scenario Flow

Actions V2 - Custom Logic System

Actions V2 Components

ComponentDescription
EndpointExternal HTTP endpoint with custom logic
TargetZITADEL resource pointing to an endpoint
ExecutionRules defining when to trigger targets

Trigger Types

  • Request: Intercept and modify incoming API requests
  • Response: Process and modify API responses
  • Event: React to system events (user created, role changed)
  • Function: Hook into specific ZITADEL functions

Security Features

Why Passkeys Over Traditional MFA

AspectPasswords + MFAPasskeys (FIDO2)
Phishing ResistanceVulnerableResistant (domain-bound)
Credential TheftPossibleNot possible
User ExperienceMultiple stepsSingle gesture
Device SupportVariesUniversal (modern devices)
Brute ForceRate limiting neededNot applicable

Deployment Architecture

Deployment Options

MethodDescriptionUse Case
Docker ComposeSingle-node deploymentDevelopment, testing
KubernetesScalable, HA deploymentProduction
Linux BinaryDirect installationSimple setups
ZITADEL CloudManaged SaaSNo ops overhead

Production Requirements

Protocol Support

Comparison with Alternatives

FeatureZITADELKeycloakAuth0
LicenseAGPL v3Apache 2.0Proprietary
LanguageGoJavaN/A
Multi-TenancyNative, first-classVia RealmsYes
Event SourcingYesNoNo
Self-HostedYesYesNo
Cloud OfferingYesNoYes
PasskeysIncluded freePluginExtra cost
APIgRPC + RESTRESTREST

Key Facts (2025)

  • Series A Funding: $9 million (November 2024), led by Nexus Venture Partners
  • GitHub Stars: 10,000+
  • License: AGPL v3 (as of v3)
  • Language: Go
  • Database: PostgreSQL (CockroachDB deprecated in v3)
  • Customers: 150+ across North America and Europe
  • Primary Protocol: OpenID Connect certified
  • OIDC Library: Certified by OpenID Foundation

Use Cases

1. B2B SaaS Multi-Tenancy

Manage multiple business customers with isolated configurations, branding, and user management delegation.

2. Customer Identity (CIAM)

Consumer-facing applications requiring social login, passwordless authentication, and self-service.

3. Workforce Identity

Internal employee authentication with federated login to corporate identity providers.

4. API Security

Machine-to-machine authentication using JWT bearer tokens and client credentials.

5. Single Sign-On (SSO)

Unified authentication across multiple applications and services.

6. Passwordless Migration

Transitioning users from passwords to passkeys for improved security and UX.

Getting Started

Quick Start Commands

bash
# Download docker-compose.yaml
curl -fsSL https://raw.githubusercontent.com/zitadel/zitadel/main/docker-compose.yaml -o docker-compose.yaml

# Start ZITADEL
docker compose pull
docker compose up --detach --wait

# Access at http://localhost:8080/ui/console
# Login: zitadel-admin@zitadel.localhost / Password1!

Sources

Technical research and documentation