@nestjs/platform-ws
12.2.0 · 19 Oct 2026MIT336.8k / weekRepositoryHomepagenpmAtom feed
Latest releases
All 313 releases- 12.x · latest line
12.2.0
19 Oct 2026@Sse({ maxPendingDataLength })sets how many characters of event data may wait for a client that is not reading its events (4M by default;0orInfinitylifts the limit) – 2f05ad954eIoAdapterandWsAdaptertakemaxConcurrentMessages, the number of a client's messages handled at once (1000 by default;Infinitylifts it) – 0bd0810ed7ValidationPipetakesmaxErrorMessagesLength(1,000,000 characters by default); messages past it are replaced by a "Further validation errors were omitted" entry – 086c1c514f
Notable changes
New options
@Sse({ maxPendingDataLength })sets how many characters of event data may wait for a client that is not reading its events (4M by default;0orInfinitylifts the limit) – 2f05ad954eIoAdapterandWsAdaptertakemaxConcurrentMessages, the number of a client's messages handled at once (1000 by default;Infinitylifts it) – 0bd0810ed7ValidationPipetakesmaxErrorMessagesLength(1,000,000 characters by default); messages past it are replaced by a "Further validation errors were omitted" entry – 086c1c514fKafka:
parser.maxMessageSize(16 MiB after decompression by default); larger messages are logged and skipped – 9bdf844fcaTCP server:
drainTimeout(30 s by default,0disables) disconnects a peer that leaves its responses unread – 583d6077adMQTT server:
reconnectOnConnackErroris now enabled by default, so a refused connection attempt is retried; set it tofalsefor the previous behaviour – a63cea600aHttpServer.getRouteMatchingOptions(), an optional adapter hook that tells core how the router matches paths (see "Middleware exclusions" below) – 08d8677c8d
New defaults and behaviour changes
@nestjs/platform-express,@nestjs/platform-fastify:fieldNestingDepthandfieldArrayIndexLimit(#18074) now default to 32 and 1000; set them toInfinityto lift the limits – 94fcc93770ValidationPipevalidates withvalidationError.target: falseunless the options set it, so anexceptionFactorythat readserror.targetgetsundefined; setvalidationError.targettotruefor the old errors – 8c5a59bf63ValidationPipeanswers an array or a primitive sent for a validated class with a 400 – 197371c1f3FileTypeValidatormatches a stringfileTypeup to the end of a name (e.g.font/woffno longer acceptsfont/woff2; use a RegExp for that) – 770c6f1a19@SerializeOptions({})on a handler no longer turns off the class schema – d27cb7017fBaseExceptionFilteranswershttp-errorserrors created withexpose: false(the default from 500) with the standard reason phrase instead of their message – 9ed572f853A
StreamableFileerror still gets a 400, but the body no longer carries the error message – 2f28d91afbFiles uploaded with a request that a pipe rejected are removed from storage – acb98de89e
@nestjs/platform-fastify: a route withfileSize: undefined(ornull) falls back to the plugin's limit; set it toInfinityto keep uploads unlimited – dd549e1a74@nestjs/platform-express: object error bodies are sent asapplication/jsonon routes with a non-JSONContent-Type– 7dc6e349d5ConsoleLoggerin JSON mode cuts a record short past about a million characters – ad4915eaa3A global enhancer that the injector failed to instantiate now fails the application at startup – ae78524ced
A request- or transient-scoped
APP_FILTERnow logs a startup warning, as it only applies to exceptions thrown from controllers – df5275c5e1Microservices: a pattern key longer than 256 characters matches no handler – accd27e66c
Kafka: a message may carry up to 10,000 header values (e419ff540b); headers given as a string or array are not sent (312777743f); reply headers are decoded as text
gRPC: request streams are paused while their replies wait to be written – 37e5cf7706
Deprecation: on TCP, Redis, NATS, MQTT and RabbitMQ, an
@EventPattern()handler that replies toClientProxy#send()now logs a deprecation warning. The reply is unchanged; in the next major version event handlers will not reply tosend(), as on Kafka already – ba3668d36b
Middleware exclusions
MiddlewareConsumer.exclude()now compiles excluded routes with the router's case and trailing-slash matching (08d8677c8d). Update@nestjs/coretogether with@nestjs/platform-express/@nestjs/platform-fastify: with an adapter that does not implementgetRouteMatchingOptions(), excluded routes are matched exactly (f5aa875e40), so on a lenient router other spellings of an excluded path run the middleware.With header, media type or custom versioning,
exclude({ path, method, version })andenableCsrfProtection({ exclude })apply only to requests that ask for one of the excluded versions – 1a7a31fa46@nestjs/platform-fastify: the request hook used byenableCsrfProtection()anduseSecurityHeaders()now runs before Nest andapp.use()middleware withNestFactory.create()too, including middleware registered before either call, as it already did withTest.createNestApplication()– 8351806290
Bug fixes
platform-fastifyfix(fastify): send the status of an exception whose body is an error (@kamilmysliwiec)
fix(fastify): apply middleware to plugins registered before init (@kamilmysliwiec)
fix(fastify): keep raw-response cookies in the header helpers (@johnnyhuirilef)
fix(fastify): match middleware paths like a case-insensitive router (@kamilmysliwiec)
fix(fastify): pass version extractor errors to the error handler (@kamilmysliwiec)
fix(fastify): pass middleware rejections to the error handler (@kamilmysliwiec)
fix(fastify): stop reading a streamable file for a head request (@kamilmysliwiec)
fix(fastify): let undefined upload limits fall back to the defaults (@kamilmysliwiec)
fix(fastify): free memory storage chunks once a file is buffered (@kamilmysliwiec)
fix(fastify): remove uploads cut off after their last chunk (@kamilmysliwiec)
fix(fastify): set the security headers on router error responses (@kamilmysliwiec)
fix(fastify): answer request targets that are not a path with 404 (@kamilmysliwiec)
fix(fastify): apply route options to all-method routes (@Ahmad-Mosha)
microservicesfix(microservices): handle malformed kafka reply assigner member metadata (@SssiiiSssii1)
fix(microservices): leave the init hooks to the hybrid application (@kamilmysliwiec)
fix(microservices): call the init hooks once when init() is called (@kamilmysliwiec)
fix(microservices): preserve request order during deferred replay (@Benziza)
fix(microservices): limit the number of kafka header values (@kamilmysliwiec)
fix(microservices): send no kafka headers given as a string or array (@kamilmysliwiec)
fix(microservices): decode kafka reply headers as text (@kamilmysliwiec)
fix(microservices): limit the size of kafka messages the parser decodes (@kamilmysliwiec)
fix(microservices): pause grpc request streams while replies wait (@kamilmysliwiec)
fix(microservices): end grpc unary subscriptions with the call (@kamilmysliwiec)
fix(microservices): fail grpc calls whose handler promise rejects (@kamilmysliwiec)
fix(microservices): fail grpc response streams that emit null (@kamilmysliwiec)
fix(microservices): send grpc errors that grpc-js can encode (@kamilmysliwiec)
fix(microservices): error grpc duplex calls on upstream error (@kamilmysliwiec)
fix(microservices): route mqtt messages by the topic they arrived on (@kamilmysliwiec)
fix(microservices): validate request ids before echoing them (@kamilmysliwiec)
fix(microservices): drain streamed replies in linear time (@kamilmysliwiec)
fix(microservices): limit the length of pattern keys (@kamilmysliwiec)
fix(microservices): drop rmq replies that amqp cannot address (@kamilmysliwiec)
fix(microservices): only emit rmq replies that a request waits for (@kamilmysliwiec)
fix(microservices): reject mqtt topics longer than 65535 bytes (@kamilmysliwiec)
fix(microservices): count mqtt requests that wait for the subscription (@kamilmysliwiec)
fix(microservices): drop idle reply channels from subscription counts (@kamilmysliwiec)
fix(microservices): use unguessable request ids and nats reply inboxes (@kamilmysliwiec)
fix(microservices): emit plain rpc filter results once on stream errors (@kamilmysliwiec)
fix(microservices): honor falsy results of rpc exception filters (@kamilmysliwiec)
fix(microservices): keep reconnecting the mqtt server after a refusal (@kamilmysliwiec)
fix(microservices): flatten async rpc filter results on stream errors (@kamilmysliwiec)
fix(microservices): stop tcp observable responses when the peer leaves (@kamilmysliwiec)
fix(microservices): reply to a request only from its message handler (@kamilmysliwiec)
fix(microservices): drop tcp peers that stop reading their responses (@kamilmysliwiec)
fix(microservices): use the right filters for inherited scoped handlers (@kamilmysliwiec)
fix(microservices): keep sibling event handlers running on error (@kamilmysliwiec)
fix(microservices): drop the mqtt client when a reconnect is refused (@kamilmysliwiec)
fix(microservices): reject tcp data too long to be a content length (@kamilmysliwiec)
fix(microservices): consume again after the rmq consumer is cancelled (@kamilmysliwiec)
fix(microservices): close tls connections still in their handshake (@kamilmysliwiec)
fix(microservices): close rmq server connection when channel close fails (@kamilmysliwiec)
fix(microservices): run other event handlers when a scoped one fails (@OmBhandwaldar)
fix(microservices): keep reading tcp replies during client backpressure (@maxymlyskov)
fix(microservices): close the rmq channel before the connection (@maxymlyskov)
fix(microservices): ignore a redis server's own replies under wildcards (@maxymlyskov)
fix(microservices): match empty mqtt topic levels (@ys0v9)
corefix(core): run interceptor, pipe and filter classes without a name (@kamilmysliwiec)
fix(core): detect cycles in request-scoped forward references (@DevAhmadAlkhuja)
fix(core): give a module that extends another module its own id (@maxymlyskov)
fix(core): answer http requests an rpc exception filter leaves (@kamilmysliwiec)
fix(core): settle async param decorator values before pipes run (@kamilmysliwiec)
fix(core): subscribe to guard observables from other copies of rxjs (@kamilmysliwiec)
fix(core): run guards bound as classes without a name (@kamilmysliwiec)
fix(core): find the module of a host registered under another token (@kamilmysliwiec)
fix(core): run middleware on a controller root excluded by a wildcard (@kamilmysliwiec)
fix(core): stop wildcard exclusions from covering their parent route (@kamilmysliwiec)
fix(core): mount middleware paths on routes excluded from the prefix (@kamilmysliwiec)
fix(core): drop an overlapped middleware route only when it is covered (@kamilmysliwiec)
fix(core): mount unversioned middleware paths under the default version (@kamilmysliwiec)
fix(core): map controller middleware under every module declaring it (@kamilmysliwiec)
fix(core): mount transient-scoped middleware instead of skipping it (@kamilmysliwiec)
fix(core): never exclude request targets with "#" or in absolute form (@kamilmysliwiec)
fix(core): hide internal error messages from sse error events (@kamilmysliwiec)
fix(core): drop sse clients that stop reading their events (@kamilmysliwiec)
fix(core): hand sse header errors to the exception filters (@kamilmysliwiec)
fix(core): leave early sse errors to the exception filters (@kamilmysliwiec)
fix(core): trim only spaces and tabs around cookie names and values (@kamilmysliwiec)
fix(core): wait for the redirect reply before settling the route (@kamilmysliwiec)
fix(core): stop reusing durable instances holding a failed placeholder (@kamilmysliwiec)
fix(core): run transient global enhancers on static entry providers (@kamilmysliwiec)
fix(core): fail at startup when a global enhancer is not instantiated (@kamilmysliwiec)
fix(core): await deferred loads of forward-referenced providers (@kamilmysliwiec)
fix(core): inject every property of overlapping first resolutions (@kamilmysliwiec)
fix(core): keep the root inquirer of transient providers per resolution (@kamilmysliwiec)
fix(core): apply the enhancers of class providers under any token (@kamilmysliwiec)
fix(core): recompute scope flags cached inside a circular dependency (@kamilmysliwiec)
fix(core): run enhancers that are request-scoped through dependencies (@kamilmysliwiec)
fix(core): destroy a
StreamableFilethat is not sent (@kamilmysliwiec)fix(core): destroy a
StreamableFiledropped by a timed-out handler (@kamilmysliwiec)fix(core): warn that scoped global filters miss non-controller errors (@kamilmysliwiec)
fix(core): do not send the message of an unexposed http error (@kamilmysliwiec)
fix(core): answer host mismatches on fastify with 404 (@kamilmysliwiec)
fix(core): use the right filters for inherited request-scoped middleware (@kamilmysliwiec)
fix(core): keep exact routes ahead of optional groups by specificity (@kamilmysliwiec)
fix(core): end sse responses to head requests once headers are sent (@kamilmysliwiec)
fix(core): use the right filters for inherited request-scoped routes (@kamilmysliwiec)
fix(core): honor falsy results of filters in external contexts (@kamilmysliwiec)
fix(core): treat fastify validation errors as http errors (@OmBhandwaldar)
fix(core): reject create() when a dependency is request-scoped (@maxymlyskov)
fix(core): release the throwaway wrapper of each create() call (@maxymlyskov)
fix(core): keep route options when the route triggered hook is set (@OmBhandwaldar)
commonfix(common): match a file type string up to the end of a name (@kamilmysliwiec)
fix(common): stop exposing the validated object on validation errors (@kamilmysliwiec)
fix(common): limit the length of validation error messages by default (@kamilmysliwiec)
fix(common): stop copying nested validation errors for each level (@kamilmysliwiec)
fix(common): reject arrays and primitives for validated classes (@kamilmysliwiec)
fix(common): validate parsed array items one at a time (@kamilmysliwiec)
fix(common): keep
StreamableFileerror messages out of responses (@kamilmysliwiec)fix(common): handle
StreamableFileerrors raised before the reply (@kamilmysliwiec)fix(common): keep the class schema when a handler sets serialize options (@kamilmysliwiec)
fix(common): keep the loaded transformer while serializers are created (@kamilmysliwiec)
fix(common): strip a falsy constructor key from request data (@kamilmysliwiec)
fix(common): cut json log records short past a million characters (@kamilmysliwiec)
fix(common): traverse a shared object once in the logger redactor (@kamilmysliwiec)
fix(common): keep custom decorator options followed by a pipe (@kamilmysliwiec)
fix(common): copy array and object defaults in
DefaultValuePipe(@kamilmysliwiec)fix(common): skip array holes when stripping prototype keys (@kamilmysliwiec)
fix(common): avoid mutating input arrays during validation (@dcavalcante)
fix(common): call
stringifyReplacerwith the logger asthis(@Chaoqi31)fix(common): detect stacks whose error message spans several lines (@Chaoqi31)
fix(common): parse
error()calls with a lone or an undefined stack (@Chaoqi31)
platform-express,platform-fastifyfix(express,fastify): parse quoted media type version parameters (@li-jia-nan)
fix(express,fastify): handle a
StreamableFilethat cannot be streamed (@kamilmysliwiec)fix(express,fastify): let a route's dest replace the module's storage (@kamilmysliwiec)
fix(express,fastify): limit field nesting and array indexes by default (@kamilmysliwiec)
testingfix(testing): share one auto-mock between providers of the same token (@jayhemnani9910)
fix(testing): resolve auto-mocked dependencies of transient providers (@jayhemnani9910)
core,microservicesfix(core,microservices): let only the hybrid application bind gateways (@kamilmysliwiec)
websocketsfix(websockets): await deferred loads of a gateway's scoped enhancers (@kamilmysliwiec)
fix(websockets): create the filters of a gateway that failed to resolve (@kamilmysliwiec)
fix(websockets): resolve hook error filters in the connection's context (@kamilmysliwiec)
fix(websockets): use the right filters for inherited gateway handlers (@kamilmysliwiec)
fix(websockets): log and reply when the error cause cannot be sent (@kamilmysliwiec)
core,websocketsfix(core,websockets): run transient enhancers bound to static gateways (@kamilmysliwiec)
fix(core): key the handler metadata cache by class, not class name (@maxymlyskov)
common,corefix(core,common): exclude a version only for requests that ask for it (@kamilmysliwiec)
fix(core): make the sse pending data limit configurable (@kamilmysliwiec)
fix(core): match excluded routes exactly when the router is unknown (@kamilmysliwiec)
core,platform-expressfix(core): mount wildcard middleware on every path when "/" is excluded (@kamilmysliwiec)
platform-expressfix(express): run wildcard middleware on "/api/" for a named wildcard (@kamilmysliwiec)
fix(express): stop reading a streamable file for a head request (@kamilmysliwiec)
fix(express): send object error bodies with a json content type (@kamilmysliwiec)
platform-ws,websocketsfix(ws): stop reading from a client that does not read its replies (@kamilmysliwiec)
fix(ws): drop messages from a client the server is closing (@kamilmysliwiec)
platform-socket.io,platform-ws,websocketsfix(websockets): bound how many messages of a client are handled at once (@kamilmysliwiec)
core,microservices,websocketsfix(core,microservices,websockets): ignore inherited keys of non-objects (@kamilmysliwiec)
fix(core): read class-level enhancers from the registered class (@kamilmysliwiec)
platform-wsfix(ws): listen on the host of a gateway with its own port and a path (@kamilmysliwiec)
fix(ws): answer non-upgrade requests on a gateway's own port with 426 (@kamilmysliwiec)
fix(ws): close the socket of an upgrade request it cannot parse (@kamilmysliwiec)
core,platform-express,platform-fastifyfix(core,express,fastify): remove uploads of requests a pipe rejected (@kamilmysliwiec)
core,testingfix(core): fail at bootstrap on missing deps of scoped providers (@kamilmysliwiec)
fix(testing): mock dependencies of request-scoped providers (@johnnyhuirilef)
common,platform-fastifyfix(fastify): run the security request hook ahead of middie (@kamilmysliwiec)
common,core,platform-express,platform-fastifyfix(core,express,fastify): match excluded routes like the router does (@kamilmysliwiec)
common,core,microservices,platform-express,platform-fastify,platform-socket.io,platform-ws,testing,websocketsfix: expose package.json in the exports map of all packages (@minijus)
Enhancements
microservicesfeat(microservices): deprecate event handlers replying to send() (@kamilmysliwiec)
coreperf(core): resolve route params without a promise when no pipe runs (@thekhegay)
perf(core): avoid AsyncResource.bind() per request in the interceptor chain (@thekhegay)
Committers: 15
Ahmed Gamal (@Ahmad-Mosha)
Chaoqi (@Chaoqi31)
Daniel Cavalcante (@dcavalcante)
Jay Hemnani (@jayhemnani9910)
Johnny J. Huirilef Millán (@johnnyhuirilef)
Kamil Mysliwiec (@kamilmysliwiec)
Maksym Lyskov (@maxymlyskov)
Minijus L (@minijus)
Mohamed A. Abdel Fattah (@SssiiiSssii1)
Om Bhandwaldar (@OmBhandwaldar)
Roman Khegay (@thekhegay)
Sua Choi (@ys0v9)
lijianan (@li-jia-nan)
12.1.3
12 Oct 2026core,microservicesplatform-expresscore
Bug fixes
core,microservicesfix(core,microservices): flush buffered logs when initialization fails (@thekhegay)
fix(core,microservices): run transient global enhancers on controllers (@johnnyhuirilef)
platform-expressfix(express): guard async request hook completion (@GiHoon1123)
fix(express): destroy the
StreamableFilesource on client disconnect (@maxymlyskov)fix(express): run wildcard middleware on the bare global prefix path (@Chaoqi31)
corefix(core): fail at startup for request-scoped class global enhancers (@thekhegay)
fix(core): stop silently dropping request-scoped global enhancers (@OmBhandwaldar)
fix(core): resolve uri versioned exclusions for the not-found handler (@basteez)
fix(core): normalize slashes when mapping controllers for middleware (@basteez)
fix(core): do not mutate the message when assigning an sse event id (@Metehan-Bicer)
fix(core): end sse streams whose event data cannot be serialized (@OmBhandwaldar)
fix(core): send status and headers set by handlers on sse responses (@johnnyhuirilef)
fix(core): honor a shutdown signal received while close() is in flight (@maxymlyskov)
fix(core): settle SSE lifecycle on early disconnect (@jackie-cqz)
fix(core): commit SSE headers for empty streams (@jackie-cqz)
fix(core): preserve explicit null values in reflectable decorators (@gophersg)
fix(core): run the shutdown sequence after a failed init (@kamilmysliwiec)
fix(core): send the expires header on sse responses (@Mohamed-Elshesheny)
fix(core): honor global prefix exclusions for overlapping versions (@Chaoqi31)
fix(core): let a
GETmiddleware exclusion coverHEADrequests (@Chaoqi31)fix(core): reset the listening state when the application closes (@Chaoqi31)
fix(core): hash
Map,SetandRegExpoptions in deep-hash tokens (@Chaoqi31)fix(core): treat
VERSION_NEUTRALin middleware routes as no version (@Chaoqi31)fix(core): turn off express
x-powered-byinuseSecurityHeaders()(@Chaoqi31)fix(core): name dynamic host modules in import error messages (@Chaoqi31)
fix(core): isolate nested transient providers injected into properties (@Chaoqi31)
microservicesfix(microservices): keep nats status updates alive when a listener throws (@kamilmysliwiec)
fix(microservices): default server options like the client factory does (@thekhegay)
fix(microservices): match rmq '#' wildcards in any position (@thekhegay)
fix(microservices): fail mqtt requests whose publish fails (@izg0820)
fix(microservices): preserve null payloads in kafka tombstone records (@Hangell)
fix(microservices): close the connection when the channel close fails (@hktitof)
fix(microservices): return the rmq reply publish so failures are handled (@maxymlyskov)
fix(microservices): fail redis listen on rejected subscriptions (@kamilmysliwiec)
fix(microservices): clone the kafka record before serializing (@Mihir-Rabari)
fix(microservices): do not crash when the redis connection drops (@maxymlyskov)
fix(microservices): fail pending kafka request on deserializer error (@hktitof)
fix(microservices): wait for the TCP TLS handshake (@jackie-cqz)
fix(microservices): survive custom deserializer errors in clients (@johnnyhuirilef)
fix(microservices): close both kafka client connections when one fails (@izg0820)
fix(microservices): unwrap records returned by message handlers (@johnnyhuirilef)
fix(microservices): wait for both Redis clients to be ready (@jackie-cqz)
fix(microservices): ignore stale NATS status events (@jackie-cqz)
fix(microservices): preserve MQTT payload options (@jackie-cqz)
fix(microservices): suspend incomplete packet timers during backpressure (@jackie-cqz)
fix(microservices): cancel pending TCP retries on close (@jackie-cqz)
fix(microservices): keep grpc response errors out of the request stream (@drakeo338)
fix(microservices): fail rmq connect and listen on channel setup errors (@johnnyhuirilef)
fix(microservices): run every event handler when a sibling completes empty (@johnnyhuirilef)
fix(microservices): fail nats requests on undecodable replies (@johnnyhuirilef)
fix(microservices): stop rmq client opening two channels on connect (@johnnyhuirilef)
fix(microservices): answer client-streaming calls that return nothing (@Chaoqi31)
fix(microservices): resolve grpc stream calls that complete empty (@hktitof)
platform-fastifyfix(fastify): answer the shutdown hooks 503 with fastify's json body (@kamilmysliwiec)
fix(fastify): honor
return503OnClosingduring the shutdown hooks (@thekhegay)fix(fastify): reject listen() on an invalid port (@kamilmysliwiec)
fix(fastify): listen on a socket path (@johnnyhuirilef)
fix(fastify): settle async lifecycle hooks once (@jackie-cqz)
fix(fastify): preserve custom router constraints (@jackie-cqz)
fix(fastify): keep the default body parsers after
useBodyParser()(@Chaoqi31)fix(fastify): count headers flushed on
reply.rawinisHeadersSent(@Chaoqi31)
commonfix(common): keep custom decorator data that has schema or pipes keys (@Ahmad-Mosha)
fix(common): reject arrays nested in ParseArrayPipe items (@KAPUIST)
fix(common): collect configurable module alias dependencies (@jackie-cqz)
fix(common): isolate file type regexp state (@jackie-cqz)
fix(common): preserve parent validation constraints (@jackie-cqz)
fix(common): let a redeclared
@Inject()property replace the parent's (@Chaoqi31)fix(common): keep inherited
@Optional()properties optional (@Chaoqi31)
microservices,websocketsfix(websockets, microservices): fallback to 'Error' for minified exception class names (@korrayt)
websocketsfix(websockets): copy the options object in the base ws exception filter (@Mihir-Rabari)
fix(websockets): log scoped gateway resolution errors without a hook (@basteez)
fix(websockets): pass gateway lifecycle hook errors to exception filters (@kamilmysliwiec)
fix(websockets): pass the pattern when a scoped handler fails to resolve (@kamilmysliwiec)
fix(websockets): use the hook name as pattern for request-scoped hooks (@OmBhandwaldar)
fix(websockets): retain shared contexts during disconnect hooks (@jackie-cqz)
common,core,platform-expressfix(common,core,express): answer method miss on an excluded route (@thekhegay)
platform-wsfix(ws): default omitted adapter creation options (@jackie-cqz)
core,websocketsfix(websockets): resolve global scoped enhancers per connection (@jackie-cqz)
core,testingfix(core): take the scope of the class in
useClass()overrides (@Chaoqi31)
Enhancements
platform-express,platform-fastifyfeat(express,fastify): add field nesting and array index upload limits (@KAPUIST)
Committers: 23
Abdellatif Anaflous (@hktitof)
Ahmed Gamal (@Ahmad-Mosha)
Aurora (@auroraxo)
Chaoqi (@Chaoqi31)
Dustin (@GiHoon1123)
Hangell (@Hangell)
Johnny J. Huirilef Millán (@johnnyhuirilef)
Kamil Mysliwiec (@kamilmysliwiec)
Lee Jae Hyun (@izg0820)
Luke Son (@KAPUIST)
Maksym Lyskov (@maxymlyskov)
Metehan Biçer (@Metehan-Bicer)
Micael Levi L. Cavalcante (@micalevisk)
Mohamed-Zakaria (@Mohamed-Elshesheny)
Om Bhandwaldar (@OmBhandwaldar)
Rabari Mihir (@Mihir-Rabari)
RedShapedMoon (@korrayt)
Roman Khegay (@thekhegay)
Tiziano Basile (@basteez)
Younes Beriane (@drakeo338)
jackie_cqz (@jackie-cqz)
Žan Mlakar (@zanmlakar)
12.1.2
30 Sep 202612.1.1
28 Sep 2026common,core,microservices,testingmicroservicescommon
Bug fixes
common,core,microservices,testingfix(common): logger bugs in json output, level changes, fatal and buffered logs (@kamilmysliwiec)
microservicesfix(microservices): let the mqtt client retry after a failed connect (@hktitof)
fix(microservices): keep tcp event listeners across reconnects (@KAPUIST)
fix(microservices): ignore events from a replaced tcp client socket (@KAPUIST)
fix(microservices): keep a newer nats connection when a stale one fails (@hktitof)
fix(microservices): keep a newer kafka connection when a stale one fails (@kamilmysliwiec)
fix(microservices): let the rmq client retry after a failed connect (@hktitof)
fix(microservices): reply on the request channel when redis wildcards are enabled (@fadiroot)
fix(microservices): recover the nats client after it gives up reconnecting (@xia-chao)
commonfix(common): preserve string enum values matching numeric member names (@KAPUIST)
corefix(core): detect circular dependencies across more than two providers (@erezcor)
platform-fastifyfix(fastify): treat a JSON content type with parameters as JSON in reply() (@fadiroot)
core,testingfix(core): honor class and factory overrides of value providers (@lehafari)
Enhancements
commonfix(common): reject non-numeric items in ParseArrayPipe with items Number (@SulimanAbdulrazzaq)
microservicesfeat(microservices): export deserializers from the package root (@lazerg)
Committers: 13
Abdellatif Anaflous (@hktitof)
Alejandro (@lehafari)
Daniel Pinto (@Cayan)
Dharmik Sondagar (@DharmikSondagar)
Kamil Mysliwiec (@kamilmysliwiec)
Lazizbek Ergashev (@lazerg)
Luke Son (@KAPUIST)
Micael Levi L. Cavalcante (@micalevisk)
Roman Khegay (@thekhegay)
Suliman Abdulrazzaq (@SulimanAbdulrazzaq)
Xia Chao (@xia-chao)
fadi romdhan (@fadiroot)
12.1.0
23 Sep 2026coremicroservicescore
Bug fixes
corefix(core): inherit optional ctor params when the ctor is not redeclared (@kamilmysliwiec)
fix(core): name the module when metadata entries are invalid (@thekhegay)
microservices
Enhancements
corecommon,corefeat(core): add support for array of global prefixes (@micalevisk)
feat(common,core): add built-in, adapter-agnostic cookies (@kamilmysliwiec)
platform-fastifyfix(fastify): honor Nest forceCloseConnections in initHttpServer (@xia-chao)
commonfix(common): apply the ParseDatePipe default to every missing value (@xia-chao)
platform-fastify,testingfeat(fastify): add file upload interceptors backed by @fastify/multipart (@kamilmysliwiec)
common,core,platform-fastifyfeat(common,core,fastify): built-in CSRF protection and security headers (@kamilmysliwiec)
Committers: 9
Abdellatif Anaflous (@hktitof)
Alejandro (@lehafari)
Chris Z (@haimingZZ)
Johnny J. Huirilef Millán (@johnnyhuirilef)
Jérémy Fauvel (@Grmiade)
Kamil Mysliwiec (@kamilmysliwiec)
Micael Levi L. Cavalcante (@micalevisk)
Roman Khegay (@thekhegay)
Xia Chao (@xia-chao)
Dependency tracking · free for 3 projects
Know when your own dependencies move
@nestjs/platform-ws shipped a new major in the last 12 months, among 43 releases. Inlinr shows which of your projects are behind, and what the upgrade breaks.
Advisories reach you
An email when a critical or high advisory affects a project, before the next install.
Upgrades checked first
Peer ranges, Node, ESM-only and types changes read before you bump.
Only what matters
Majors and breaking notes stay; patches and sibling bumps fold into one line.
Registry facts last checked 26 Oct 2026. Releases and advisories last read 26 Oct 2026.