NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2889 most downloaded on npm
The industry standard for API mocking in JavaScript.
Last release 2 days ago
03 Oct 2026
Release timing varies
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
340 releases · first in 2018
HttpResponse: set the default bodyType to any (#2439) (bb1faf80645c551053e773382d9b56775f8bb580) @kettanaito
bodyType to any (#2439) (bb1faf80645c551053e773382d9b56775f8bb580) @kettanaitoHttpResponse: support non-configurable status codes (#2434) (0cf639e9c12b25093fe8aa0cce865168ea7db978) @kettanaito
One column per quarter.
use picocolors instead of chalk (#2377) (85bdd82dfe4cd3d514d7820dad3338b485084fbf) @Namchee @kettanaito
picocolors instead of chalk (#2377) (85bdd82dfe4cd3d514d7820dad3338b485084fbf) @Namchee @kettanaitosupport SharedArrayBuffer in HttpResponse.arrayBuffer (#2389) (41f00e1a67e21010ab9c1a46c8e92193b655f24a) @danilofuchs @kettanaito
SharedArrayBuffer in HttpResponse.arrayBuffer (#2389) (41f00e1a67e21010ab9c1a46c8e92193b655f24a) @danilofuchs @kettanaitosetupServer: reapply interception after calling server.listen() after server.close() (#2383) (00da9cad4249b61732ee375d9dbefeb76028cc2b) @kettanaito
server.listen() after server.close() (#2383) (00da9cad4249b61732ee375d9dbefeb76028cc2b) @kettanaitosetupWorker: correctly delete internal accept header on passthrough (#2375) (3f40055b1d3814da4b30e5eb7555e09b1084798c) @smouillour @kettanaito
accept header on passthrough (#2375) (3f40055b1d3814da4b30e5eb7555e09b1084798c) @smouillour @kettanaitotypes: support optional path parameters (#2368) (3b7b776e8c0de341185df4686a895c24326748d3) @kettanaito
support non-configurable responses (#2360) (5bf3e3bf5f9a6d32c79410c11abd539ec4c2ddc5) @kettanaito
prevent infinite loop when bypassing sendBeacon() requests (#2353) (2fa98c327acc51189f87789d9155c4ec57be2299) @kettanaito
sendBeacon() requests (#2353) (2fa98c327acc51189f87789d9155c4ec57be2299) @kettanaitohandleRequest: remove transformResponse option (#2351) (74c4a3a89970bbfc498c812790daef13766dea72) @kettanaito
transformResponse option (#2351) (74c4a3a89970bbfc498c812790daef13766dea72) @kettanaitoupdate @bundled-es-modules/cookie to 2.0.1 (#2312) (c134352e8206b91740247f4f196767ab8a8eb921) @kettanaito
@bundled-es-modules/cookie to 2.0.1 (#2312) (c134352e8206b91740247f4f196767ab8a8eb921) @kettanaitoprevent instanceof handler check failures between different MSW versions (#2349) (28d26bd7fa585d76f9ca69a67dfa70a234450ed9) @kettanaito
instanceof handler check failures between different MSW versions (#2349) (28d26bd7fa585d76f9ca69a67dfa70a234450ed9) @kettanaitosupport mocking WebSocket APIs (#2011) (ae786f59eb86b3d08c0fa5183ffca90e32af6448) @kettanaito @DanielleHuisman
enable provenance for publishing (#2334) (e9b0636c2c50c2aa9fc8d522469fbd96cfd7ccf0) @kettanaito
update@inquirer/confirm requirement to 5.0.0 (#2325) (b65c0a8ffac0a72b7d9980768f8c73e2d763f863) @greysteil @kettanaito
@inquirer/confirm requirement to 5.0.0 (#2325) (b65c0a8ffac0a72b7d9980768f8c73e2d763f863) @greysteil @kettanaitoisolate parent and child frames when handling requests (#2324) (a1a81ba00170bbcdfc6f64baa4a3630e153d77b3) @kettanaito
update @inquirer/confirm to 4.0 (#2300) (0cf9cce8da519e7bd5a8c8ffcdab348ffb55a3ec) @greysteil @kettanaito
@inquirer/confirm to 4.0 (#2300) (0cf9cce8da519e7bd5a8c8ffcdab348ffb55a3ec) @greysteil @kettanaitonode: preserve headers instanceof when recording raw headers (#2321) (a58a300687a48e13c0268403a71183cf7825f748) @paoloricciuti
update dependencies (#2313) (8f68f0affd65137d86e77451bb9a3cbed4979d36) @kettanaito
setupWorker: perform worker update in the background (#2311) (8e40724cd3e315e0df703cce8d9f2cf7ab6cdc73) @kettanaito
ClientRequest: support Request as init when recording raw headers (#2293) (bf982eaa70ddd5d08706b8877ceb6c6c2517f660) @kettanaito
Request as init when recording raw headers (#2293) (bf982eaa70ddd5d08706b8877ceb6c6c2517f660) @kettanaitoaddress express and path-to-regexp vulnerabilities (#2285) (e3487bc4259368adc33739eb9490bde8421a215c) @markmssd
express and path-to-regexp vulnerabilities (#2285) (e3487bc4259368adc33739eb9490bde8421a215c) @markmssdClientRequest: prevent duplicates when recording set headers (#2284) (e04eb8f44ffcf5ce755aa224d31a8576f4719a9f) @kettanaito
Object.defineProperty for Headers proxy (#2283) (94e17beea475a494c1de8b58ea399e518f55ddda) @kettanaitoxhr: clone request body before calculating its size (#2282) (397444bcc386bbe560aa649460cb92cdb31d28a9) @kettanaito
remove cookies with max-age=0 from cookie store (#2275) (c307ab27643fc80631d3f0a28e72f7339a54af70) @kettanaito
max-age=0 from cookie store (#2275) (c307ab27643fc80631d3f0a28e72f7339a54af70) @kettanaitofetch: follow mocked redirect responses (#2268) (f5785bfba1a026075feca4f74cadfcb636ffc257) @kettanaito
revert "graphql" as optional peer dependency (#2267) (7cd39e787aa9766eef914bce3d65daec1ce16635) @kettanaito
cli: support windows paths in the init command (#2260) (ba285b887cedfa22f32ae1e8d6569e57174cb561) @ivanfernandez2646 @kettanaito
init command (#2260) (ba285b887cedfa22f32ae1e8d6569e57174cb561) @ivanfernandez2646 @kettanaitographql import as require in cjs (#2258) (b97760270b28bd633b56332d87a9d834f653cad2) @kettanaitoimport graphql lazily (#2250) (1799e0638f0f860c19ba46db7c4287012f2cb716) @kettanaito
graphql lazily (#2250) (1799e0638f0f860c19ba46db7c4287012f2cb716) @kettanaitographql to "peerDependencies" (#2249) (8a9568ad4593b662a8c320bb1a02b380791a1696) @THETCRadd HttpResponse.html() static method (#2140, docs) (8c5580a0e2e6e52785b0132128c36d679ddbe5d5) @scruffymongrel @kettanaito
HttpResponse.html() static method (#2140, docs) (8c5580a0e2e6e52785b0132128c36d679ddbe5d5) @scruffymongrel @kettanaitoonUnhandledRequest message (#2227) (a2153c93edd752d7c5686573f684721b19f0a115) @bitttttten @kettanaitoHttpResponse: skip setting "Content-Length" if it is already set (#2228) (a0234c9abebada6f66f8a14dfa04bf2aac6e6dcf) @kettanaito
cookieStore: remove left-over console.log (#2217) (00fdbb265dbb5cf0f9f89bd91b546966463535a4) @Lalem001
console.log (#2217) (00fdbb265dbb5cf0f9f89bd91b546966463535a4) @Lalem001implement cookie persistence using tough-cookie (#2206) (c30613c2ba1df0c3f2575051ddb3eb42f1744f69) @kettanaito
tough-cookie (#2206) (c30613c2ba1df0c3f2575051ddb3eb42f1744f69) @kettanaitosupport typescript@5.5 (deprecate v4.7) (#2190) (7df2533c183bb73b176863fee5101ade69c16fea) @KaiSpencer @kettanaito
preserve trailing optional path parameters (#2169) (e69bbd6fda7c7997b523457b644440889e68d994) @kettanaito @KaiSpencer
> This release changes how MSW treats unhandled exceptions in response resolvers. Previously, they were treated as request errors. Starting with this
[!WARNING] This release changes how MSW treats unhandled exceptions in response resolvers. Previously, they were treated as request errors. Starting with this release, unhandled resolver exceptions will be coerced to
500 Unhandled Exceptionmocked error responses produced by the library. Please note that you must not intentionally throw errors in your resolvers. Please useResponse.error()to mock request/network errors. Unhandled exceptions are considered unintended and will be treated as if they happen on the actual server.
node export when importing msw/node (#2134, transitively through @mswjs/interceptors).unhandledException event (#2135, docs).server.events.on('unhandledException', ({ request, error }) => {
console.log('%s %s errored! See details below.', request.method, request.url)
console.error(error)
})
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
Nothing published for this version
Nothing published for this version
Nothing published for this version
preserve search params in "onUnhandledRequest" messages (#2128) (64bcae7c27dfd36a35723a323c29cf0f5138a81c) @nagadevkrishna @kettanaito
node export condition higher priority (#2134) (f948d13d2df85efa8d276396e1e60da235523a0e) @phryneasuse createRequestId() instead of crypto.randomUUID() (#2113) (8f2be77627b94318e6c2e6d6eee38fc49558c6d9) @kettanaito
createRequestId() instead of crypto.randomUUID() (#2113) (8f2be77627b94318e6c2e6d6eee38fc49558c6d9) @kettanaitodo not mutate user-defined "X-Request-Id" request header (#2110) (64b6ba516123d655e82d164e8ed1bb1f75b8cff8) @kettanaito
accept a narrower response body type by default (#2107) (d35ef92d0fe07831fb2aaa46050fabf27d3aa709) @kettanaito
feature "new URL()" in the redundant query params warning (#2102) (9af301a7ea593642cc7b6d46f3685cf2ff9f2b58) @psjostrom @kettanaito
properly infer parameter and return types in server.boundary() (#2101) (1370736580b5c2a37127359b79433ca4e9b20c79) @Andarist @kettanaito
server.boundary() (#2101) (1370736580b5c2a37127359b79433ca4e9b20c79) @Andarist @kettanaitosetupWorker: remove left-over console.log() (#2099) (cf979915aab2ed1759c6c05a6eb5e038fc0dcb2a) @kettanaito
resolve "~/core" import for .d.mts modules (#2095) (7cdbd1a2c4e02c11ba22e50b50ee042228d00f92) @kettanaito
setupWorker: emit the correct life-cycle events for bypassed requests (#2094) (c485989df15962fb02a36fd85654228719f8fed7) @kettanaito
improve the worker integrity warning (#2091) (e7493557e1c4d9ecece11cd45d29472c90c28426) @kettanaito
resolve "@inquirer/confim" default export (#2088) (93d9f86a0c7cab6afd19a35ff1960c4d983844f8) @kettanaito
remove the upper range for typescript peer dependency (#2077) (07cc073f0ddd46333de4ba42d3dc0dd2d01925b6) @kettanaito
typescript peer dependency (#2077) (07cc073f0ddd46333de4ba42d3dc0dd2d01925b6) @kettanaitoYour coding agent can read these notes before it upgrades. Set up the MCP server →