NestJS

Frameworks & LibrariesMIT

A progressive Node.js framework for server-side applications.

Latest v11.2.4 · by NestJSWritten in TypeScriptWebsitenestjs/nestRSS

Branches

12
v12.0.2
11
v11.2.4

Release activity

Release activity — 18 releases across 13 days since Apr 13, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Apr 13, 2026. Older weeks are hidden at this screen width.
JunJulAugSep
SundayNo releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026No releases on Aug 23, 2026No releases on Aug 30, 2026No releases on Sep 6, 2026No releases on Sep 13, 2026
MondayNo releases on Jun 1, 20262 releases on Jun 8, 20261 release on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 20261 release on Aug 10, 2026No releases on Aug 17, 2026No releases on Aug 24, 2026No releases on Aug 31, 2026No releases on Sep 7, 20262 releases on Sep 14, 2026
TuesdayNo releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026No releases on Aug 18, 20262 releases on Aug 25, 2026No releases on Sep 1, 2026No releases on Sep 8, 2026No releases on Sep 15, 2026
WednesdayNo releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 20261 release on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026No releases on Aug 19, 2026No releases on Aug 26, 2026No releases on Sep 2, 2026No releases on Sep 9, 2026
ThursdayNo releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026No releases on Aug 20, 20261 release on Aug 27, 2026No releases on Sep 3, 2026No releases on Sep 10, 2026
FridayNo releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 20262 releases on Aug 14, 2026No releases on Aug 21, 2026No releases on Aug 28, 2026No releases on Sep 4, 2026No releases on Sep 11, 2026
SaturdayNo releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026No releases on Aug 22, 2026No releases on Aug 29, 2026No releases on Sep 5, 2026No releases on Sep 12, 2026

18 releases since Apr 13, 2026, busiest day 2

Changelog

What changed from 11 to 12
Filter releases by branch
18 of 18 releases

v11.2.4

Latest
Fixed 2
  • Handle unserializable patterns in microservices without crashing
  • Absolute-form request target middleware bypass in platform-fastify

From NestJS

What's changed
  • fix(microservices): handle unserializable patterns without crashing
  • fix(platform-fastify): absolute-form request target middleware bypass
View originalPermalink
How v11.2.4 went

v12.0.2

Added 1
  • Add maxConnectionAttempts option to ServerMqtt
Changed 1
  • Update Fastify dependency to v5.12.4
Fixed 14
  • Keep the message stream alive when a handler throws in Socket.IO
  • Detach signal listeners of connected microservices
  • Fail requests whose reply subscription is rejected in microservices
  • Do not treat foreign JSON as an RPC envelope in microservices
  • Do not flatten plain handler results with pre-request hooks in microservices
  • Run the MQTT listen callback once in microservices

From NestJS

v12.0.2 (2026-09-14)
Bug fixes
  • platform-socket.io, platform-ws
    • #17666 fix(socket.io): keep the message stream alive when a handler throws (@hktitof)
  • microservices
  • common
  • core
    • #17667 fix(core): discover factory providers with discovery decorators (@hktitof)
    • #17709 fix(core): avoid treating error instances with statusCode as http errors (@Asadshah7950)
    • #17625 fix(core): clean up repeated shutdown signal listeners (@Raj4478)
  • platform-fastify
    • #17705 fix(fastify): derive neutral version when accept header is absent (@Gaurav1112)
    • #17699 fix(fastify): send responses for exceptions thrown from middleware (@micalevisk)
Enhancements
Dependencies
Committers: 16
View originalPermalink
How v12.0.2 went

v12.0.0

Added 8
  • ESM packages for all core Nest packages with CommonJS compatibility through require(esm) in Node.js v20.19+ or v22.12+
  • Standard Schema validation support via schema option in @Body(), @Query(), @Param(), and @RawBody() decorators
  • StandardSchemaValidationPipe for validating requests against Standard Schema compatible libraries
  • StandardSchemaSerializerInterceptor for validating and transforming outgoing responses with Standard Schema
  • @nestjs/observe SDK for native observability with automatic instrumentation of HTTP, GraphQL, gRPC, microservice transports, queue consumers, and cron runs
  • Route conflict diagnostics with routeConflictPolicy and routeResolutionStrategy options to detect duplicate and shadow routes
  • Machine-readable error codes via errorCode option in HttpExceptionOptions
  • Structured logging params in ConsoleLogger treating plain objects after messages as structured fields
Changed 4
  • @nestjs/config validation now accepts Standard Schema compatible schemas via validationSchema option
  • nest new command now offers choice to scaffold CommonJS or ESM projects
  • nest upgrade command applies mechanical migrations including webpack options, GraphQL playground to graphiql rename, NATS package replacement, and Jest and Joi bumps
  • Node.js minimum requirement is v20.19+ or v22.12+
Removed 1
  • Implicit CommonJS-only packages support removed in favor of ESM-ready packages

From NestJS

