Repository navigation
Generated Release Facts
This section is maintained by release automation. Edit product notes outside this block.
Release commit: c5557cdbed6d
Container Images
| Image | Reference |
|---|---|
| container | ghcr.io/zitadel/nextgen:0.2.0 |
| container | ghcr.io/zitadel/nextgen:latest |
npm Packages
| Package | Version |
|---|---|
@zitadel/cli |
0.2.0 |
@zitadel/server |
0.2.0 |
@zitadel/server-linux-x64 |
0.2.0 |
@zitadel/server-linux-arm64 |
0.2.0 |
@zitadel/server-darwin-x64 |
0.2.0 |
@zitadel/server-darwin-arm64 |
0.2.0 |
@zitadel/server-win32-x64 |
0.2.0 |
@zitadel/api |
0.2.0 |
@zitadel/config |
0.2.0 |
@zitadel/components |
0.2.0 |
@zitadel/sdk-core |
0.2.0 |
@zitadel/sdk-next |
0.2.0 |
@zitadel/sdk-nuxt |
0.2.0 |
@zitadel/sdk-react |
0.2.0 |
@zitadel/sdk-vue |
0.2.0 |
@zitadel/sdk-angular |
0.2.0 |
@zitadel/sdk-solid |
0.2.0 |
@zitadel/sdk-svelte |
0.2.0 |
@zitadel/sdk-qwik |
0.2.0 |
@zitadel/sdk-sveltekit |
0.2.0 |
@zitadel/sdk-solid-start |
0.2.0 |
@zitadel/sdk-qwik-router |
0.2.0 |
@zitadel/sdk-tanstack-start |
0.2.0 |
@zitadel/testing |
0.2.0 |
Package Changes
Minor Changes
-
@zitadel/cli: #22926392fe2- The CLI's usage analytics events now carrysurface: cli, which names the Zitadel component that sent them, so they can be read beside the events of other Zitadel components. Nothing else they carry changes. -
@zitadel/cli: #2402a7f9216-zitadel claim --no-waitprints the claim link and exits, withclaim_url,challenge_idandexpires_atunder--json, so a script or coding agent can hand the link to a person;zitadel claim --challenge-id <id>then waits for that link to be used and records the claim. -
@zitadel/cli: #234889bcfca- Runningzitadelalone now lists the commands under six headings named for what you are doing, one row per family such asusersorrelease.zitadel users --helplists its operations, every command's help ends by pointing at the overview, andzitadel commandsstill prints the flat list. -
@zitadel/cli: #2367e7b7d61-zitadel auth-method sso enable --provider customnow asks at a terminal for the connection's name, its sign-in button's name, the issuer URL and the scopes you leave out, instead of failing with a list of flags; scripts still need the flags (docs). A new custom connection also prints its claim mappings and the file to edit them in. -
@zitadel/cli: #23235f49e7d- The CLI's onboarding output now says what to do next:zitadel startpoints tozitadel setupinstead of a console link,setupspells out every choice and shows the sign-in configuration before writing it, andauth-method sso enablesays todeploythe provider, then test sign-in. The note about Zitadel's agent skills shows once per machine.Breaking:
zitadel start --jsonno longer hasdata.console, and itsnext_actionsandnext_commandsno longer mention the console; a script that reads them gets nothing there. Runzitadel console --jsonfordata.sign_in_url. -
@zitadel/cli,@zitadel/server,@zitadel/api: #16502d78353-zitadel origin add <pattern> --kind primary|preview,origin listandorigin rmmanage the origins a project serves, with the project secret (docs). A primary origin is an exact URL, and a preview wildcard on a shared host needs a literal label of your own. -
@zitadel/cli,@zitadel/config: #227008a369b-zitadel deploynow carries operation policies from.zitadel/policies/, one file per operation, checked against the new.zitadel/meta/policy.jsonschema before anything is sent;zitadel policies listandpolicies getread them back (docs). Sign-ins and sign-ups use the policy the deployed release carries, so deploying without a file switches that policy off. -
@zitadel/cli: #16523494326- Preview a branch's release on its pull-request URLs withzitadel preview. Run inside a preview build, it reads the preview URLs from the hosting platform (Vercel or Netlify; pass Cloudflare Pages URLs with--origin) or from--origin, builds the same releasedeploydoes, validates it without touching your live sign-in providers, and makes it live on those URLs for a time-to-live (--ttl, between 60s and 365d; omitted, the project's default applies). Its last line isNEXT_PUBLIC_ZITADEL_RELEASE=sha256:...for the build to pin. Outside a preview or development build it does nothing — even with an explicit--origin— because production is deployed byzitadel deployafter merge, and--origin primaryor a primary origin's own URL is refused. On a CI platform other than Vercel or Netlify, setZITADEL_ENV=previewin the pull-request build: a CI build that names no environment is skipped too.zitadel preview listshows the project's live previews, andzitadel preview rm <url>ends one early. All three authenticate withZITADEL_PROJECT_SECRETfor now, because the server does not accept the narrower preview token yet (#1575); they never fall back to the other credential.preview listandpreview rmfail, naming the variable, when it is not set;zitadel previewinstead warns and still exits successfully unless--strictis passed. -
@zitadel/cli: #14075ab100f-zitadel pullrebuilds.zitadel/from what a release pins — the live release by default, a release id (rel_…) or a deployment id (dep_…) — so the nextdeploybuilds the same release (docs). It restores schemas and flow definitions, and warns for branding and identity provider connections, which it cannot read back yet. -
@zitadel/cli: #230744029c8-zitadel startno longer reports a login URL, because the server no longer serves a login page: sign in through the login pagezitadel setupadds to your app.Breaking:
zitadel start --jsonno longer hasdata.urls.login; a script that reads it gets nothing there. -
@zitadel/cli: #22530529137- The CLI now sends its anonymous usage events to Vercel Web Analytics on the Zitadel cloud (preview.zitadel.com), with at most eight of their properties, and sends nothing to Mixpanel for now. The existing opt-outs (--no-telemetry,DO_NOT_TRACK=1,ZITADEL_TELEMETRY=0) turn them off, and runs in CI send nothing. -
@zitadel/cli: #2245ad626b9-zitadel logsnow shows the local server's warnings in yellow and errors in red, and--level warnshows only those, so the reason a sign-in failed is easy to find.zitadel startandzitadel doctorsay to keepzitadel logs --followopen, andzitadel logsworks from an app inside the directoryzitadel startran in. -
@zitadel/cli,@zitadel/server,@zitadel/api: #1651c21caeb-zitadel deployreplacesplanandapply: it builds.zitadel/, identity provider connections included, into one immutable release, shows its git diff against the live one, and makes it live on the project's primary origins (guide). Newreleaseanddeploymentcommands, and their@zitadel/apioperations, create, list, deploy, roll back and revoke releases directly; a rollback lists the revisions it restores.Breaking:
planandapplyare removed. Usedeploy --dry-runwhere you ranplan, anddeploywhere you ranapply. The generatedreleases listandreleases getare nowrelease listandrelease get, besiderelease createandrelease revoke. Add the origins your project serves withorigin addbefore the first deploy —deployneeds at least one primary origin. A server refusal because of the state it holds (an HTTP 409) now fails every command withE_CONFLICT(exit 5) rather thanE_VALIDATION(exit 3), and a target the project does not hold as an origin fails withE_VALIDATIONrather thanE_AUTH.Upgrading a project set up with 0.1.0: its app URL is registered as a preview origin only, so its first
deployfails with "The project has no primary origin to deploy to". Runzitadel doctor --fixonce to make that URL primary, aszitadel setupnow does;zitadel doctorwarns about such a project, anddeploysuggests the fix. To do it by hand, find the URL withzitadel origin list, remove it withzitadel origin rm <url>, add it back withzitadel origin add <url> --kind primary, then deploy. Adding it again without removing it fails, because the URL is already stored as a preview origin. -
@zitadel/cli: #1649bd0905d- Commands that talk to a project now resolve its server, project and credential per environment, so one checkout can serve development, staging and production;zitadel envshows what resolved and from where,env listlists the environments andenv addbinds one (docs). Values come from flags, the process environment,.env.<name>.local,.env.local,.env.<name>and.env; onlydevelopmentreads.env.local.Breaking: the server no longer comes from
ZITADEL_API_BASE, theserverfield ofzitadel.json, or a cloud default. SetZITADEL_URLin an env file, or pass--server; onlysetupstill defaults to Zitadel Cloud.zitadel.jsonno longer gets anenvironmentsblock,environments listandenvironments getare gone, and-enow means--env. -
@zitadel/cli:492ddf0- Variables now belong to the project, under a newvariablegroup, and hold a primary value, which primary deployments freeze, and a preview value, which previews freeze, with no fallback between them (docs). A plainvariable setwrites both, a secret only the primary, and--previewworks with the preview value alone;variable resolveshows what a live deployment runs.Breaking: the
variablescommands and the--project-levelflag are removed. Drop--project-level, and usevariable set NAME,variable get NAME,variable list,variable rm NAMEin place of the oldvariables set/get/list/delete. -
@zitadel/cli,@zitadel/config: #227965e1b78-zitadel setupnow writes and publishes a password policy for every new project,.zitadel/policies/auth.factor.password.set.json, with a minimum of 15 characters, NIST's minimum without a second factor, and a README on its settings. The wizard offers 15, 8 or none;--password-min-length <n>sets another,0none. Change it in the file and publish it withzitadel deploy.Breaking: a scripted
zitadel setupnow publishes a 15-character minimum. If your scripts or tests register users with passwords shorter than 15 characters, use longer ones, or pass--password-min-lengthwith the length you need. -
@zitadel/cli,@zitadel/sdk-sveltekit: #2383d9803f3- Thesrc/hooks.server.tsthatzitadel setup --framework sveltekitwrites now readsZITADEL_URL,ZITADEL_PROJECT_SECRETandZITADEL_PROJECT_IDfrom SvelteKit's$app/env/private, declared insrc/env.ts, sonpm run checkpasses without@types/node, and a missing setting fails with an error naming it instead of proxying to a default server.Breaking: setup refuses SvelteKit 2 apps, which have no
$app/env/private, andzitadel doctorandzitadel ejectno longer recognize a SvelteKit 2 app set up by an earlier release.@zitadel/sdk-sveltekitnow peers on@sveltejs/kit3 only. Upgrade to SvelteKit 3 first. -
@zitadel/cli,@zitadel/server,@zitadel/api,@zitadel/config,@zitadel/components: #2373d41d1a6-<zitadel-login>now says why it switched between sign-in and sign-up by itself: an email without an account becomes a sign-up, with a note to fix a typo in the email field, and one with an account a sign-in; an identity provider sign-in without an account gets the same note. Flow API steps carrypurposeand, after a switch,notice.Upgrading a page or design from an earlier release: a page that shows its own heading in place of the widget's should follow
step.purposefrom thezitadel-flow-stepevent, not step names, and a design ejected earlier shows the notice once its template rendersmessages, as the designszitadel branding ejectcopies now do. -
@zitadel/server: #22528c0655a- Every error the API returns is now logged once, as anapi errorline with the status, the operation and the error's code, message and cause: a 5xx atERROR, with its location and, wheninstrumentation.log.errors.stack_traceis on, its stack, and a 4xx atINFO. A handler that panics before responding now answers500internalinstead of closing the connection. -
@zitadel/server,@zitadel/config: #1803b8fb271- Rework the console navigation: logo and collapse toggle in the sidebar, project and team switchers and a ⌘K search in the top bar, an account menu with theme and sign-out, and one title line per screen. Settings is your profile, with your passkeys and linked accounts, and teams gain Overview and Members tabs.@zitadel/config/serverexportsDEFAULT_SERVER, the CLI's default server. -
@zitadel/server,@zitadel/api: #224853386a7- The console's ⌘K search, Projects list and project switcher now find a project by name on the server, however many you can act on:GET /users/me/projectstakesname_contains, andlistMyProjects()in@zitadel/apiaccepts it. A project's Admins section no longer says your access comes from the owning team when it cannot tell. -
@zitadel/server: #228669cfaa3- The console's project switcher is a searchable list: type a name and press Enter to switch. It opens on the current and recent projects, then the rest by name while they fit one page, finds others on the server, and shows each project's generated mark and its site's host or ID, so same-named projects can be told apart. -
@zitadel/server: #229195ee0c5- Projects is now the console's home, drawn without the sidebar, which lists only the selected project's screens; a screen opened without a project asks for one. Each row shows the project's generated mark, its name above its site's host, and its ID. Beside the list is thesetupcommand for a new project, below it how a project reaches production. -
@zitadel/server: #22046a39340- The console lists a project's deployments and the release each made live, with its pinned revisions and their documents, and from there deploys a release to the primary origins, redeploys or rolls back a deployment, and revokes a release no origin still serves. The release and deployment operations these screens use accept the Console session. -
@zitadel/server: #2349d731223- The console's user schema screen now badges the property a schema signs users in with (x-identifier) and the properties that make up their display name (x-display), and the attribute labels on a user's page line up with their inputs. -
@zitadel/server,@zitadel/api: #1852db036a5-POST /deployments/{deployment_id}/rollbackre-deploys an earlier primary deployment's release to every current primary origin, as a new deployment withreason: rollback(docs). When nothing would change it answers200with the newest primary deployment, andexpected_deployment_idguards against a racing deploy with409dep.conflict. -
@zitadel/server: #2299f2660b2- An unknown address or a failed sign-in callback now shows a page in Zitadel's design with a request ID, and the console's error screens share its layout. Programs get JSON:404req.not_found, or405req.method_not_allowedwithAllow.server.request_id_headertakes the request ID from a proxy's header, such asx-vercel-id; set it only behind a proxy that overwrites it. -
@zitadel/server: #227695d7c91- A deployment freezes its kind's variables when it is created, andGET /deployments/{deployment_id}/variablesreturns that set, a secret as{"secret": true}(docs). A release that references a name without a value for that kind is refused with400dep.variables_missing, and a rollback keeps the restored deployment's set. -
@zitadel/server,@zitadel/components: #2236dcc1282- A GitHub sign-in button in the login now shows the GitHub logo, in the button's text colour in light and dark mode; Google's logo is unchanged, and providers without a brand icon, such as custom OIDC connections, stay text-only. -
@zitadel/server,@zitadel/config,@zitadel/components: #2231c0e9b41- The password step of<zitadel-login>shows the account as a full-width chip that goes back to use another account, with an avatar generated from the typed identifier, so it never confirms an account exists; the console shows the same avatar. Custom templates get the chip as<zl-account>, and<zl-avatar>and@zitadel/components/avatarexport the avatar for your own pages. -
@zitadel/server: #2254afac09f- The access log now writes oneINFOline per request,request served, with its method, path without the query, operation id, status, size, duration and, inside a sampled trace,TraceIDandSpanID. Thehandling requestline and theerror_codefield are gone; errors are logged asapi errorlines. The IdP callback now has a server span of its own. -
@zitadel/server,@zitadel/components: #21264bcb7c3- Where the user chooses a password, the login's password field now follows the project's password policy, itsmin_lengthand itsmax_lengthor the 64-character cap, and refuses a password outside them with the bound in the message. The fixed minimum of 8 is gone, so a project without a policy has none; sign-in steps carry no length rule. -
@zitadel/server: #2246ae9d6ab- Name the people who run a deployment as platform operators withplatform.operators(NEXTGEN_PLATFORM_OPERATORS, user ids of the platform project). An operator administers every project of the deployment, and their project list in the console is every project. Every change an operator makes is marked as such in the changed project's events. The hosted cloud makes its root admin an operator. -
@zitadel/server,@zitadel/api: #23292ecde76-POST /releases/buildnow takes operation policies underpolicies, each the bodyPOST /policiestakes, adds a revision only for a changed one and pins each; building them needspolicy.write(docs). A sign-in or sign-up applies the policy its release pins, none when it pins none, and the newest revision when no release resolves. -
@zitadel/server: #22288e962e8-GET /policies?project_id=…lists a project's policies at their newest revision,GET /policies/{policy_id}reads one andGET /policies/{policy_id}/revisionspages its history; the reads also accept a console session (docs). A policy'sconfigis typed per operation, and a refused publish lists every failed setting or rule indetails.details.violations. -
@zitadel/server: #2109ce53276-POST /policies?project_id=…publishes a password policy as a new revision, with optionalmin_length,max_lengthandhistory_depth, andGET /policies/revisions/{revision_id}reads one back (docs). The newest revision applies the next time a password is set; existing passwords are not re-checked. The new scopes arepolicy.readandpolicy.write. -
@zitadel/server,@zitadel/api: #185589a3471-POST /deploymentsnow deploys a release to the preview URLs named intargets, each matching one of the project's preview patterns, and keeps each live for the request'sttl, an ISO-8601 duration of up to 365 days, or for 7 days (docs). A session exchangettltoo large to represent now answers400instead of wrapping around. -
@zitadel/server,@zitadel/api: #184933918fa-GET /projects/{project_id}/previewslists the project's live previews, newest first, with their expiry, andPOST /projects/{project_id}/previews/removeends one at once. Removing a URL with no live preview answers204too. A removal that ends a preview is recorded in the audit stream aspreview.removed. -
@zitadel/server,@zitadel/api: #15085ea7fe4-GET /projects/{project_id}/adminslists who can administer a project and how: through the team that owns it, an admin grant to them, or one to a team they belong to, as far as the caller may see (docs).GETandPATCH /projects/{project_id}now returnowning_team_id, and the person who claimed a project during local setup is listed through its owning team. -
@zitadel/server: #2308bfdf226-/readyznow answers503while the server's database does not answer within a second, so a load balancer stops sending it requests, and the console's System screen reads it./livezstill answers while the process serves HTTP; point liveness probes there, so a database outage does not restart every instance.Breaking:
/healthzis removed. Move liveness probes that use it to/livez, and readiness probes to/readyz. AzitadelCLI or@zitadel/testingfrom an earlier release waits for/healthz, so it does not see a server from this release as up: update them together with the server. -
@zitadel/server: #21235615b0d-POST /releases/{release_id}/revokemarks a release revoked, once: a revoked release comes back unchanged with its firstrevoked_at, andGET /releasesandGET /releases/{release_id}now report it. A release that any primary origin or live preview URL still serves answers409withrel.in_use, naming each origin and the deployment that pins it. Deploying a revoked release answers409withrel.revoked. -
@zitadel/server: #223282463d3- A sign-in that resolves to a release now uses the user schema, branding and identity provider revisions that release pins, the built-in login branding when it pins a flow but no branding, and the SSO client credentials frozen with its deployment; a sign-in with no release still uses the newest revisions and the project's current variables. -
@zitadel/server: #204663ea1c1-POST /auth_attemptsandPOST /sessions/exchangetake the project from the project secret and answer403proj.mismatchwhen the request names another one. A handoff exchange is refused once the release its sign-in started on is revoked; an invalid or expired token still answers400sess.invalid_handoff_token. -
@zitadel/server: #204537d36c1-GET /flow/{id}andPOST /flow/{id}/submitanswer409rel.revokedonce the release a sign-in started on has been revoked, and a deploy during a sign-in does not change that sign-in's steps. -
@zitadel/server: #230744029c8- The server no longer serves a login page at/ui/login/, which could not sign anyone in; your app presents the login with<zitadel-login>, whichzitadel setupadds. The server serves/console/runtime.jsoneven with its own console off, so a console hosted elsewhere keeps working.Breaking: the
server.login_enabledandserver.login_pathsettings, and theNEXTGEN_SERVER_LOGIN_ENABLEDandNEXTGEN_SERVER_LOGIN_PATHvariables, are gone. The server ignores them, so remove them from your configuration at your convenience. Links to/ui/login/now answer 404. -
@zitadel/server: #22530529137- Add an opt-in service ping: withservice_ping.enabled(NEXTGEN_SERVICE_PING_ENABLED=true), the server reports its version, whether it runs self-hosted or locally (on a loopbackserver.public_base), its database dialect, operating system and CPU architecture to Vercel Web Analytics when it starts and once a day after. It never sends its address. It is off by default. -
@zitadel/server: #2392e9ba1b4- A successful password sign-in now replaces an outdated stored hash with one written by the project's password hashing method, so imported bcrypt or legacy hashes move to argon2id, or to the method the project chose, as users sign in. A project whose method is bcrypt keeps bcrypt. If the new hash cannot be stored, the sign-in still succeeds. -
@zitadel/server: #2213fae2169-GET /idps/revisions/{revision_id}accepts a Console session cookie as the signed-in user, like the other identity provider reads, so the Console can show the document a release pins. -
@zitadel/server: #2364464a344- The origins operations (POST /projects/{id}/originsandPOST /projects/{id}/origins/remove) and the variable reads (GET /variablesandGET /variables/{name}) accept a Console session cookie as the signed-in user, so the Console can manage a project's origins and show its variables; variable writes still take the project secret. -
@zitadel/server: #14695bdb8f0- Setinstrumentation.trace.trust_remote_spans(NEXTGEN_INSTRUMENTATION_TRACE_TRUST_REMOTE_SPANS) totrueto continue a caller's W3Ctraceparenttrace instead of starting a new one; it was accepted before but did nothing. It is off by default and trusts the caller's sampled flag overinstrumentation.trace.fraction, so turn it on only behind a proxy or mesh you control.
Patch Changes
-
@zitadel/cli: #22895d164ad- TheAGENTS.mdsectionzitadel setupwrites now says the generated pages and request boundary are the app's to change, aszitadel doctortreats them, and points at the documented--zl-*tokens and::part()names for theming; the CLI's agent skill says to capture output outside the app directory. -
@zitadel/cli: #23662fcf14c- Every question the CLI asks now reads as a plain question, such as "What is the client ID of your Google OAuth app?" instead of "Client ID", and the client secret question says which project variable will hold it. -
@zitadel/cli: #236876dc3be-zitadel doctorno longer checks a local Zitadel runtime for a project set up against a hosted server, so another app on port 8080 no longer fails it withE_PORT_IN_USE. -
@zitadel/cli: #236876dc3be- TheAGENTS.mdsectionzitadel setupwrites now says a page heading shown in place of the login's own has to follow itszitadel-flow-stepevent, since the login moves between sign-in and sign-up by itself, instead of suggesting a fixed heading that read "Sign in" during a sign-up. -
@zitadel/cli: #23863c324b5-zitadel setupcreates React, Vue, Solid, Svelte and Qwik apps again: it pinscreate-vite9.3.1, since 9.3.2 was published without its templates and setup then failed with "Could not detect a supported app framework". -
@zitadel/cli: #2299f2660b2- When the server has no endpoint for a command, the CLI now says that the server and the CLI are different versions instead of reporting a missing resource, and still tells apart a--serverthat is not a Zitadel API. -
@zitadel/cli: #23714d4e814-zitadel setupasks fewer, clearer questions: your app's port only when that port is taken, and the server with the local one listed even when stopped. An empty client ID skips that sign-in provider and prints thezitadel auth-method sso enablecommand that adds it later, and Ctrl-C at any prompt exits with code 130 and no error. -
@zitadel/cli: #1649bd0905d- Commands the CLI suggests running next now keep the run's--env,--env-fileor--server, so following one targets the same project instead of the default one. -
@zitadel/cli: #2308bfdf226-zitadel startnow waits until the local server's database answers, not only its process, andzitadel doctor,zitadel statusandzitadel setupcount a local server as healthy only then, asking its/readyzinstead of/healthz. -
@zitadel/cli,@zitadel/config: #236876dc3be-zitadel setup --use-case consumerand--use-case businessnow make a user's given and family name their display name (x-display), so a signed-in session reads "Ada Lovelace" instead of only the email, ingetSession()and<zitadel-session>.Upgrading a project set up earlier: add
"x-display": ["givenName", "familyName"]to its user schema and runzitadel deploy; users who sign up after that show their name. -
@zitadel/cli: #23268e651ad-zitadel doctornow warns when the editor schemas in.zitadel/meta/are missing or outdated, which leaves a file's$schemapointing at nothing or at old rules, anddoctor --fixwrites the current ones;branding ejectwrites.zitadel/meta/branding.jsonthe same way. -
@zitadel/cli,@zitadel/sdk-next: #2372bbe402b- Adding a route toprotectedRoutesalone now requires a sign-in on it:zitadel setupwrites a Next.jsproxy.ts(middleware.tson Next.js 15) whosematchercovers every route but Next.js's build files; before, a route missing from thematcherstayed public without a warning.Upgrading an app set up earlier: it keeps its
matcher; replace it with["/((?!_next/static|_next/image|favicon.ico).*)"], or add each protected route to it. -
@zitadel/server: #23369b5a865- The theme button on the console's Branding screen now shows which side the preview paints and opens a menu of From branding, Light and Dark, without a side the branding does not publish, instead of cycling through them behind one sun icon. -
@zitadel/server: #2201b4fba1a- Console form field labels now use Arimo at 14px/20px with regular weight instead of the APK Futural display face. -
@zitadel/server: #2244cc033b4- The console's Optional marker beside form field labels now uses Arimo at 12px/16px in sentence case instead of small uppercase letters. -
@zitadel/server,@zitadel/api: #2301fedce7e- The console's error screens now show the failed request's ID instead of the error code, so a support request can quote it, andApiErrorfrom@zitadel/apicarries it asrequestId. A not-found screen names what is missing, such as "User not found", and leads back to its list; the others lead to Projects without the selected project. -
@zitadel/server: #23611155fb1- Section headings on the console's detail screens and personal settings, such as Field definitions and Steps, now use the shared heading sizes instead of small uppercase captions. -
@zitadel/server: #2278c51ec40- The console's user detail screen shows the schema's name beside its revision box, which now holds only the revision id. -
@zitadel/server: #226819c5266- The console's Users table stays within its width however many properties a schema has: the User column and row menu stay in view while it scrolls, schema properties appear once pinned from the Columns menu, and the rest read in one Attributes column that opens them as fields, JSON or YAML. The Team column is now "Member of". -
@zitadel/server: #20880cd5179- An authenticated request now answers503unavailableinstead of500internalwhen the database reports a temporary failure during its credential check, so clients can retry it, and the API reference listsunavailableandnot_implementedfor every endpoint that checks a credential. -
@zitadel/server: #229437fa78e- The console's login preview works again offlocalhost, as on the hosted cloud, for a project that lists its origins:POST /flownow admits the originserver.public_basenames, though a step submitted from there is still refused unless the project lists it. -
@zitadel/server: #2297778bdfb-POST /flow/{id}/submitnow checks an opaqueOrigin(null), which browsers send from sandboxed frames anddata:pages, against the project's origins, so a project that lists its origins refuses it withreq.invalidinstead of skipping the check. -
@zitadel/server: #226989369c0- Building a release that edits an existing identity provider connection, aszitadel deploydoes after you change one, no longer fails with500internal, and switching a connection back to an earlier document reuses that revision. -
@zitadel/server: #141030a113d- A server that fails to start now logs why atERROR, in the configured log format, so the reason also shows withinstrumentation.log.level: warn, where it used to be logged atINFOor, at that level, not at all. -
@zitadel/server: #220566ea694- A caller whose grants in a project are scoped to a team or a single resource now gets404, as for an id that names nothing, instead of403when reading or updating a resource outside every scope it holds, so it no longer learns whether that resource exists. -
@zitadel/server: #22288e962e8- Reading an identity provider connection, its revisions or a schema by id now answers not found when the request'sproject_idnames a project the resource is not in, where a project secret used to get it from its own project. -
@zitadel/server: #2352219a504- Removing a stream frominstrumentation.log.streamsnow drops that stream's log lines. Before, every stream was logged whatever the list said.instrumentation.log.add_sourcenow applies to the lines written through the zlog helpers as well; before, those lines never carried a source. -
@zitadel/server: #2345f85c3e7- Server error logs no longer include a stack trace by default. Setinstrumentation.log.errors.stack_trace: trueorNEXTGEN_INSTRUMENTATION_LOG_ERRORS_STACK_TRACE=trueto turn it back on while debugging. -
@zitadel/server: #2246ae9d6ab- A change a console session makes in another project is now recorded in that project's events, not in the events of the project the session belongs to. -
@zitadel/config,@zitadel/components,@zitadel/sdk-core,@zitadel/sdk-next,@zitadel/sdk-nuxt,@zitadel/sdk-react,@zitadel/sdk-vue,@zitadel/sdk-angular,@zitadel/sdk-solid,@zitadel/sdk-qwik,@zitadel/sdk-sveltekit,@zitadel/sdk-solid-start,@zitadel/sdk-qwik-router,@zitadel/sdk-tanstack-start,@zitadel/testing: #232831ef6c1- The packages no longer ship.d.ts.mapfiles. They pointed atsrcfiles the packages do not publish, so an editor's go-to-definition already landed on the.d.ts; it still does. -
@zitadel/components,@zitadel/sdk-react,@zitadel/sdk-vue,@zitadel/sdk-angular,@zitadel/sdk-solid,@zitadel/sdk-svelte,@zitadel/sdk-qwik: #23175092d59- The React, Vue, Solid, Svelte, Qwik and Angular SDKs' published types now resolve under strict Node ESM resolution (node16andnodenext), and@zitadel/componentsexportsdefaultTemplateandlayoutChromeCssas plain strings, so its declarations import no chunk without types. -
@zitadel/sdk-core,@zitadel/sdk-next: #2374727b716- The@zitadel/sdk-nextmiddleware now asks the Zitadel server about a session only onprotectedRoutes, andauth()asks when a page reads it, so a page that never callsauth()costs no call;resolveSessionin@zitadel/sdk-coretakescheckOpaqueSession: falseto leave that check to a render layer. -
@zitadel/sdk-core: #2375704911f- Signing out through a server SDK's/__nextgenproxy now also ends a session still held in the shared__nextgen_sessioncookie, which Zitadel kept valid until it expired because that sign-out carried no CSRF token. -
@zitadel/sdk-next,@zitadel/sdk-nuxt: #2285dcea62f- The@zitadel/sdk-nextREADME and the editor docs forgetSession(),useAuth(),auth()andNextgenProvidernow describe the session asuserId,identifier,identifierPropertyanddisplay, the fields they return, and the README placesproxy.tsnext to theappdirectory; the@zitadel/sdk-nuxtREADME names the product Zitadel. -
@zitadel/sdk-tanstack-start: #238130ba040-createNextgenRequestMiddlewarenow type-checks insidecreateMiddleware({ type: "request" }).server(...), sotscno longer rejects thesrc/start.tsthatzitadel setupwrites with TS2345. -
@zitadel/testing: #2308bfdf226-withZitadelnow waits for the instance's/readyz, which answers once its database does, instead of/healthz, so a suite starts against an instance that can serve requests.