What changed in ZITADEL from 3 to 4

9 releases numbered after v3.4.15 up to and including v4.17.2, stable releases only. v3.4.15 and v4.17.2 are the newest stable releases of 3 and 4 we track; this page follows them as new ones ship.

72 changes across 9 releases

Added 13

v4.17.0

  • Add API definition to update Zitadel IdP
  • Add API definition to add new Zitadel providers
  • Implement command layer for AddZitadelProvider
  • Add autovacuum tuning for events2 table in eventstore
  • Extend DeleteProvider to include Zitadel IdP
  • Extend start/retrieve idp intent for Zitadel provider
  • Add get/list Zitadel IdP functionality
  • Handle Zitadel provider IdP login via login v1
  • Implement AddZitadelProvider in ManagementService
  • Implement instance-level UpdateZitadelProvider
  • Implement UpdateZitadelProvider in ManagementService

v4.16.0

  • Allow managing invite code in secret generators
  • FIPS 140-3 compliant build and runtime checks
Changed 1

v4.16.2

  • speed up ListUsers login name equality filters
Fixed 53

v4.17.2

  • Correct caching and relations of well-known app link files
  • Prevent cross-instance caching of well-known app link files
  • Support Zitadel Support IDP in console
  • Don't prepend base path to absolute IdP URL on login_hint redirect
  • Redirect unknown users to external IdP after domain discovery when enumeration protection is active
  • Resolve the registration org consistently with the login policy
  • Show account selection after RP-initiated logout
  • Allow OrgRoleIDScope downscoping in token exchange

v4.17.1

  • Block Login V2 auth for users in deactivated organizations
  • Enforce permission check when issuing passkey enrollment codes
  • Prevent the browser from requesting OTP codes via returnCode
  • Require MFA prompt step before 2FA enrollment

v4.17.0

  • Allow adding raw metadata values via appendMetadataRaw in actions
  • Allow invite codes for users whose auth methods were all removed
  • Accept SetSecuritySettings on /v2/settings/security API endpoint
  • Change username abort dialog and set email as verified in console
  • Skip CREATE USER when role exists to avoid password in Postgres logs
  • Honour login_hint and skip the auto-submit loop in OIDC flow
  • Provide hidden username on password set/change forms in login
  • Resolve unknownContext error on password page caused by inconsistent ignoreUnknownUsernames handling
  • Treat user-verified passkey as fulfilling MFA in session validity check

v4.16.3

  • Record route patterns instead of request paths on HTTP metrics

v4.16.2

  • improve random string generation
  • redirect to external IdP after domain discovery regardless of registration policy

v4.16.1

  • Display minimum length in password complexity message
  • Keep submit button disabled/loading during password set
  • Prevent crash on a stale session cookie

v4.16.0

  • Correct scope validation in token exchange
  • Correctly remove adjacent roles on user grants
  • Increase performance of ListUser by login name ignore case
  • Allow custom protocols for native apps again
  • Improve contrast of IDP processing message
  • Improve error handling for user registration
  • Migrate legacy Tailwind v4 opacity utilities and fix checkbox contrast color
  • Preserve org domain suffix through account chooser navigation
  • Prevent IDP auto-creation failure when name fields are missing
  • Redirect to loginname instead of empty accounts page when org scope filters all sessions
  • Use correct requestId with oidc_ prefix in Prompt.LOGIN + loginHint flow
  • Prevent double triggering of verification emails

v4.15.3

  • Add client and scope validation for token exchange
  • Ensure external user's email is verified before auto-linking
  • Center text for generic IDP buttons without icons in login
  • Guard defaultRedirectUri in OIDC/SAML FailedPrecondition paths

v4.15.2

  • Always validate exp and iat claims of JWT IdPs
  • Client_id verification during code exchange and refresh token flows
  • Connection handling in setup after migration steps 40, 64 and 70
  • Allow overwriting resource owner of events in eventstore
  • Apply PKCE when building OAuth and OIDC providers
  • Manage and validate audience in JWT IdP
  • Accept IDP sessions on passkey registration in login
  • Load custom font from branding settings and allow in CSP in login
  • Remove unnecessary entry from default denylist
  • Use protected http client for outgoing connections
Security 5

v4.17.2

  • Prevent TOTP reuse

v4.16.2

  • prevent external-IDP account pre-hijack in Login V1
  • require authentication before WebAuthn/U2F and TOTP/OTP enrollment
  • use protected http client for org domain HTTP verification

v4.16.1

  • Prevent disk access via require in actions

Original release notes, newest first

The list above is our reading of these notes; the originals from ZITADEL are here, one fold per release.

v4.17.2
4.17.2 (2026-08-31)
Bug Fixes

View originalPermalink

v4.17.1
4.17.1 (2026-08-14)
Bug Fixes
  • block Login V2 auth for users in deactivated organizations (a9311b8)
  • command: enforce permission check when issuing passkey enrollment codes (76dd58e)
  • login: prevent the browser from requesting OTP codes via returnCode (5f75afb)
  • login: require MFA prompt step before 2FA enrollment (db42371)