NestJS v12.0.0

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


Upgrading

Upgrade the CLI first, since the upgrade command ships with it:

npm i -g @nestjs/cli@latest

Then, from the root of your project:

nest upgrade

nest 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 playgroundgraphiql 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.


Highlights
ESM packages

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.

Standard Schema validation

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.

Standard Schema serialization

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.

Native observability — @nestjs/observe

The 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.

Config module on Standard Schema

@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.

Route conflict diagnostics

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.

Machine-readable error codes

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' });
Structured logging params

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.


CLI (@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

  • Rspack is the new default bundler for monorepos. The --webpack / --webpackPath flags (and their webpack / webpackConfigPath counterparts in nest-cli.json) are deprecated in favor of --builder rspack.
  • oxlint replaces ESLint in generated projects.
  • Vitest is the default test runner for ESM projects; CommonJS projects continue with Jest.
  • bun is now a supported package manager, alongside npm, yarn, and pnpm.
  • The 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, --silent
  • nest build: --parallel [concurrency], for building monorepo projects in parallel with --all
  • nest-cli.json: includeLibraryAssets, for copying library assets into an application build

Breaking changes
ChangeWhat to do
Packages ship as ESMUsually nothing — require(esm) keeps CommonJS apps working. Review custom bootstrapping, bundler, and test-runner config.
Node.js v20.19+ / v22.12+ requiredUpgrade Node; the 21.x line is not supported.
Lifecycle hooks are now invoked by component hierarchy levelReview ordering assumptions between related providers/modules in init, teardown, and tests.
NATS v3 — the nats package is replaced by @nats-io/transport-nodenpm 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 subscriptionssubscriptions-transport-ws support removedSwitch to graphql-ws; the protocols are wire-incompatible, so clients must be updated. Review onConnect callbacks.
GraphiQL is the default GraphQL IDEReplace playground with graphiql; pass an options object to customize.
@nestjs/config validates through Standard SchemaKeep Joi by upgrading to v18+ and moving library settings under validationOptions.libraryOptions.
Pipe transform signatures refined; ArgumentMetadata is now genericAdjust hand-written custom pipe signatures if the compiler complains.
ConsoleLogger structured params on by defaultSet structuredParams: false to restore the previous output.
Webpack CLI workflows deprecatedMigrate to --builder rspack.
angular schematic removed

Most of these are handled automatically by nest upgrade.


Also in this release
  • ValidationPipe error format — a new option controls the shape of validation error responses.
  • gRPC exception filterGrpcExceptionFilter and status-specific exceptions map errors to proper gRPC status codes instead of UNKNOWN.
  • Regex Kafka patterns@MessagePattern() and @EventPattern() accept a RegExp on the Kafka transport.
  • Request-scoped WebSocket gateways — gateways support request-scoped providers, with the socket injectable via the REQUEST token.
  • WebSocket disconnect reasonhandleDisconnect can receive the reason for the disconnection.
  • Microservices pre-request hook — a new hook runs before a message handler is invoked.
  • Express graceful shutdown — the Express adapter drains in-flight requests on shutdown.
  • HTTP adapter error mapping — reworked across core, Express, and Fastify adapters.

Thanks

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.

View originalPermalink
How v12.0.0 went

v11.2.2

Fixed 2
  • ObserveInstrument breaking app startup with @nestjs/core@11.2.x
  • Bootstrap crashing with nestjs-cls proxy providers (ProxyProviderNotResolvedException on CLS_REQ)

From NestJS

What's changed
  • fix(core): ObserveInstrument breaks app startup with @nestjs/core@11.2.x #17554 by @kamilmysliwiec
  • fix(core): Bootstrap crashes with nestjs-cls proxy providers (ProxyProviderNotResolvedException on CLS_REQ) #17553 by @kamilmysliwiec
View originalPermalink
How v11.2.2 went

v11.2.0

Added 2
  • Add query HTTP method support
  • Add SSE signal support
Fixed 7
  • Share existing singleton providers with lazily loaded modules
  • Match string file types containing regex metacharacters
  • Convert adjacent wildcard segments in legacy route converter
  • Run middleware on routes excluded from global prefix in Fastify
  • Avoid double prefixing inherited middleware in Fastify
  • Scan pre-registered dynamic imports of lazy modules
  • Exclude reverse-mapped keys from numeric enum validation in ParseEnumPipe

From NestJS

What's Changed
New Contributors

Full Changelog: https://github.com/nestjs/nest/compare/v11.1.29...v11.2.0

View originalPermalink
How v11.2.0 went

v11.1.29

Added 2
  • Add override mimetype option to file type validator
  • Support SSE comments in core
Changed 1
  • Update multerExceptions constant
Fixed 8
  • Stop import lookup after first direct export match in core
  • Correct pub/sub client type in redis listeners for microservices
  • Drop the g flag from middleware overlap regexes in core
  • Resolve barrier immediately when target count is zero in core
  • Exclude pipe options from validator options in common
  • Serialize SSE retry field when value is zero in core
  • Nullify grpcclient on close when tryshutdown fails in microservices
  • Map missing multer field nesting error in express

From NestJS

What's Changed
New Contributors

Full Changelog: https://github.com/nestjs/nest/compare/v11.1.28...v11.1.29

View originalPermalink
How v11.1.29 went

v11.1.28

Changed 2
  • Include auto-converted route in legacy route path warning
  • Bump fastify from 5.8.5 to 5.10.0
Fixed 3
  • Trigger teardown of SSE producer Observable on client disconnect with interceptor
  • Add missing exception classes to HttpErrorByCode
  • Correct type guard to check value not key in websockets
Security 1
  • Update dependency multer to v2.2.0

From NestJS

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)
  • common
    • #17257 fix(common): Add missing exception classes to HttpErrorByCode (@Se3do)
  • websockets
    • #17188 fix(websockets): correct type guard to check value not key (@Se3do)
