For AI agents: the complete documentation index is available at /llms.txt, the full documentation bundle is available at /llms-full.txt, and this page is available as Markdown at /docs/releases/v0.10.0.md.

v0.10.0

Released: October 24, 2026

Node.js 24 and NestJS 12 are the headline: new projects start on Node 24, with node:24-slim images and Node 24 CI workflows, and every NestJS package is on 12. The rest of the stack moves with it: Next.js 16.4, React 19.3, Prisma 7.10, ioredis 6, BullMQ 6, OpenTelemetry 3, the current Google and Azure SDKs, and the toolchain (lerna 10, Rslib 1.0, Rstest 0.12, Vitest 5). Existing projects need the upgrade steps below.


Node.js 24

  • Node 24.15 or later everywhere: engines in the templates and the published packages, node:24-slim in the generated Dockerfiles, Node 24 in the generated GitHub workflows. Node 24 is in long-term support until April 2028.
  • @types/node 24 in every template.

NestJS 12

  • @nestjs/common, core, platform-express and testing 12.2, cli 12.0, swagger 12.0, config 12.0 and @nestjs/bullmq 12.0 in the services, nest-common and the templates.
  • The Nest 12 packages are ES modules. The services stay CommonJS and load them through Node's require(esm). Jest needs NODE_OPTIONS=--experimental-vm-modules; the template test scripts carry it.
  • Generated clients accept @nestjs/swagger 11 or 12.

Dependencies

  • Frontend: Next.js 16.4.3, React 19.3.1, eslint-config-next 16.4, Vitest 5, shadcn CLI 4 (the checked-in components are unchanged).
  • Services: Prisma 7.10.1, ioredis 6, BullMQ 6, compression 1.8.2.
  • nest-common: OpenTelemetry SDK 3.0 with the 0.300 exporters, Google Cloud Storage 8 and Secret Manager 7. The Redis connections the framework opens stay on the RESP2 protocol.
  • CLI: googleapis 188, google-auth-library 11, the Google Cloud and Azure management SDK majors, MCP SDK 1.32 (cli-mcp 0.8.0).
  • Toolchain: lerna 10, Rslib 1.0, Rstest 0.12, eslint 10.13, typescript-eslint 8.72. TypeScript stays on 6.0.
  • npm audit on a fresh project reports one advisory, in the msal-node dependency of @azure/identity, pending its next release.

Fixes

  • The email confirmation page sends the confirmation once. In development, React Strict Mode mounted it twice and the second request failed on the used token.

Breaking changes

Pre-1.0, so they ship in a minor version. The upgrade guide below covers each.

  • Node.js: 24.15 or later is required for the CLI, the services and the tests. Deploys build node:24-slim images; generated CI runs on Node 24.
  • NestJS 12: ES-module packages. Jest scripts need NODE_OPTIONS=--experimental-vm-modules. Lifecycle hooks run in a new order across modules. @nestjs/config validation options move under validationOptions.libraryOptions if you use Joi schemas.
  • BullMQ 6: the legacy repeat job option, Job.discard(), debounce and Queue.client are gone; repeatable jobs use job schedulers.
  • ioredis 6: connections you create yourself speak RESP3 by default (RESP2 on Redis 5 and older); the framework's own connections pin protocol: 2.
  • OpenTelemetry 3: @opentelemetry/sdk-trace-node no longer exists; tracing you set up yourself moves to @opentelemetry/sdk-trace. TelemetryModule needs no change.
  • shadcn 4: npx shadcn add generates components in the new registry style (radix-ui and cn packages). Existing components keep working.
  • dotenv 18 in nest-common: .env.vault files are not read.

nest-common 0.10.0

NestJS 12, OpenTelemetry 3, ioredis 6 and BullMQ 6. @nestjs/jwt is no longer a dependency. The module and service APIs are unchanged.

Upgrading an existing project

1. Node 24. Install 24.15 or later and set "engines": { "node": ">=24.15.0" } in the root package.json and in each app.

2. Root packages, overrides, nx.

npm install -D @tsdevstack/cli@^0.10.0 lerna@^10.1.1

In the root package.json, add these overrides next to the existing ones:

"@nestjs/platform-express": { "multer": "^2.5.0" },
"@nestjs/swagger": { "js-yaml": "^5.5.0" },
"nx": { "axios": "^1.18.1", "brace-expansion": "^5.0.8", "undici": "^7.30.1" }

Add an nx.json with { "neverConnectToCloud": true } so lerna's task runner stays offline, and add .nx/, **/.rstack/ and **/.vitest/ to .gitignore.

3. NestJS services. For each service:

npm install @tsdevstack/nest-common@^0.10.0 @nestjs/common@^12.2.0 @nestjs/core@^12.2.0 @nestjs/platform-express@^12.2.0 @nestjs/swagger@^12.0.4 @prisma/client@^7.10.1 @prisma/adapter-pg@^7.10.1 ioredis@^6.0.0 compression@^1.8.2 -w <service>
npm install -D @nestjs/cli@^12.0.10 @nestjs/schematics@^12.0.0 @nestjs/testing@^12.2.0 prisma@^7.10.1 @types/node@^24.19.2 -w <service>

The auth service also takes @nestjs/config@^12.0.1. Remove @types/ioredis if present (ioredis ships its own types). Prefix the Jest scripts in each service's package.json:

"test": "NODE_OPTIONS=--experimental-vm-modules jest",
"test:watch": "NODE_OPTIONS=--experimental-vm-modules jest --watch",
"test:cov": "NODE_OPTIONS=--experimental-vm-modules jest --coverage",
"test:e2e": "NODE_OPTIONS=--experimental-vm-modules jest --config ./test/jest-e2e.json"

4. Frontend.

npm install next@^16.4.3 react@^19.3.1 react-dom@^19.3.1 axios@^1.20.0 zod@^4.6.7 -w frontend
npm install -D eslint-config-next@^16.4.3 vitest@^5.0.5 @vitest/coverage-v8@^5.0.5 jsdom@^29.1.1 shadcn@^4.22.1 @types/node@^24.19.2 -w frontend

Optional: in app/(public)/confirm/confirm-client.tsx, guard the effect with a ref as the template does, so the confirmation is sent once in development.

5. Generated clients. Set "@nestjs/swagger": "^11.0.0 || ^12.0.0" in each client's peerDependencies, or regenerate them:

npx tsdevstack generate-client <service>

6. Install and check. npm install, then npm run build and npm run test. Vitest 5 clears mock history before each test; tests that counted calls across tests need their own setup.

7. Regenerate CI and deploy.

npx tsdevstack infra:generate-ci
npx tsdevstack infra:deploy --env <env>

The deploy builds the services on node:24-slim.

New projects get all of this from the templates.