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
set correct "Content-Length" response header for special characters (#2045) (#2046) (eb3e284a3e27956987854d23878aa4ea11c56dde) @ZeroCho
remove unused types (#2043) (a78d57d3e917d9b5ee4ac98e6851a3ab504ccd1a) @kettanaito
One column per quarter.
support concurrent test runs via "server.boundary" (announcement, #2000) (450e7bc72e7a9315053b50c450621ab037ddc5f6) @kettanaito
msw/core/http and msw/core/graphql export paths (#2004) (31442cfc9571cbc36a5b9d8b8ce8d54d61bfaeee) @thepassle @kettanaitosupport intercepting fetch requests in React Native (#2017) (e4307954722980a6d3320c79ab5398ad8084f37b) @sairus2k @kettanaito
Special thanks to @willdawsonme for investigating these issues.
return type of "passthrough" (#2002) (b030db5b70664c835f6ac01171a790af35181202) @kettanaito
add "request" to response events (#1993) (bad537f1fce7511f0a7258c0216a9ad49fbc27b8) @kettanaito
bundle browser build (#1988) (1cbf61553991d72452fa0bb5172f4efb967cd01b) @thepassle @kettanaito
export "getResponse" for batched GraphQL queries (#1982) (42f147367709d85c09ec44eb300848d0bbbf1b6d) @kettanaito
export "HttpRequestHandler" and "GraphQLRequestHandler" types (#1973) (ca423d9ffcf940ed9118e65126b5008e355fc2b3) @kettanaito
annotate the "requestId" response resolver argument (#1969) (f22294eb81bb53495265fba777e049a7102c2e1f) @skvale
deprecate "waitUntilReady" (deferNetworkUntil) worker option (#1964) (86a22ac92f77a11c0fd165f1313de1cc8f936f16) @kettanaito
Shoutout to @mattcosta7 for his continuous on the library's performance and stability 🎉
GraphQLHandler: move cookie parsing to parse phase (#1957) (ba87f99db4ad6fd99567cf5a87c1af90044ef906) @mattcosta7 @kettanaito
publish source and include sourcemaps (#1958) (68a57bd042c6c938f1a5bd84b21e068ad9517a78) @kettanaito
cache request cloning and request parsing (#1914) (a79a9d739e88f5501c0253c4c4701b76c2203ff2) @mattcosta7 @kettanaito
expose mockServiceWorker.js file in package exports (#1922) (5736efce63c0271ba37c69d2a7267e5cc614a444) @thepassle
null-body responses enforced in createResponseListener instead o… (#1895) (ed09722b327fc81f1a6f8d4d600445629877179e) @mattcosta7
skip parsing GraphQL requests if the request url doesn't match (#1871) (565e802c6dd0f971f939d7adcbeb82cf2de1af59) @mattcosta7 @kettanaito
graphql: allow null for "data" and "errors" response property types (#1867) (a7ffd32981fcda8acb70af28502ae7e98d16b353) @kettanaito
encode cookie string before forwarding request cookies (#1815) (c2d8e986ba7b44f6ba5da88164f6018fc4466d85) @Jungzl @kettanaito
GraphQL: expose request cookies in "cookies" argument (#1853) (463b74faaf445a4f751f8a25c67a8f98627f27f5) @kettanaito
xhr: support environments without location (React Native) (#1849) (f6601d995a3ddf0f2b5763a87a04ec132b649ed1) @kettanaito
safely access "request.credentials" in cloudflare (#1845) (bd0cec7a2163ab47301608c1712c55f1cf04327a) @kettanaito @mattcosta7
body type for HttpResponse.json() to be serializable json (#1838) (2af274c154d2e0b696188c10ba1f0271e900c40a) @kettanaitocorrectly check "undefined" as response body type (#1824) (a0ec8be311daef0285d8485e315bbb49a9370f44) @kettanaito
output a single formatted message to console (#1820) (2ead3922f3ec5a4750e3b9e09e75aeb20f13c736) @kettanaito
clone response early for response logging (#1799) (5c5470a0f2204b4164fcc65e210471661208ce4d) @kunmagg
> This release is a BREAKING CHANGE. Please follow the Migration guidelines to upgrade. This release took a lot of effort to make, and I expect a bit…
[!IMPORTANT] This release is a BREAKING CHANGE. Please follow the Migration guidelines to upgrade. This release took a lot of effort to make, and I expect a bit of that effort on your part while upgrading. Most of the changes are mechanical, and a simple Find/Replace All will get you a long way. For the rest of it, you will learn how to handle requests and responses using the standard JavaScript API. Thank you!
< 4.7.setupWorker, SetupWorkerApi, etc., must be imported from msw/browser now.rest object to http (rest.get -> http.get).(req, res, ctx) => res() but instead ({ request }) => new Response().responsecontext and related exports (defaultContext, restContext, graphqlContext).compose and createResponseCompositionres.once() is removed in favor of the { once: boolean } option on the request handler..printHandlers() method with .listHandlers().NetworkError class in favor of the standard Response.error().crypto.randomUUID() instead of Math.random() in the worker.Request and Response instances respectively.ReadableStream as a mocked response body.FormData.FormData as a mocked response body.File polyfill in Node.js.{ once: true } request handler option.RequestHandler API public.FormData.FormData response body.URLSearchParams as the request body couldn’t be read.referrerPolicy was reset to a different value than the original.XMLHttpRequest events and readyState changes.responseType equal to "arraybuffer" as an incorrect buffer (previously, always assumed to be a string).XMLHttpRequest events when the request fails.status equal to 0 until the request actually resolves.onload event callback was called twice for XMLHttpRequest.@dbritto-dev @ddolcimascolo @markwhitfeld @christoph-fricke @thepassle @piotr-cz @mattcosta7 @koddsson @dkobierski @ricardocosta @dxlbnl @zkochan @felipefreitag @weyert @95th @committomaster @Xayer @Kosai106 @colinsullivan @xmlking @thw0rted @lee-reinhardt @wKovacs64 @TeChn4K @cmolina @nickrttn @thomasbertet @mscottnelson @jonnedeprez @negabaro @the-ult @WesleyYue @cwagner22 @skvale @alawiii521 @csantos1113 @elliotgonzalez123 @committomaster @tsteckenborn @xxleyi @jonnedeprez @danny-does-stuff @lemcii @mattrodak @luisr-carrillo @lee-reinhardt @ealejandrootalvaro @tomdglenn91
security: update path-to-regexp to 6.3.0 (#2316) (5de6cfdd0d134666cb333aa7eb0a9ae99a1e7aea) @evktalo
path-to-regexp to 6.3.0 (#2316) (5de6cfdd0d134666cb333aa7eb0a9ae99a1e7aea) @evktalotypes: add generic type to MockedRequest.passthrough (#2198) (e13e64607aaca4468cd48b73a9a2105cd5b1db2e) @sbaechler
remove upper version range for "typescript" (#2086) (8f456bb3dec7c9a136483a9ce9021a90a62cb0f9) @kettanaito
set minimal "graphql" version to 16.18.1 (#1754) (0a857f67b6e0883336a790633aa9bafc0b16c7cb) @kettanaito
pin "headers-polyfill" to 3.2.5 (#1736) (2e53ae73bd734c435ac447ca2b60cdaaebc1390b) @kettanaito
support TypeScript 5.2 (#1711) (2ca791e437256452f63b95cf5ef19c91c7ac0b9a) @chentsulin @kettanaito
allow installs with any version of pnpm (#1713) (d35e851faa3d75b58b8051084c50b7f02491df84) @kettanaito
dependency: unpin the "chalk" dependency (#1639) (a93f63b345dc46548e42b71954b16b4a87d90fb8) @blowery @kettanaito
clone Response before logging (#1662) (daa04af4075b06607b81ed23bbe5ea09d56e8825) @kettanaito
log ReadableStream responses as text/json (#1622) (4c7e952e69f1a82115fafa695ae39b3169486570) @esquevin @kettanaito
ReadableStream responses as text/json (#1622) (4c7e952e69f1a82115fafa695ae39b3169486570) @esquevin @kettanaitoupdate dependencies to support ESM (#1575) (e7a60081526bd6f00ac17a62c424abf59976555b) @kettanaito
add operationName to GraphQL request (#1568) (115b435aef089a3c4fe9a618d5756c9cb944fe13) @ligaz @kettanaito
operationName to GraphQL request (#1568) (115b435aef089a3c4fe9a618d5756c9cb944fe13) @ligaz @kettanaitotypescript: support typescript 5.0 (#1566) (c0616d1473d168018ad8bba7194f8654a6ed153a) @mattcosta7
support global fetch in Node.js (#1543) (049f21df0e7c1b9811e083e83b7534cf0a06021a) @kettanaito
add "package.json" subpath export (#1530) (12a581f480e3a2f9bdcda7874f98114c148c9d85) @iceu-bb @kettanaito
rename "SetupWorkerApi"/"SetupServerApi" types to "SetupWorker"/"SetupServer" (#1478) (4fde47ef00bbddc6fdea2b6bdb8ac77b1d398c33) @gduliscouet-ubitrans
use EventTarget-based event emitter (#1522) (6a94b8c06d7a6fbc7be0c5224ba35f38888964b1) @chrisguttandin
use globalThis.fetch in ctx.fetch utility (#1490) (42cdbc79654d90b3edce747ea044513f2f964958) @Toxiapo @kettanaito
globalThis.fetch in ctx.fetch utility (#1490) (42cdbc79654d90b3edce747ea044513f2f964958) @Toxiapo @kettanaitosetupWorker: resolve the TS4094 error (#1477) (c268796eb7a20a1b1f2959cdb1b256a36519a60d) @gduliscouet-ubitransport
support TypeScript 4.9, drop support for TypeScript 4.2, 4.3 (#1467) (af0277da900e20c7fb270ddb46be20deb487aefc) @wtchnm
SetupApi: validate given request handlers (#1460) (a06a9447d09d93a2a0a108cb27bc183e5bd4716d) @kettanaito
statuses dependency during the build (#1458) (99d49f9b1ee71cdb945bd9ae3e78d89c23c2b74e) @mattcosta7 @kettanaitoresolve absolute worker url against the current path (#1456) (f8d15b41a941613cd4868cf0e85d2d3aa075d067) @kettanaito
bufferUtils import path (#1453) (91b2902ded79bea2d649057bd7858862ac91c4c4) @cksal0805
add "SetupApi" base class (#1445) (85ba8440f57d15e6ce948f2350488365e809dce5) @Toxiapo @kettanaito
correctly link types in package.json exports field (#1395) (3902b8c216b2254beef7c35519cc2242b4535b22) @ivanhofer @kettanaito
package.json exports field (#1395) (3902b8c216b2254beef7c35519cc2242b4535b22) @ivanhofer @kettanaitoupdate "headers-polyfill" and "@mswjs/interceptors" to fix "/lib" issue
fix a typo in the "listHandlers" method jsdoc
print response log only when response arrives
add explicit exports map in package.json
exports map in package.json (#1383) (5e1c1a6a9ab4450073adf571d4b68978d177bf52)deps: include "graphql" as a dependency
fix a typo in the worker script
server.listHandlers()
worker.listHandlers()
make GraphQL a peer dependency, support GraphQL v15.0
transfer mocked response as ArrayBuffer to the worker
## v0.44.1 (2022-07-14) ### Bug Fixes - super call stack overflow
Your coding agent can read these notes before it upgrades. Set up the MCP server →