NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #2101 most downloaded on npm
Universal Server.
Last release 20 days ago
14 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
2 years old
93 releases · first in 2024
One column per month.
body-limit: Export BodyTooLargeError class with HTTPError shape
BodyTooLargeError class with HTTPError shape (d0c8079)Bunny.v1.waitUntil (#304)Bunny.v1.waitUntil (#304)node: Handle promises independently of the global constructor
aws-lambda: Strip parameters before matching content type
node/web: Handle requests without an abort signal
node: Report auto-listen failure instead of exiting 0 silently
Nothing published for this version
url: Avoid full parse when reading hash on the fast path
node/http2: Detect client disconnects on Node 26
node: Make send-failure recovery unable to throw
NODE_ENV=production again (2e7a135)_request over the size-limited body (6882f6d)IncomingMessage.headers accessor (0fbfb06)HeadersInit from the ambient Headers (#288)NODE_ENV=production again (2e7a135)_request over the size-limited body (6882f6d)HeadersInit from the ambient Headers (#288)compare changes 🌊 Types Inline minimal runtime types
body-limit: Allow injecting the over-limit error
body-limit: Preserve ServerRequest in limitRequestBody
Export body size limit helpers via srvx/body-limit ( #280 ) ( docs )
srvx/body-limit (#280)node: Fast path for FastResponse.json
static: ⚠️ Security hardenings and general improvements
Last-Modified and ETag conditional caching (#269)Cache-Control via maxAge/immutable (#273)*Middleware / *Plugin (#278)respondWith synchronously and drop extension bypass (#226)toFetchHandler compat layer (#232)file:// entry in loader and node-level TLS in mtls (#231)waitUntil leak and reject NaN ports (#225)FastURL origin-form string and HTTP/2 char normalization (#227)x-forwarded-* hop-aware, right-to-left (#229)statusText, empty body, HEAD streaming, send errors, sync bridge) (#243)patchGlobalRequest idempotent (#255)SO_REUSEPORT for reusePort option (#258)next to connect-style middleware on the synthetic bridge path (#259)FastResponse init headers instead of adopting them (#263)searchParams identity and reflect mutations across deopt (#276)Last-Modified and ETag conditional caching (#269)Cache-Control via maxAge/immutable (#273)batch option (#274)file:// entry in loader and node-level TLS in mtls (#231)x-forwarded-* hop-aware, right-to-left (#229)reusePort option (#258)next to connect-style middleware on the synthetic bridge path (#259)FastResponse init headers instead of adopting them (#263)searchParams identity and reflect mutations across deopt (#276)*Middleware / *Plugin (#278)Add trustProxy option ( #223 ) ( docs )
node: Do not mutate raw req.url on pathname change
node: Fast header lookups and fewer per-request allocations
maxRequestBodySize server option (#216) (docs)
maxRequestBodySize server option (#216)compare changes ### 🩹 Fixes - bun, deno: Unwrap NodeResponse
node/web: Forward socket drain and handle aborted signals
FastURL to native parser for fragments and path encode-set chars (d384e41)node: Flatten writeHead headers on Deno
TypeOfService utils to socker impl (945fc17)TypeOfService utils to socker impl (945fc17)node/web: Do not swallow getReader errors
node: Handle EADDRINUSE port conflict on serve
url: Deopt absolute URIs in FastURL
node: Improve pipeBody stability and performance
pipeBody stability and performance (4051f22)node: Handle duck-typed pipe objects in pipeBody (5e731ef, f746e79)
pipeBody (5e731ef)pipeBody (f746e79)node: Handle error and abort propagation for piped Node.js streams
entries() iterator (4ed7453)static: Use path separator instead of hardcoded slash
node: Validate host header (7c8c962) (thanks @hibwyli for reporting ❤️)
loader: Access to the whole intercepted srvx instance
bunny: Add support for native waitUntil
waitUntil (#186)compare changes ### 🚀 Enhancements - Expose server.waitUntil (#183) - Add bunny adapter (#182) ### ❤️ Contributors - Sandro Circi (@sandros94) - Rihan
loader: Intercept nested srvx.serve()
srvx.serve() (#181)Avoid process.exit after graceful server close
process.exit after graceful server close (#179)FastResponse when cloning (#177)tracing: Rename tracing channel h3.fetch to h3.request
h3.fetch to h3.request (#176)h3.fetch to h3.request (#176)cli: Enable graceful shutdown only for prod
srvx CLI can now fetch ANY server handler (even express!) without listening on a port.
srvx fetch|curlsrvx CLI can now fetch ANY server handler (even express!) without listening on a port.
$ npx srvx curl -v /
<img width="890" height="385" alt="image" src="https://github.com/user-attachments/assets/95fd2b0f-7f00-4e0a-a603-4aae3ddeea0c" />
srvx automatically searches for server entry (server.ts|js) and loads it. If it is a Node.js server, HTTP listener will be automatically mocked and handler will be converted to Web format. Both input and output streams are streamed to and from the console.
You can also fetch any external URL with the new CLI. It will add Accept: text/markdown header by default to allow better content negotiation in CLI, suitable for coding agents. (example: npx srvx curl v3.nitro.build/docs/quick-start)
[!TIP] Use
npx srvx --helpor check cli docs for more info.
CLI implementation has been rewritten with backwards compatibility.
You can use new srvx serve [--dir] [--entry] syntax to specify server directory and entry.
We have extracted CLI loader functionality to srvx/loader, you can load ANY server entry with same CLI DX and manually .fetch it!
You can also use cliFetch and main from srvx/cli to make a fully customized and branded CLI with same features and DX that srvx has!
Srvx now has full support for AWS Lambda Handlers (API Gateway v1 and v2) with optional streaming support.
You can convert a fetchable handler (like H3 or Hono) to AWS Lambda Handler or invoke an AWS Lambda Handler using standard Request and Response (useful for testing).
Check out the docs for more info: https://srvx.h3.dev/guide/aws-lambda
This feature has been backported from Nitro v3 (❤️ thanks to @OskarLebuda).
srvx fetch|curl and cliFetch (#169, #174, 98b35cc, 17e115b, 169e26f, 20796e2)loadServerEntry (#168, #173)aws-lambda adapter and utils (#104)req.rawBody: Buffer support in google cloud functions (#166)server.address() in programmatic mode (c9bb7c6)gracefulShutdown only in production mode (85cce89)req.rawBody: Buffer in google cloud functions (#166)loadServerEntry (#168)srvx fetch (#169)cliFetch util (#174)cliFetch (98b35cc)srvx curl alias (169e26f)aws-lambda adapter and utils (#104)gracefulShutdown only in production mode (85cce89)mod (a2a65fa)server.address() in programmatic mode (c9bb7c6)localhost as default hostname (716408f)H alias (7dce970)Support force close with double Control+C
> This release updates the Node.js adapter to avoid doing any global patches by default.
[!IMPORTANT] This release updates the Node.js adapter to avoid doing any global patches by default.
As a result, in some use-cases like
new Request(req), you might see an error likeCannot read private member #state....You can explicitly opt-in to previous behavior like this:
import { patchGlobalRequest } from "srvx/node"; // Fix compatibility issues with Node.js Request patchGlobalRequest();Please refer to the docs for more info.
_request type (ddc4ac3)Experimental tracing channel support
node: Fix instanceof checks for extended Request class
request: Use unique global cache key
node, deno, bun: Validate server port range
waitUntil (ef71acd)Handle non promise and promise-like values for waitUntil
waitUntil (ef71acd)node, deno, bun: Graceful shutdown (#136, 51dbad2)
SERVER_SHUTDOWN_TIMEOUT and SERVER_FORCE_SHUTDOWN_TIMEOUT env variables (00454db)Lazy inherit property symbols too
(this release fixes the published dist) see v0.9 for release notes.
(this release fixes the published dist) see v0.9 for release notes.
fetchNodeHandler and toWebHandler
fetchNodeHandler and toWebHandler (#125)toNodeHandler / toFetchHandler (#130)Symbol.hasInstance for all super classes (529b11b)Set-Cookie value (#127)fetchNodeHandler and nodeToFetchHandler (#125)toNodeHandler / toFetchHandler utils (#130)Symbol.hasInstance for all super classes (529b11b)Set-Cookie value (#127)toWebHandler (3124480)toFetchHandler (84fa36e)Set-Cookie value (#127)cli: Correct middleware entry spread in serve function
Avoid inheriting constructor props
constructor props (3ecb746)Request after patching (c7e7b7f)static: Support custom html renderer
node: Sync FastURL pathname changes back to node req.url
FastURL pathname changes back to node req.url (#118)Safer access to process.getBuiltinModule
node: Support absolute paths in request line
cli: Ensure child process is killed on exit
node: Safer global Request patch
node: Rewrite NodeRequest (#109, d1a148b, d95ccb7)
req.runtime (d1a148b)NodeRequest wrapper (#109)node: imports (d95ccb7)async keyword (#107)Declare optional ServerRequest.context
cli: Support Node.js and Express handlers
--import for custom loader (#99)server/index and jsx to defaults (7c65bd2)NODE_ENV if not set before serve (cfbb3d6)--import for custom loader (#99)server/index and jsx to defaults (7c65bd2)NODE_ENV if not set before serve (cfbb3d6)Your coding agent can read these notes before it upgrades. Set up the MCP server →