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 2 days ago
16 Sep 2026
Release timing varies
gaps range from 8 days to 4 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
201 releases · first in 2021
One column per quarter.
xhr: clone the request before calculating its body size (#632) (44276ef50eda1cccd7dd18da07cb25f1d923425c) @robbtraister @kettanaito
use correct path for _http_common in tsconfig.json (#634) (0fff663c548da73caa2481b1d97da193d6df299d) @sjoleee
_http_common in tsconfig.json (#634) (0fff663c548da73caa2481b1d97da193d6df299d) @sjoleeefetch: rebase relative redirect URL against request.url (#628) (1161c7be64e8381be4b859e0548f3d6d7f49c608) @mikicho
request.url (#628) (1161c7be64e8381be4b859e0548f3d6d7f49c608) @mikichofetch: support following redirect responses (#627) (7410d45a919bacadc2995d6173f3f7e7340f6e50) @kettanaito
ClientRequest: use urlToHttpOptions from node:url (#618) (5a591ab37a37c8bceb6fc7df0c7506d42edd04d0) @kettanaito
urlToHttpOptions from node:url (#618) (5a591ab37a37c8bceb6fc7df0c7506d42edd04d0) @kettanaitototal length of response body (#616) (0c0a4f12d8ad8c3887b33f5e777b84310a34ad5c) @kettanaito @abhishekpaturkarXMLHttpRequest: support request upload events (#613) (472bcbe4b6b7f0652da10eb647a3aaa898ad4f7c) @kettanaito
upload events (#613) (472bcbe4b6b7f0652da10eb647a3aaa898ad4f7c) @kettanaitoWebSocket: use 1011 as close code for unhandled interceptor errors (#612) (42daf43056b25c0faefcbeb3b1a90f4b9335b3d8) @kettanaito
code for unhandled interceptor errors (#612) (42daf43056b25c0faefcbeb3b1a90f4b9335b3d8) @kettanaitowasClean to true on normal connection closures (#611) (94a390c0444e91c65fa255013de421cd64b50ab8) @kettanaitoadd FetchInterceptor to the node preset (#603) (d679a4de255094a66f35b0482542002543563dcb) @mikicho @kettanaito
FetchInterceptor to the node preset (#603) (d679a4de255094a66f35b0482542002543563dcb) @mikicho @kettanaitoerror event (#608) (5d9d71ee0339c3c59b569c32d387323d8bf2742b) @kettanaitoWebSocket: emit "error" event on server connection errors (#607) (67aebe5c34266032a0a5e9e34ee81e1a8803bda2) @kettanaito
server connection errors (#607) (67aebe5c34266032a0a5e9e34ee81e1a8803bda2) @kettanaitosupport lowercase HTTP request methods (#605) (83e4b959f378b4f667478b3421d5fa90b62632e4) @mikicho @kettanaito
ClientRequest: improve rawHeaders recording (#602) (51355054a08f97823341b0bff7aa2d46bda10083) @mikicho @kettanaito
> This release contains BREAKING CHANGES.
[!WARNING] This release contains BREAKING CHANGES.
request.respondWith() has been deprecated in favor of controller.respondWith()interceptor.on('request',
- ({ request }) => request.respondWith(new Response()),
+ ({ controller }) => controller.respondWith(new Response())
The request instance exposed in the listener arguments is a raw, unmodified Fetch API Request instance representing the intercepted request.
RequestController class (#595) (73dd07a7415ac706f9db74237fde8fe63dc83471) @kettanaitocontroller.errorWith(error)ClientRequest: support "rawHeaders" in Fetch API Headers (#598) (4660558f27e610063ff204ccf4a7595082040a0b) @kettanaito @mikicho
ClientRequest: destroy socket when destroying IncomingMessage (#597) (8f041dad5d8fc5e295dcbcf28b9fcd9083f792d5) @kettanaito
ServerResponse to build the HTTP response string (#596) (fedac459da51f5cea2469dca7ccbc25d039398c0) @mikicho @kettanaitoClientRequest: use net.Socket interceptor (#515) (77a699696347c3dd18ef420564351ccc7642c8c9) @kettanaito @mikicho
ClientRequest: return correct boolean from .emit() proxy (#593) (5e09252d044c6c78bec1bf270869a0454b0cf371) @kettanaito
.emit() proxy (#593) (5e09252d044c6c78bec1bf270869a0454b0cf371) @kettanaitoClientRequest: await response listeners before emitting the "end" response event (#591) (f68e0b61faa9bae302b245e389cf5a08ba7e3bf7) @kettanaito
ClientRequest: account for missing agent.destroy when terminating a request (#585) (1226eb773f487268cbaef6e035e2f0e9f402bce9) @freben @kettanaito
agent.destroy when terminating a request (#585) (1226eb773f487268cbaef6e035e2f0e9f402bce9) @freben @kettanaitoWebSocket: add connection "info" to the "connection" event payload (#577) (8c633adc2e047153398e72d1c7cdd9778157f50c) @DanielleHuisman @kettanaito
ClientRequest: decode uri for username and password before setting basic authentication header (#565) (2cb46d75d9111bc7a86cfdc12cc2e1306f3c6f3e) @kett
add "unhandledException" event (#566) (a3afcf1a01464c18e96489366ca41ed887d16405) @kettanaito
support throwing Response.error() (#563) (9dda7255775984ecbb7133d7e0f309948252857e) @kettanaito
Response.error() (#563) (9dda7255775984ecbb7133d7e0f309948252857e) @kettanaitounify server error response across interceptors (#555) (bd0a7ddd5b4926382bb2fd8524b18dcd6fa0158d) @kettanaito
treat thrown responses as mocked responses (#553) (58a089ad1dbcf7e0c71d87bd3a13db246d812a6b) @kettanaito
give node export condition higher priority (#552) (866f5bcd197bd59032f7d13b854aedb55a4d7c47) @phryneas
node export condition higher priority (#552) (866f5bcd197bd59032f7d13b854aedb55a4d7c47) @phryneastreat unhandled interceptor exceptions as 500 responses (#532) (61f945950a07e0c778cb5e406dedf0b05fa3dda9) @kettanaito
WebSocket: reference bound listener when calling .removeEventListener() (#547) (8cc29479d2c4fda7a55296c2d2493f6ce2d2e8dd) @kettanaito
.removeEventListener() (#547) (8cc29479d2c4fda7a55296c2d2493f6ce2d2e8dd) @kettanaitoCancelableMessageEvent: add setters for "cancelable" and "defaultPrevented" (#546) (875a6aa55076355390e15400ba5b40015b356d0c) @kettanaito
WebSocket: forward client messages to the server by default (#545) (7d4d490c8982429e4be310e2cdf6adc83f31e6c7) @kettanaito
WebSocket: emit "close" event on "server.close()" (#538) (812d590351241c8703545354edeb060496fd65de) @kettanaito
drop "crypto.randomUUID()" in favor of "createRequestId()" (#536) (be2386ed5871c5efce5152975ddafd1fd1ee8be6) @kettanaito
WebSocket: forward "close" event to WebSocketClientConnection (#533) (1206667c4413776f092de3e45b8ae9f534b9660a) @kettanaito
use global "crypto.randomUUID()" (#530) (effb22561269d2ea51d54cbf0c30eefd4c5230b4) @kettanaito
WebSocket: add "server.close()" method (#528) (4cd11bbd7f055a23a94d4a647b5bb34428ec4681) @kettanaito
WebSocket: export "WebSocketConnectionData" type (#525) (a7bacb9668c09b392b5bfbb7fb7675a84847bf25) @kettanaito
WebSocket: make "WebSocket" reference (client.socket) public (#523) (0229d6501a077ccaeabfa57a353c8ea2303946fe) @kettanaito
WebSocket: inherit "binaryType" during original server connections (#519) (5c6ae831c7d181f660a8672ee1dddd31da227732) @kettanaito
WebSocket: reassign global to restore WebSocket (#514) (c4f1521eae4be3dcd67d76c1402806d386189d08) @kettanaito
WebSocket: use literal values for ready state properties (#511) (827cbbf93aceff945e9cfb2f0f8989140e6c59e9) @kettanaito
WebSocket: exports client connection protocol, transport, renames types (#509) (2fbadc87f9a5a516d09f2e0d5c5119524eb749f7) @kettanaito
WebSocket: add "client.id" property (#508) (a70a2e86481246bf539ecab33615708a7710d3cd) @kettanaito
forward server errors to WebSocket client (#507) (b5d0663043816196e6c193341b0974dc52a04c92) @kettanaito
WebSocket: make MessageEvent cancelable (#506) (9e1e18f08be77c4843cdb840e5aff084c479c226) @kettanaito
add "WebSocket" directory to "files"
add WebSocket class interceptor (#501) (84a16d4ef8b089d795b677866a7334291869c0e7) @kettanaito
fetch: improve React Native compatibility (#503) (4b77d384e194ec0f2e937724022668871fa88ec6) @sairus2k @kettanaito
resolve relative fetch urls against location (#499) (f9193cd74602bbd78c30086651b6a456d8662fd0) @kettanaito
add sourcemaps (#496) (80155f6de91a37799fecab8d916a8d77090433f2) @kettanaito
export a "isResponseWithoutBody" utility (#488) (334a1b3ca7acdb5d3a2c860e3a3694fafbacffc1) @kettanaito
add root-level "browser" export (#421) (4300ed7f55af53a66215234384591e4bc3538629) @blaenk @kettanaito
xhr: support environments with missing "location" (#482) (da1cc7163dfeb53b01f4ffa86dc55438101025e7) @kettanaito
support miniflare by checking "Response.type" access (#479) (5fa1218fcbe71dc83ee94c8ec835b3c8bbb65127) @mattcosta7 @kettanaito
xhr: allow setters for non-existing properties (#477) (4e73ed98fbdc2a5ecfeafa7ea466f909fd9016ac) @kettanaito
XMLHttpRequest: prevent invalid listener name access (#472) (fb8a400f50ad8eb48ece32b23d8354df7e58a16e) @hpohlmeyer
ClientRequest: support "http.request()" and "http.get()" without any arguments (#468) (65b7ac1ee93c1a1158ed246f797a1b6f1e2f5cba) @kettanaito
ClientRequest: support falsy request headers (#450) (04415fc962ed677c7d8c93a958ca193d13468db5) @mikicho
ClientRequest: support empty "username" and "password" basic auth values (#447) (01aa28d716569103d7f2c5c05d83e49c41657510) @mikicho @kettanaito
ClientRequest: support the "auth" option (#440) (8d04c086af13efac6937ed7f16cdb008f9d12fd4) @mikicho @kettanaito
ClientRequest: ignore message body for responses without body (#436) (db08d08a9a772a1748dbb5ebef96d74eb0b90ad8) @kettanaito
Interceptor: wrap the "once" event listener, ditch "untilIdle" Promise (#430) (cf4e2284f4d2d5f6862b6a458148dff224f65038) @kettanaito
Your coding agent can read these notes before it upgrades. Set up the MCP server →