View originalPermalink

v4.17.0

4.17.0 (2026-08-12)

Bug Fixes
  • actions: allow adding raw metadata values via appendMetadataRaw (#12567) (c1b9885), closes #10666 #5526 #10470 #5526
  • allow invite codes for users whose auth methods were all removed (#12453) (eb7af25)
  • api: accept SetSecuritySettings on /v2/settings/security (#12518) (6e07fb7), closes #12313
  • console: change username abort dialog and set email as verified #10803 #12146 (#12155) (8e2dc18)
  • database: skip CREATE USER when role exists to avoid password in Postgres logs (#12538) (207f14a), closes #12178
  • login: honour login_hint and skip the auto-submit loop in OIDC flow (#12431) (3bb23d2), closes #12346
  • login: provide hidden username on password set/change forms (#12490) (e82b845)
  • login: resolve unknownContext error on password page caused by inconsistent ignoreUnknownUsernames handling (#12512) (65e50fc)
  • login: treat user-verified passkey as fulfilling MFA in session validity check (#12575) (4f3a1dd)
Features

View originalPermalink

v4.16.3
4.16.3 (2026-08-07)
Bug Fixes

View originalPermalink

v4.16.2
4.16.2 (2026-07-29)
Bug Fixes
  • improve random string generation (#12266) (34345ea)
  • login: prevent external-IDP account pre-hijack in Login V1 (917ade3)
  • login: redirect to external IdP after domain discovery regardless of registration policy (#12369) (c4ba5a1), closes #12021 #12023
  • login: require authentication before WebAuthn/U2F and TOTP/OTP enrollment (c20d613)
  • use protected http client for org domain HTTP verification (35122e4)
Performance Improvements
  • query: speed up ListUsers login name equality filters (#12460) (b3b8da0)

View originalPermalink

v4.16.1
4.16.1 (2026-07-17)
Bug Fixes
  • actions: prevent disk access via require (afe1086)
  • console: display minimum length in password complexity message (#12419) (cc3812a), closes #12390
  • login: keep submit button disabled/loading during password set r… (#12429) (0a355f7), closes #12416
  • login: prevent crash on a stale session cookie (#12423) (6030a43), closes #11130

View originalPermalink

v4.16.0

4.16.0 (2026-07-10)

Bug Fixes
  • correct scope validation in token exchange (#12312) (02d07e9), closes #12319 #12322 #12319 #12322
  • Correctly remove adjacent roles on user grants (dc89900)
  • increase performance of ListUser by login name ignore case (#12350) (8fed358)
  • login: allow custom protocols for native apps again (#12332) (5b3c10e)
  • login: improve contrast of IDP processing message (#12309) (30ad9ab)
  • login: improve error handling for user registration (#12338) (fa916e7)
  • login: migrate legacy Tailwind v4 opacity utilities and fix checkbox contrast color (#12360) (70850db)
  • login: preserve org domain suffix through account chooser navigation (#12304) (3311fb9), closes #12024
  • login: Prevent IDP auto-creation failure when name fields are missing (#11070) (ab2e099)
  • login: redirect to loginname instead of empty accounts page when org scope filters all sessions (#12346) (f21f95c), closes #11914
  • login: use correct requestId with oidc_ prefix in Prompt.LOGIN + loginHint flow (#12376) (57eb145), closes #11946 #11946
  • prevent double triggering of verification emails (#11995) (9ae9bf3)
Features
  • allow managing invite code in secret generators (#12109) (915586a)
  • crypto: FIPS 140-3 compliant build and runtime checks (#12233) (c03d9f4)

View originalPermalink

v4.15.3
4.15.3 (2026-06-22)
Bug Fixes
  • added client and scope validation for token exchange (e2886a6)
  • ensure external user's email is verified before auto-linking (c97012f)
  • login: center text for generic IDP buttons without icons (#12211) (aadc664), closes #12182
  • login: guard defaultRedirectUri in OIDC/SAML FailedPrecondition paths (0382659)

View originalPermalink

v4.15.2
4.15.2 (2026-06-17)
Bug Fixes
  • always validate exp and iat claims of JWT IdPs (4925fab)
  • client_id verification during code exchange and refresh token flows (5624030)
  • connection handling in setup after migration steps 40, 64 and 70 (#12293) (c53d977)
  • eventstore: allow overwriting resource owner of events (#12261) (a939b84)
  • idp: apply PKCE when building OAuth and OIDC providers (#12247) (ab7c6c0), closes #12036 #12054
  • jwt idp: manage and validate audience (999e2bb)
  • login: accept IDP sessions on passkey registration (#12275) (add46e0)
  • login: load custom font from branding settings and allow in CSP (#12279) (9f1561d), closes #11200
  • remove unnecessary entry from default denylist (#12294) (1ca1fbd)
  • use protected http client for outgoing connections (b6f7808)

View originalPermalink