NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1881 most downloaded on npm
Low-level network interception library for Node.js.
Last release today
04 Oct 2026
Release timing varies
gaps range from 8 days to 4 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
212 releases · first in 2021
One column per quarter.
Nothing published for this version
http: intercept exchanges inside real "CONNECT" tunnels and TLS over provided sockets ( #851 ) ( 980685d ) @kettanaito
fetch: prevent truncating compressed responses to the first chunk ( #849 ) ( 348b1ff ) @kettanaito
v0.45.4 (2026-09-26) Bug Fixes update rettime to 0.11.12
ws: proper websocket handle types ( #846 ) ( 417bbfc ) @kettanaito
fetch: expose same request/response refs in listeners ( #845 ) ( 22f1fa7 ) @kettanaito
http: keep reconnects attributed to their initiator after dispose ( #844 ) ( 93a1567 ) @kettanaito
WebSocket: support extensions ( #842 ) ( 4c01ff2 ) @kettanaito
WebSocket: support custom protocols ( #840 ) ( 7f1b37c ) @kettanaito
XMLHttpRequest: support header deletion in node.js ( #838 ) ( c019d5d ) @kettanaito
XMLHttpRequest: consistent forbidden request headers behavior ( #837 ) ( 4f0c15e ) @kettanaito
re-export WebSocket types ( #836 ) ( 0e12141 ) @kettanaito
revert connection listener invocation ( #834 ) ( 0e198c7 ) @kettanaito
fetch: prevent hanging on passthrough response stream cancellation ( #833 ) ( 28a70d0 ) @kettanaito
WebSocket: properly export to bundle debug ( #827 ) ( 6612286 ) @kettanaito
debug (#827) (6612286) @kettanaitosocket: properly handle first bytes when switching socket types ( #814 ) ( 2a08722 ) @kettanaito
socket: move last resort passthrough to the socket level ( #812 ) ( d202082 ) @kettanaito
bundle debug in browser build ( #809 ) ( 5e7592a ) @kettanaito
Implements TCP/TLS wrap-based interception ( #770 ) ( 8a8fe6f ) @kettanaito
getRawRequest utility has been removed. Use the initiator reference on request listeners directly./utils/node and getClientRequestBodyStream() has been removed. Use the initiator reference directly.file:// protocol requests are unsupported with fetch the same way they aren't supported in Node.js 22 and 24 (improved compliance).fetch the same way they do in Node.js. Other upgrade paths are unaffected and function correctly (http.request, WebSocket, undici).CONNECT requests (fixes #481, closes #621).fetch and request even when they aren't global.initiator on the "request" event listener. The initiator property points to ClientRequest, XMLHttpRequest, or Request instance that initiated the intercepted request. If no instance can be reliably deduced, points to the raw net.Socket behind the connection.http/https (e.g. import * as http broke previously since we cannot patch that).secureConnect before writing anything are now properly supported.keylog event on the socket.Content-Type header added by Undici was not set on mocked responses.socket.address(), as well as localAddress, localPort, localFamily, remoteAddress, remotePort, and `remoteFamily, are correctly set for both mocked and bypassed connections.request.upload wasn't dispatched correctly.total response body length is now computed only from the content-length mocked response header, just like it's done natively.progress event is now correctly emitted on the request for chunked responses.OPTIONS preflight request based on the JSDOM implementation (previously, preflight triggered for requests that shouldn't trigger it).use Symbol.for for internal symbols ( #789 ) ( b393ded ) @kettanaito
Symbol.for for internal symbols (#789) (b393ded) @kettanaitoabort listener to prevent leak (#785) (a89b4e4) @kettanaitosupport patching non-configurable writable properties ( #780 ) ( 39372f7 ) @kettanaito
FetchResponse: preserve custom status and url after cloning ( #778 ) ( c1a4ba9 ) @kettanaito
status and url after cloning (#778) (c1a4ba9) @kettanaitofetch: clone responses safely ( #775 ) ( 35b1021 ) @kettanaito
support detecting prototype-level globals ( #774 ) ( 7f8c14a ) @kettanaito
add FetchRequest utility ( #773 ) ( 5365105 ) @kettanaito
WebSocket: annotate readyState as WebSocket['readyState'] (#767) (db7fa657cf0e70357836093a1cd5baf57e61963e) @dasa
readyState as WebSocket['readyState'] (#767) (db7fa657cf0e70357836093a1cd5baf57e61963e) @dasaexport resolveWebSocketUrl function (#764) (eecdb7c890a932a6eb5601697fc7048b028b04db) @kettanaito
resolveWebSocketUrl function (#764) (eecdb7c890a932a6eb5601697fc7048b028b04db) @kettanaitoWebSocket: resolve relative connection urls (#763) (46faa375fa463cea23545ff4a2cf4194c47fa44f) @kettanaito
> BREAKING CHANGE: The CJS bundle of the package no longer contains the named default export at /presets/node. You should consider requiring the packa…
[!WARNING] BREAKING CHANGE: The CJS bundle of the package no longer contains the named
defaultexport at/presets/node. You should consider requiring the package as follows now:-const { default: preset } = require('@mswjs/interceptors/presets/node') +const preset = require('@mswjs/interceptors/presets/node')
tsdown for bundling (#759) (b3091b53e4cbd94525bbda5fbe9fc667f8f518ec) @kettanaitosupport RequestController with source (#749) (c7b48abfdb1044e49168845045e692fbb7de3899) @kettanaito
RequestController with source (#749) (c7b48abfdb1044e49168845045e692fbb7de3899) @kettanaitoTLSSocket.getCipher method (#688) (f169e014b39847a2ac4aa2c38ba7dbc67e0eeed2) @jonathansamines @kettanaitoWebSocket: await connection event listeners (#748) (c5a995dfbbb4ed6ac351aedff15e4b8772e1ad5d) @kettanaito
connection event listeners (#748) (c5a995dfbbb4ed6ac351aedff15e4b8772e1ad5d) @kettanaitoset redirected property on redirect responses (#746) (f58298357974c5cb56818e89fa46f7a277599c8d) @erikshestopal
redirected property on redirect responses (#746) (f58298357974c5cb56818e89fa46f7a277599c8d) @erikshestopalinclude the ./presets folder in published package (#743) (ed9426190088eece5b281f33b3da7c563ac544d7) @G07cha @kettanaito
./presets folder in published package (#743) (ed9426190088eece5b281f33b3da7c563ac544d7) @G07cha @kettanaitoClientRequest: support http.Agent instances as agents for https requests (#737) (6800d59d373ce22f96aa1aac72f89f370b7a23fb) @kettanaito
http.Agent instances as agents for https requests (#737) (6800d59d373ce22f96aa1aac72f89f370b7a23fb) @kettanaitoClientRequest: support mocking responses with a lot of headers (#735) (6830f1e526b1a53de7b69b528ef2d7ef39a8309e) @YangJonghun @kettanaito
ClientRequest: support intercepting "slow" requests (#734) (7453c99f4e50f9f3950c86a43b4648cc241250ee) @kettanaito @YangJonghun
Agent if the request option agent is undefined (#731) (b8739fa3fa74846ee1c052e2482568679d7e7c81) @mikicho @kettanaitoWebSocket: export CloseEvent and other event classes (#728) (8885b3fbb79eef3490b7b893e96a4a3016d2e234) @kettanaito
CloseEvent and other event classes (#728) (8885b3fbb79eef3490b7b893e96a4a3016d2e234) @kettanaitoWebSocket: use non-protocol types for client and server (#727) (b144c31cb82c3fe7e24f2a62feb8baa40901c764) @kettanaito
client and server (#727) (b144c31cb82c3fe7e24f2a62feb8baa40901c764) @kettanaitoWebSocket: implement WebSocketServerConnectionProtocol (#726) (2fd95b05749c814f2a7f915f3952d4d2c97dbe8f) @kettanaito
WebSocketServerConnectionProtocol (#726) (2fd95b05749c814f2a7f915f3952d4d2c97dbe8f) @kettanaitoClientRequest: inherit the connection _handle for passthrough requests (#706) (99967d794b2b45af4bedd224a89882450c937d0e) @mikicho @kettanaito
_handle for passthrough requests (#706) (99967d794b2b45af4bedd224a89882450c937d0e) @mikicho @kettanaitoHeaders (#724) (e8a40119dc6f8eb1c9188ff67fa0ee4dd1713874) @mikicho @kettanaitoClientRequest (#692) (294a4cb351a82caec1e38c65c75616dbe6f1d211) @mikicho @kettanaitoremove jsdom from dependencies (#720) (d63ce8d5e4460eb845fbaeefebe8502ea9eb8090) @julienw @kettanaito
jsdom from dependencies (#720) (d63ce8d5e4460eb845fbaeefebe8502ea9eb8090) @julienw @kettanaitosupport getClientRequestBodyStream utility (#721) (293214ee3ba9542d187c2dc5d7842cabe9f169ee) @kettanaito @mikicho
getClientRequestBodyStream utility (#721) (293214ee3ba9542d187c2dc5d7842cabe9f169ee) @kettanaito @mikichoRequestController: support arbitrary objects in .errorWith() (#676) (bcef9f14a5fcbfd5923ea71e6b4af3e933f26d18) @mikicho @kettanaito
.errorWith() (#676) (bcef9f14a5fcbfd5923ea71e6b4af3e933f26d18) @mikicho @kettanaitoadd getRawRequest utility (#719) (265af2e83441e0463b8d5eb037947fecc39f5efe) @kettanaito
getRawRequest utility (#719) (265af2e83441e0463b8d5eb037947fecc39f5efe) @kettanaitoClientRequest: allow GET requests with body (#715) (aa726e850e6f3ea286c546157ec473841b27d35e) @kettanaito @mikicho
location.href, not location.origin (#717) (6bfa4e1c7c7f13a1e6475ce301c8a115ee1f4db2) @paulSerre @kettanaitofetch: update response.url correctly (#714) (d39e65b53bd1bf2e71a0fc6a96fa1bbe4271b4d6) @kettanaito
response.url correctly (#714) (d39e65b53bd1bf2e71a0fc6a96fa1bbe4271b4d6) @kettanaitoRemoteHttpInterceptor: support fetch requests by default (#710) (37049ca13f7bdb416202ae71d08ffed668bd2d03) @kettanaito
ClientRequest: pass custom agent options in passthrough (#701) (bcec579a168927853d56392b16c035d5539188b3) @mikicho @kettanaito
FetchResponse: add parseRawHeaders static method (#698) (1691679a2edab43d500c059234f4cdff6ac8939b) @kettanaito
parseRawHeaders static method (#698) (1691679a2edab43d500c059234f4cdff6ac8939b) @kettanaitoClientRequest: prevent rawHeaders from being shared across instances (#694) (a5ef7eaf0c37229ca3211a740cc2fc59fc04c9c6) @mikicho @kettanaito
rawHeaders from being shared across instances (#694) (a5ef7eaf0c37229ca3211a740cc2fc59fc04c9c6) @mikicho @kettanaitoClientRequest: passthrough Upgrade requests correctly (#683) (cd32d01ef88752ab14dc616ba3f87d841aba20d9) @kettanaito
Upgrade requests correctly (#683) (cd32d01ef88752ab14dc616ba3f87d841aba20d9) @kettanaitoClientRequest: prevent req.write() callbacks from being called twice on passthrough (#685) (e3c2a0be728dac4273a2813c27ad2ae74498a882) @kettanaito
req.write() callbacks from being called twice on passthrough (#685) (e3c2a0be728dac4273a2813c27ad2ae74498a882) @kettanaitoWebSocket: buffer sending the data until connection is open (#678) (eaf71827bee24cdf497c3ccd7d19d630af5a8560) @kettanaito
support non-configurable responses (#677) (1d1cc098452504bf455412325a95f3a2ee8c7f60) @kettanaito
ClientRequest: do not unshift write buffer when flushing request headers (#674) (0d580b3e0bafcb4344fa412083b294dc14a5d1c0) @kettanaito
export RequestController type (#671) (06fe8f68e6e43c19895b117e008560c147185d22) @kettanaito
RequestController type (#671) (06fe8f68e6e43c19895b117e008560c147185d22) @kettanaitohasConfigurableGlobal: handle existing globals with undefined value (#669) (f2ae1329034e1e7d477f890d9b67e2b18b586f4d) @Afsoon @kettanaito
skip interceptors for non-configurable globals (#665) (2ec79d749afca60d4363041a8e10b715ce6c3d6f) @kettanaito
This release enables automatic decompression of response bodies when using the fetch interceptor.
This release enables automatic decompression of response bodies when using the fetch interceptor.
Content-Encoding response header (#604) (b8f8d51d71dcd636449beeec833c5b9182af6c78) @mikicho @kettanaitoClientRequest: preserve headers type when recording raw headers (#660) (2f6106c9a96447c08423cef3ae68fde1c9e28b65) @paoloricciuti @kettanaito
Your coding agent can read these notes before it upgrades. Set up the MCP server →