Enhancements
  • core
    • #17241 feat(core): include auto-converted route in legacy route path warning (@ronielli)
Dependencies
Committers: 4
View originalPermalink
How v11.1.28 went

v11.1.27

Fixed 2
  • Fix SSE async handlers teardown issue
  • Fix forRoutes middleware ending slash in platform-fastify

From NestJS

What's Changed

Full Changelog: https://github.com/nestjs/nest/compare/v11.1.26...v11.1.27

View originalPermalink
How v11.1.27 went

v11.1.25

Fixed 3
  • Reject pending Redis requests on close in microservices
  • Register SSE close listener before async setup in core
  • Remove pathname ending slash in platform-fastify

From NestJS

What's Changed
New Contributors

Full Changelog: https://github.com/nestjs/nest/compare/v11.1.24...v11.1.25

View originalPermalink
How v11.1.25 went

v11.1.24

Added 1
  • Warn on late websocket adapter registration
Fixed 1
  • Reset dependency-tree cache on metadata changes

From NestJS

v11.1.24 (2026-05-25)
Bug fixes
Enhancements
  • core
    • #16997 feat(core): warn on late websocket adapter registration (@hbinhng)
Dependencies
Committers: 2
View originalPermalink
How v11.1.24 went

v11.1.23

Fixed 1
  • Fix snapshot: true to not eagerly instantiate Terminus transient indicators since 11.1.20

From NestJS

v11.1.23 (2026-05-21)
Bug fixes
Committers: 1
View originalPermalink
How v11.1.23 went

v11.1.22

Changed 1
  • Improve error message to identify decorator type in invalid-class-module error
Fixed 1
  • Fix inflight request injection bug in core

From NestJS

v11.1.22 (2026-05-21)
Bug fixes
Enhancements
Committers: 2
View originalPermalink
How v11.1.22 went

v11.1.21

Fixed 1
  • settle skipped provider initialization in core

From NestJS

v11.1.21 (2026-05-14)
Bug fixes
  • core
Committers: 1
View originalPermalink
How v11.1.21 went

v11.1.20

Added 3
  • Add return buffers option for binary data in microservices
  • Handle RMQ blocked/unblocked connection events
  • Add defParamCharset to MulterOptions in platform-express
Changed 1
  • Improve filetype validator buffer message
Fixed 7
  • Fix deeply nested transient providers resolution
  • Fix @Sse losing events on complete
  • Defer SSE writehead until after lifecycle completes
  • Use strict null check for SSE message id
  • Fix ServerRMQ crashing at boot when @MessagePattern(undefined) is combined with wildcards: true
  • Accept zero timestamp in parse date pipe
  • Deduplicate disconnect listener in bindMessageHandlers for socket.io

From NestJS

v11.1.20 (2026-05-13)
Bug fixes
  • core, testing
  • core
  • microservices
    • #16850 fix(microservices): ServerRMQ crashes at boot when @MessagePattern(undefined) is combined with wildcards: true (@lavieennoir)
  • common
    • #16845 fix(common): accept zero timestamp in parse date pipe (@Mysh3ll)
  • platform-socket.io
    • #16742 fix(socket.io): Deduplicate disconnect listener in bindMessageHandlers (@fru1tworld)
Enhancements
  • microservices
    • #16676 feat(microservices): add return buffers option for binary data (@Forceres)
    • #16826 feat(microservices): handle rmq blocked/unblocked connection events (@thisalihassan)
  • common
  • platform-express
Dependencies
Committers: 13
View originalPermalink
How v11.1.20 went

v11.1.19

Fixed 2
  • Use backing field for consumer CRASH event listener in microservices
  • Prevent stack overflow in jsonsocket.handledata() in microservices

From NestJS

v11.1.19 (2026-04-13)
Bug fixes
  • microservices
Committers: 2
View originalPermalink
How v11.1.19 went
View all

Discussion

If you publish NestJS, you can claim this product by proving you administer its repository.