Repository navigation
Zitadel NextGen v0.4.0
Generated Release Facts
This section is maintained by release automation. Edit product notes outside this block.
Release commit: 72bf4dcf3ce6
Container Images
| Image | Reference |
|---|---|
| container | ghcr.io/zitadel/nextgen:0.4.0 |
| container | ghcr.io/zitadel/nextgen:latest |
npm Packages
| Package | Version |
|---|---|
@zitadel/cli |
0.4.0 |
@zitadel/server |
0.4.0 |
@zitadel/server-linux-x64 |
0.4.0 |
@zitadel/server-linux-arm64 |
0.4.0 |
@zitadel/server-darwin-x64 |
0.4.0 |
@zitadel/server-darwin-arm64 |
0.4.0 |
@zitadel/server-win32-x64 |
0.4.0 |
@zitadel/api |
0.4.0 |
@zitadel/config |
0.4.0 |
@zitadel/components |
0.4.0 |
@zitadel/sdk-core |
0.4.0 |
@zitadel/sdk-next |
0.4.0 |
@zitadel/sdk-nuxt |
0.4.0 |
@zitadel/sdk-react |
0.4.0 |
@zitadel/sdk-vue |
0.4.0 |
@zitadel/sdk-angular |
0.4.0 |
@zitadel/sdk-solid |
0.4.0 |
@zitadel/sdk-svelte |
0.4.0 |
@zitadel/sdk-qwik |
0.4.0 |
@zitadel/sdk-sveltekit |
0.4.0 |
@zitadel/sdk-solid-start |
0.4.0 |
@zitadel/sdk-qwik-router |
0.4.0 |
@zitadel/sdk-tanstack-start |
0.4.0 |
@zitadel/testing |
0.4.0 |
Package Changes
Minor Changes
-
@zitadel/cli,@zitadel/api,@zitadel/sdk-core: #235779d8dd0- The server SDKs'/__nextgenproxies and the dev proxieszitadel setupwrites for single-page apps now recognize the session calls under/api/v1as well as at their current paths, so sign-in keeps working once the API moves under/api/v1.zitadel doctorwarns about a dev proxy an earlierzitadel setupwrote, andzitadel doctor --fixupdates it. If you wrote your own production proxy for a single-page app, have it add the project secret toPOST /api/v1/sessions/exchangeas well asPOST /sessions/exchange.@zitadel/apiexportsAPI_PREFIX, the path the API moves to. -
@zitadel/cli: #24643481a07-zitadel deployandzitadel previewrecord a message when-mis omitted: a GitHub pull request's title, Vercel's commit message, or the current commit's subject on a clean worktree, so a CI run no longer needs-m.zitadel preview -mandzitadel deployment rollback -mrecord a message of their own, and a blank or over-long-mis refused. -
@zitadel/cli: #2439d277b8f-release listshows when each release was created,release getshows the resources a release pins, anddeployment getshows the variables the deployment froze. -
@zitadel/cli: #2487bf6ce2e-zitadel skills addgives your project's coding agents the Zitadel skills of the CLI version you run, for Claude Code and most other agents, and the note aftersetupnow names it (Agent setup). -
@zitadel/cli,@zitadel/server,@zitadel/api,@zitadel/sdk-core,@zitadel/sdk-next,@zitadel/testing: #2359eb363f0- The SDKs, the login components, the console and thezitadelCLI now call the API under/api/v1, where the server serves it.@zitadel/api's client puts/api/v1after the proxy path or server origin it is given, and keeps a single prefix when the origin already ends in it.zitadel apitakes a path with or without the prefix and shows the full URL with it. A call the server knows no operation for now says the server may be older than the client.Breaking: clients from this release need a server that serves
/api/v1, so upgrade a self-hosted server before the apps that call it. In a single-page app set up by an earlierzitadel setup, runzitadel doctor --fix: the dev proxy it wrote adds the project secret only to the old path of the session exchange, so sign-in fails until it is updated, andzitadel doctornow fails on it. A production proxy you wrote for a single-page app must add the project secret toPOST /api/v1/sessions/exchange. Until 1.0.0 the server also answers every operation at its old path, with aDeprecationheader. -
@zitadel/cli,@zitadel/server,@zitadel/api,@zitadel/components,@zitadel/sdk-core,@zitadel/sdk-next,@zitadel/sdk-nuxt,@zitadel/sdk-sveltekit,@zitadel/sdk-solid-start,@zitadel/sdk-qwik-router,@zitadel/sdk-tanstack-start,@zitadel/testing: #2488db05fbb- The session cookie is now__Host-zitadel_session, which a browser accepts only from Zitadel's own host over https, so another site under the same domain can no longer plant a session. Onhttp://localhostit iszitadel_session, so sign-in keeps working in Safari. An app's own, behind a server SDK or dev proxy, adds_<project id>.Breaking: every browser signs in again: cookies named
__nextgen_sessionare no longer read. Update the server, the server SDKs, the CLI and@zitadel/testingtogether; an SDK from before this release keeps no session with this server, nor the other way round. In@zitadel/testing,SESSION_COOKIE_NAMEis__Host-zitadel_session, andsessionCookieName(projectId, url)and the newbrowserSessionCookieName(url)name the cookies for the app's URL.zitadel doctorfails on the dev proxy of a single-page app set up before this release untilzitadel doctor --fixupdates it. -
@zitadel/cli: #2461b2d9cb9-zitadel setupdeploys.zitadel/to the app's origin once it has committed the project, so the sign-in it asks you to verify is served the release it built.data.deploymentreports what it deployed, and a failed deploy is a warning whosenext_commandslead with thedeploythat fixes it. -
@zitadel/cli,@zitadel/api,@zitadel/config,@zitadel/testing: #25270a00b60- Every paged list method of the@zitadel/apiclient now hasitems(),pages()andall(), which follow the cursor for you, andcreateZitadelClienttakesonResponseandonErrorhooks;@zitadel/api/clientexportspagedFunctions, each paged function's typed readers of a page's items and cursor and the arguments of its next page. The CLI no longer stops--all, the resource list commands orzitadel api --paginatewhen a server sends the same page cursor twice: that is a server bug, and the client trusts the paging contract.deploy,preview,release createandsetup's first deploy check the release body against the API's own schema before sending it, and name each field it refuses.@zitadel/testingno longer re-checks the ids the server answers its bootstrap and seeding with, and typesBootstrappedProject.previewSecretas always present, as the server always issues one.@zitadel/config'sgetDefaultHumanUserSchemais typed as the user schema document it returns,$idincluded, and exports that type asUserSchemaDocument;getDefaultHumanUserSchemaBodyreturns it without$id, as an inline schema in a release bundle must be. -
@zitadel/server: #233502677c2- The console's release detail shows a pinned policy revision: a Policies group with the policy's settings summarised above the document the CLI publishes. -
@zitadel/server: #24473f4da33- The user schema screen lists every revision of the schema, newest first and marked latest, and opens any of them read-only. An older revision says that users stay on the revision they were created on until they are migrated, and links the migration guide. -
@zitadel/server,@zitadel/api: #239826097dd- Deleting a user who is the last active member of a project's owning team now fails with409 proj.last_ownerand changes nothing. The message names the projects and says to add another member to that team, then retry.details.details.project_idslists the same ids. Admin grants stay freely revocable, suspending or deactivating a user is still allowed, and a project whose owning team already has no active member is left alone. -
@zitadel/server: #24693b43b2c- The platform project is now deployed like any project: console sign-in is served a release of the configuration the server ships, including the recommended password policy (at least 15 characters, aszitadel setupwrites), and a new server version's defaults reach the console on its first start.Breaking: the console signs in only at
server.public_base(or a loopback address), and new console passwords need at least 15 characters. Setserver.public_baseto the address you use. Configuration set on the platform project through the API no longer applies: every start deploys what the server ships. -
@zitadel/server,@zitadel/api: #2477eaa07c3-POST /teams/querynow accepts an omittedproject_idand defaults to the credential's project, matchingPOST /users/query; explicit project IDs still use the existing authorization checks. -
@zitadel/server: #24802cd409d- The server prevents other sites from framing its pages, blocks MIME sniffing, limits referrers, and disables camera, microphone and geolocation while preserving passkeys and clipboard use. The console restricts scripts with Content-Security-Policy and logs violations through/csp-report. The hosted website and docs enforce script hashes, their 404 pages included. -
@zitadel/server: #2358aa38122- The server now answers the API under/api/v1(POST /api/v1/projects,GET /api/v1/users/me), so a proxy, firewall or rate limit in front of it can select API traffic by one prefix. The console, the IdP callbacks and the health probes/livezand/readyzstay at the root. Until 1.0.0 the server also answers every operation at its path without the prefix, and those responses carry aDeprecationheader and aLinkto the docs on the base URL: move clients that still call them to/api/v1, since 1.0.0 drops them. -
@zitadel/server: #2462ff2f926-server.console_origins(NEXTGEN_SERVER_CONSOLE_ORIGINS) names more origins the console is reached at, besideserver.public_base's, and the console previews a project's login from each of them. On the hosted cloud, a preview's console now works on its deployment URL as well as on its branch alias.
Patch Changes
-
@zitadel/cli: #25239b1ef1e- Every command now prints its suggested next steps at the end of a run, includingdeploy,pull,origin add,release create,deployment create,env addand the resource commands, which used to show them only under--json.env addlists its next commands once, in that block, instead of also spelling them out in its summary. Where stdout is data a script reads (a piped list's rows, a resource's JSON body) the next steps go to stderr instead. The--jsonoutput is unchanged. -
@zitadel/cli: #2499f34a0a5-zitadel deployanddeploy --dry-runno longer report an empty diff for rapid configuration edits that leave file sizes unchanged. -
@zitadel/cli: #24951894af6-zitadel setupno longer commits local edits to files markedskip-worktreeorassume-unchanged, never writes a secret's contents into.git/objects, and leaves.envfiles and.zitadel/secretout of its commit whatever their case. It refuses a merge, rebase or detached HEAD before writing anything.deploy --jsonkeeps each file's patch with the right file whendiff.submoduleis set. -
@zitadel/cli,@zitadel/api,@zitadel/sdk-core: #2503665ea7d- Fix sign-in behind a compressing edge failing with "got no response" after a successful exchange: the SDK proxies no longer forwardcontent-encodingfor a bodyfetchhas already decoded, nor the browser'saccept-encoding. A response whose body cannot be read now fails as aNetworkErrorwith reasonunreadableand says which status arrived, instead of claiming the server never answered. -
@zitadel/server: #24378680159- Project settings lists everyone with admin access to the project and how each holds it: as a member of the owning team, through a grant to a team they are in, or through a grant of their own. The person who claimed the project appears through the owning team. Removing a grant from someone who also has team access says they keep it. -
@zitadel/server: #247401ed930- The console's sign-in page says what the console is: where you manage your Zitadel projects. It also says that your app's users sign in through your app, not there. -
@zitadel/server: #25297541fd7- The console's user detail screen now counts and dates every passkey a user has registered, not only those on the first page. -
@zitadel/server: #24483dd0da3- The console's Users list shows the schema revision each user is on and narrows the list to one schema and to its latest or older revisions, or to one revision. -
@zitadel/server: #2551d1fe7aa- Event webhook and stdout sinks no longer miss an event whose write commits after a later one, and pagingGET /events?order=ascforward no longer skips it. -
@zitadel/server: #2499f34a0a5- Prevent PostgreSQL migration deadlocks when multiple servers start while an index is being built concurrently. -
@zitadel/server: #2475d1ab5d2- The API document names its session cookie's security schemesessionCookieinstead ofnextgenSession, as the API reference now shows it. The id never goes over the wire; a client you generate from the document gets the new name, such asSessionCookieforNextgenSession. -
@zitadel/components: #25001ca73bd- Repeated clicks on Sign up or Sign in in<zitadel-login>no longer follow an empty anchor while a request is pending, avoiding unwanted URL and browser-history changes.