NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3190 most downloaded on npm
Nest - modern, fast, powerful node.js web framework (@platform-express)
Last release 4 days ago
30 Sep 2026
Ships fairly regularly
a new release about every 2 weeks
Most releases are documented
notes for 53 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
343 releases · first in 2018
Nothing published for this version
common , core , microservices , testing
common, core, microservices, testing
microservices
common
core
platform-fastify
core, testing
common
microservices
One column per quarter.
common , core , platform-fastify
core
microservices
core
common, core
platform-fastify
common
platform-fastify, testing
common, core, platform-fastify
Abdellatif Anaflous ( @hktitof )
microservices
core
platform-express
limits key-by-key instead of overriding it wholesale (@mdrezuanislamridoy)common
common
platform-fastify
Abdellatif Anaflous ( @hktitof )
microservices
common
platform-express
common
platform-socket.io , platform-ws
platform-socket.io, platform-ws
microservices
common
core
platform-fastify
microservices
platform-fastify
Nothing published for this version
The --webpack / --webpackPath flags (and their webpack / webpackConfigPath counterparts in nest-cli.json ) are deprecated in favor of --builder rspack…
NestJS 12 is centered around ESM-ready packages, first-class Standard Schema support for validation and serialization, a rebuilt CLI, and native observability through the new @nestjs/observe SDK.
Existing CommonJS applications keep working — migrating your own code to ESM is entirely optional.
📖 Full migration guide
Upgrade the CLI first, since the upgrade command ships with it:
npm i -g @nestjs/cli@latestThen, from the root of your project:
nest upgradenest upgrade moves every @nestjs/* package to its v12-compatible major at once and applies the mechanical parts of the migration for you — nest-cli.json webpack options, the GraphQL playground → graphiql rename and subscriptions transport swap, the NATS package replacement, @nestjs/config validation options, Jest and Joi bumps — then prints a report of everything it changed and everything you still need to review by hand. Run it with --dry-run first to see that report without touching your files.
It deliberately does not migrate your project to ESM, Vitest, or oxlint. Those are the defaults for newly generated projects; existing projects adopt them on their own schedule.
Node.js: v12 requires Node.js v20.19+ or v22.12+. Both require(esm) and the ESM packages depend on it; the upgrade command refuses to run on older releases (including the 21.x line). The latest active LTS is recommended.
All core Nest packages now ship as ESM. Thanks to require(esm) in modern Node.js, most existing CommonJS applications continue to work without a rewrite. Review custom bootstrapping scripts, build tooling, and test runners if they assume CommonJS-only packages.
nest new now asks whether to scaffold a CommonJS or an ESM project.
Route parameter decorators — @Body(), @Query(), @Param(), @RawBody() — accept a new schema option, designed for Standard Schema compatible libraries such as Zod, Valibot, and ArkType:
@Post()
create(@Body({ schema: createUserSchema }) body: CreateUserDto) {
return this.usersService.create(body);
}
@Get(':id')
findOne(@Param('id', { schema: z.coerce.number().int().positive() }) id: number) {
return this.usersService.findOne(id);
}The decorator only attaches metadata; register the new StandardSchemaValidationPipe to validate against it:
app.useGlobalPipes(new StandardSchemaValidationPipe());The same schemas feed OpenAPI generation. The decorator-based class-validator workflow remains fully supported, with no plan to remove it.
StandardSchemaSerializerInterceptor validates and transforms outgoing responses with the same ecosystem:
@UseInterceptors(StandardSchemaSerializerInterceptor)
@SerializeOptions({ schema: userResponseSchema })
@Get(':id')
findOne(@Param('id') id: string) {
return this.usersService.findOne(id);
}Pick per use case: ValidationPipe / ClassSerializerInterceptor for class-based DTOs, the Standard Schema variants when your schemas already exist.
@nestjs/observeThe official NestJS Observe SDK plugs into Nest's own request lifecycle through the instrument application option, rather than patching the HTTP server like a generic APM agent. Requests, jobs, errors, and traces are reported in terms of your controllers, providers, resolvers, and queue consumers:
export const { ObserveModule, ObserveInstrument } = createObserveModule();
const app = await NestFactory.create(AppModule, {
instrument: ObserveInstrument,
});Auto-instrumentation covers HTTP, GraphQL, gRPC, and microservice transports, plus queue consumers and cron runs — no manual span wiring and no collector to run. Opt-in and new; nothing to migrate. nest new and nest upgrade can wire it up for you (--observe). See the Observability chapter.
@nestjs/config moves from Joi-specific validation to Standard Schema. validationSchema now accepts any compatible schema:
ConfigModule.forRoot({
validationSchema: z.object({
NODE_ENV: z.enum(['development', 'production', 'test']).default('development'),
PORT: z.coerce.number().default(3000),
}),
});Existing Joi schemas still work with two caveats: upgrade to Joi v18+ (the first release implementing Standard Schema), and move library-specific settings under validationOptions.libraryOptions.
Routes are registered in declaration order, so on order-sensitive adapters @Get(':id') can silently shadow a @Get('me') declared after it. Two opt-in options surface this:
const app = await NestFactory.create(AppModule, {
routeConflictPolicy: { duplicate: 'error', shadow: 'warn' },
routeResolutionStrategy: 'specificity',
});Both default to the previous behavior, so nothing changes unless you set them.
HttpExceptionOptions accepts an errorCode that is serialized into the response body, so clients branch on a stable identifier instead of parsing message strings:
throw new BadRequestException('Password is too weak', { errorCode: 'WEAK_PASSWORD' });ConsoleLogger now treats plain objects passed after the message as structured params of the same log entry instead of separate records:
logger.log('User created', { userId: 1, email: 'foo@bar.com' });In JSON mode they nest under params, or spread into the root with flattenParams. On by default; set structuredParams: false to restore the old behavior.
@nestjs/cli v12)The CLI was rebuilt in nestjs/nest-cli#3280: the entire source migrated to ESM, tests moved from Jest to Vitest, e2e tests were added for every command, and command classes were refactored to take typed context objects instead of untyped inputs and option arrays.
New commands
nest upgrade (alias update) — upgrades a v11 project to v12 and applies the migration steps described above.nest deploy — deploys your application to the cloud via Mau, installing @nestjs/mau on first use and forwarding every argument straight through.Defaults and tooling
--webpack / --webpackPath flags (and their webpack / webpackConfigPath counterparts in nest-cli.json) are deprecated in favor of --builder rspack.decorator schematic generates decorators using the preferred Reflector.createDecorator() form. The angular schematic has been removed.New options
nest build / nest start: --rspackPath [path], --emit-declarations (SWC), --no-type-check, --silentnest build: --parallel [concurrency], for building monorepo projects in parallel with --allnest-cli.json: includeLibraryAssets, for copying library assets into an application build| Change | What to do |
|---|---|
| Packages ship as ESM | Usually nothing — require(esm) keeps CommonJS apps working. Review custom bootstrapping, bundler, and test-runner config. |
| Node.js v20.19+ / v22.12+ required | Upgrade Node; the 21.x line is not supported. |
| Lifecycle hooks are now invoked by component hierarchy level | Review ordering assumptions between related providers/modules in init, teardown, and tests. |
NATS v3 — the nats package is replaced by @nats-io/transport-node |
npm uninstall nats && npm install @nats-io/transport-node; update direct imports. Packets are now serialized as JSON strings and custom deserializers receive the full NATS message — read payloads with msg.json(). |
GraphQL subscriptions — subscriptions-transport-ws support removed |
Switch to graphql-ws; the protocols are wire-incompatible, so clients must be updated. Review onConnect callbacks. |
| GraphiQL is the default GraphQL IDE | Replace playground with graphiql; pass an options object to customize. |
@nestjs/config validates through Standard Schema |
Keep Joi by upgrading to v18+ and moving library settings under validationOptions.libraryOptions. |
Pipe transform signatures refined; ArgumentMetadata is now generic |
Adjust hand-written custom pipe signatures if the compiler complains. |
ConsoleLogger structured params on by default |
Set structuredParams: false to restore the previous output. |
| Webpack CLI workflows deprecated | Migrate to --builder rspack. |
angular schematic removed |
— |
Most of these are handled automatically by nest upgrade.
ValidationPipe error format — a new option controls the shape of validation error responses.GrpcExceptionFilter and status-specific exceptions map errors to proper gRPC status codes instead of UNKNOWN.@MessagePattern() and @EventPattern() accept a RegExp on the Kafka transport.REQUEST token.handleDisconnect can receive the reason for the disconnection.Thank you to everyone who contributed code, issues, reproductions, and reviews to this release. 💛
If NestJS helps you build your products, consider supporting the project.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
fix(deps): update dependency multer to v2.4.0 [security] — fixes CVE-2026-88932 ( GHSA-3pph-fpjx-jg34 )
@nestjs/platform-express
Full Changelog: v11.2.5...v11.2.6
fix(microservices): harden the tcp transport against a hostile peer
fix(microservices): handle unserializable patterns without crashing
fix(core): circular durable providers issue by @kamilmysliwiec in #17563
Full Changelog: v11.2.2...v11.2.3
fix(core): ObserveInstrument breaks app startup with @nestjs/ core@11.2.x #17554 by @kamilmysliwiec
fix(core): early-return SSE abort issue by @kamilmysliwiec
Full Changelog: v11.2.0...v11.2.1
fix(core): share existing singleton providers with lazily loaded modules by @shariyerShazan in #17430
Full Changelog: v11.1.29...v11.2.0
fix(core): stop import lookup after first direct export match by @malekelkssas in #17141
Full Changelog: v11.1.28...v11.1.29
v11.1.28 (2026-07-08) Bug fixes core #17239 fix(core): trigger teardown of SSE producer Observable on client disconnect with interceptor ( @jyx-07 ) c
core
common
websockets
platform-fastify
platform-express
fix(core): sse async handlers teardown issue by @kamilmysliwiec in #17131
Full Changelog: v11.1.26...v11.1.27
fix(core): post sse endpoint empty response #17098 by @kamilmysliwiec in #17099
Full Changelog: v11.1.25...v11.1.26
fix(microservices): reject pending Redis requests on close by @yudin-s in #17024
Full Changelog: v11.1.24...v11.1.25
Puneet Dixit ( @puneetdixit200 )
core
platform-ws
https://github.com/nestjs/nest/issues/16998 fix snapshot: true eagerly instantiates Terminus transient indicators since 11.1.20
core
Kamil Mysliwiec (@kamilmysliwiec)
core
core
## v11.1.21 (2026-05-14) #### Bug fixes * core * #16948 fix(core): settle skipped provider initialization (@yudin-s) #### Committers: 1 - Serge Yudin
Dmytro Khyzhniak (@lavieennoir)
core, testing
core
microservices
common
platform-socket.io
microservices
common
platform-express
platform-ws
Kamil Mysliwiec (@kamilmysliwiec)
microservices
https://github.com/nestjs/nest/pull/16686 fix(core): sanitize sse message
microservices
core
core, platform-express, platform-fastify
platform-fastify
platform-ws
common
auto-run middleware for HEAD requests as fastify redirects them to GET handlers (effectively skipping middleware execution) https://github.com/nestjs/
microservices
platform-fastify
common
platform-fastify
Shahnoor Mujawar (@shahnoormujawar)
microservices
platform-express
fix(microservices): if indexOf return 0 will if will be falsy by @cuiweixie in https://github.com/nestjs/nest/pull/16401
Full Changelog: https://github.com/nestjs/nest/compare/v11.1.14...v11.1.15
Kamil Mysliwiec (@kamilmysliwiec)
platform-fastify
common
common
Praveen Somasundaram (@som14062005)
microservices
common
platform-fastify
platform-express
## v11.1.12 (2026-01-15) #### Bug fixes * common * #16187 fix(common): regression in loading file-type under Windows OS (@iamkanguk97) #### Dependenci
common
platform-ws
common
platform-fastify
Kamil Mysliwiec (@kamilmysliwiec)
platform-fastify
core
platform-socket.io
platform-fastify
common
Praveen Somasundaram (@som14062005)
core
microservices
common
common
core
microservices
common, core
platform-fastify
platform-express
common
Tomer Steinberg (@TomerSteinberg)
common
platform-fastify
## v11.1.8 (2025-10-27) #### Bug fixes * core * #15815 fix(core): ensure nested transient provider isolation (@mag123c) * platform-fastify * #15831 fi
core
platform-fastify
common, platform-socket.io, websockets
microservices
platform-fastify
core
common
common, platform-socket.io, websockets
common
common, core
core
microservices
platform-fastify
core, platform-express, platform-fastify
common
Kamil Mysliwiec (@kamilmysliwiec)
core
microservices
platform-fastify
## v11.1.5 (2025-07-18) #### Dependencies * platform-express * #15425 chore(deps): bump multer from 2.0.1 to 2.0.2 in /packages/platform-express ([@de
platform-express
common, core, microservices, platform-express, platform-fastify, websockets
platform-fastify
core, testing
core
microservices
platform-fastify
common, core, microservices, platform-express, platform-fastify, websockets
core
platform-ws
platform-fastify
## v11.1.3 (2025-06-06) #### Bug fixes * core * #15201 fix(core): gracefully shutdown the app when repl exits (@dzhlobo) #### Enhancements * common *
common
common, core
platform-express
## v11.1.2 (2025-05-26) #### Bug fixes * microservices * #15172 fix(microservices): support custom strategy in async usefactory config (@mag123c) * #1
microservices
common
platform-express
Changmo Kang (Ryan) (@ChangmoKang)
core
microservices
core, platform-fastify
getHeader and appendHeader methods from AbstractHttpAdapter (@micalevisk)platform-express
microservices
platform-fastify
platform-ws
common
Kamil Mysliwiec (@kamilmysliwiec)
microservices
## v11.0.21 (2025-04-23) #### Enhancements * common * #14995 feat(common): Add fallbackToMimetype support in FileTypeValidator (@mag123c) #### Depende
platform-fastify
refactor(common): Prevent JavaScript being wrapped in eval by @Borewit in https://github.com/nestjs/nest/pull/14974
eval by @Borewit in https://github.com/nestjs/nest/pull/14974Full Changelog: https://github.com/nestjs/nest/compare/v11.0.19...v11.0.20
Nothing published for this version
chore(common): temporarily move file-type to regular deps https://github.com/nestjs/nest/commit/d9a69a32a4d560f82112e63a28c26445d4277c44
Full Changelog: https://github.com/nestjs/nest/compare/v11.0.17...v11.0.18
Nothing published for this version
fix(common): use file-type to validate file mimetypes by @Chathula in https://github.com/nestjs/nest/pull/14881
file-type to validate file mimetypes by @Chathula in https://github.com/nestjs/nest/pull/14881Your coding agent can read these notes before it upgrades. Set up the MCP server →