# srvx changelog > srvx release notes. - Vendor: srvx - Category: Developer Tools - Official site: https://srvx.h3.dev/ - Tracked by: What's New (https://whatsnew.fyi/product/srvx) - Harvested from: GitHub (h3js/srvx) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### v0.12.2 - Date: 2026-07-22 - Version: v0.12.2 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.12.2 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.12.2 ###### 🚀 Enhancements - Export body size limit helpers via `srvx/body-limit` ([#280](https://github.com/h3js/srvx/pull/280)) ([docs](https://srvx.h3.dev/guide/body-limit)) ### v0.12.0 - Date: 2026-07-21 - Version: v0.12.0 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.12.0 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.12.0 [compare changes](https://github.com/h3js/srvx/compare/v0.11.22...v0.12.0) ###### 🚀 Enhancements - **static:** ⚠️ Security hardenings and general improvements ([#252](https://github.com/h3js/srvx/pull/252)) - **static:** Add `Last-Modified` and `ETag` conditional caching ([#269](https://github.com/h3js/srvx/pull/269)) - **static:** Add opt-in `Cache-Control` via `maxAge`/`immutable` ([#273](https://github.com/h3js/srvx/pull/273)) - **static:** Add byte-range request support ([#275](https://github.com/h3js/srvx/pull/275)) ###### 🔥 Performance - **middleware:** Precompose the middleware chain at construction time ([#264](https://github.com/h3js/srvx/pull/264)) - **log:** Batch stdout writes and cache the timestamp ([#266](https://github.com/h3js/srvx/pull/266), [#274](https://github.com/h3js/srvx/pull/274)) ###### 💅 Refactors - ⚠️ Rename subpath exports to `*Middleware` / `*Plugin` ([#278](https://github.com/h3js/srvx/pull/278)) ###### 🩹 Fixes - **service-worker:** Call `respondWith` synchronously and drop extension bypass ([#226](https://github.com/h3js/srvx/pull/226)) - **node/web:** Correct body handling in `toFetchHandler` compat layer ([#232](https://github.com/h3js/srvx/pull/232)) - Handle `file://` entry in loader and node-level TLS in mtls ([#231](https://github.com/h3js/srvx/pull/231)) - **node:** Prevent body-read crashes and wire corruption in the Node adapter ([#228](https://github.com/h3js/srvx/pull/228)) - Prevent `waitUntil` leak and reject `NaN` ports ([#225](https://github.com/h3js/srvx/pull/225)) - **cli:** Stabilization batch and add CLI test suite ([#234](https://github.com/h3js/srvx/pull/234)) - **url:** Repair `FastURL` origin-form string and HTTP/2 char normalization ([#227](https://github.com/h3js/srvx/pull/227)) - Resolve `x-forwarded-*` hop-aware, right-to-left ([#229](https://github.com/h3js/srvx/pull/229)) - **node:** Node adapter correctness fixes (`statusText`, empty body, HEAD streaming, send errors, sync bridge) ([#243](https://github.com/h3js/srvx/pull/243)) - **node:** Make `patchGlobalRequest` idempotent ([#255](https://github.com/h3js/srvx/pull/255)) - **node/web:** Remove "data" listener from the socket it was added to ([#261](https://github.com/h3js/srvx/pull/261)) - **node:** Guard already-destroyed streamBody cancel against unhandled rejection ([#257](https://github.com/h3js/srvx/pull/257)) - **node:** Enable `SO_REUSEPORT` for `reusePort` option ([#258](https://github.com/h3js/srvx/pull/258)) - **node:** Don't permanently cache a missed kNeedDrain symbol lookup ([#256](https://github.com/h3js/srvx/pull/256)) - **node:** Reject body reads after the body is consumed ([#254](https://github.com/h3js/srvx/pull/254)) - **node/web:** Supply `next` to connect-style middleware on the synthetic bridge path ([#259](https://github.com/h3js/srvx/pull/259)) - **node:** Answer 500 for unhandled handler errors ([#251](https://github.com/h3js/srvx/pull/251)) - **node:** Copy `FastResponse` init headers instead of adopting them ([#263](https://github.com/h3js/srvx/pull/263)) - **node:** Keep req.headers live and consistent across _request materialization ([#265](https://github.com/h3js/srvx/pull/265)) - **node/web:** Strip explicit Transfer-Encoding to avoid corrupting the bridged body ([#268](https://github.com/h3js/srvx/pull/268)) - **node/web:** Strip hop-by-hop headers from toWebResponse() ([#270](https://github.com/h3js/srvx/pull/270)) - **node/web:** Stream bridged responses instead of buffering until end() ([#248](https://github.com/h3js/srvx/pull/248), [#271](https://github.com/h3js/srvx/pull/271)) - **url:** Keep `searchParams` identity and reflect mutations across deopt ([#276](https://github.com/h3js/srvx/pull/276)) - Improve edge adapters and tests ([#242](https://github.com/h3js/srvx/pull/242)) ###### 📖 Documentation - Improvements ([#238](https://github.com/h3js/srvx/pull/238)) - Rename `onError` option to `error` ([#246](https: _[Truncated at 4000 characters — full notes: https://github.com/h3js/srvx/releases/tag/v0.12.0]_ ### v0.11.22 - Date: 2026-07-11 - Version: v0.11.22 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.22 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.22 [compare changes](https://github.com/h3js/srvx/compare/v0.11.21...main) ###### 🚀 Enhancements - Add `trustProxy` option ([#223](https://github.com/h3js/srvx/pull/223)) ([docs](https://srvx.h3.dev/guide/options#trustproxy)) - Add `mtls` plugin ([#213](https://github.com/h3js/srvx/pull/213)) ([docs](https://srvx.h3.dev/guide/tls#mutual-tls-mtls)) ###### 📝 Docs - Add missing aws stream docs, tests and example (https://github.com/h3js/srvx/pull/222) ([docs](https://srvx.h3.dev/guide/aws-lambda)) ###### ❤️ Contributors - Pooya Parsa (@pi0) - Sandro Circi (@sandros94) - Oskar Lebuda (@OskarLebuda) ### v0.11.21 - Date: 2026-07-04 - Version: v0.11.21 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.21 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.21 [compare changes](https://github.com/h3js/srvx/compare/v0.11.20...v0.11.21) ###### 🩹 Fixes - **node:** Do not mutate raw req.url on pathname change ([#220](https://github.com/h3js/srvx/pull/220)) ### v0.11.20 - Date: 2026-07-02 - Version: v0.11.20 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.20 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.20 [compare changes](https://github.com/h3js/srvx/compare/v0.11.19...v0.11.20) ###### 🔥 Performance - **node:** Fast header lookups and fewer per-request allocations ([#218](https://github.com/h3js/srvx/pull/218)) - **node:** Fire-and-forget response send on the serve() path ([#219](https://github.com/h3js/srvx/pull/219)) ### v0.11.19 - Date: 2026-07-02 - Version: v0.11.19 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.19 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.19 [compare changes](https://github.com/h3js/srvx/compare/v0.11.18...v0.11.19) ###### 🚀 Enhancements - `maxRequestBodySize` server option ([#216](https://github.com/h3js/srvx/pull/216)) ([docs](https://srvx.h3.dev/guide/options#maxrequestbodysize)) ###### 🩹 Fixes - **node:** Case-insensitive content-length/content-type dedup in FastResponse ([#214](https://github.com/h3js/srvx/pull/214)) - **url:** Deopt FastURL for query percent-encode-set chars (" ' < >) ([#215](https://github.com/h3js/srvx/pull/215)) - **node:** Read duplicate single-value headers from rawHeaders in get/has ([#217](https://github.com/h3js/srvx/pull/217)) ###### Types - **tracing:** Satisfy tracingChannel StoreType object constraint ([57001b6](https://github.com/h3js/srvx/commit/57001b6)) ### v0.11.18 - Date: 2026-06-30 - Version: v0.11.18 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.18 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.18 [compare changes](https://github.com/h3js/srvx/compare/v0.11.17...v0.11.18) ###### 🩹 Fixes - **bun, deno:** Unwrap `NodeResponse` ([b0dadda](https://github.com/h3js/srvx/commit/b0dadda)) ### v0.11.17 - Date: 2026-06-19 - Version: v0.11.17 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.17 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.17 [compare changes](https://github.com/h3js/srvx/compare/v0.11.16...v0.11.17) ###### 🩹 Fixes - **node/web:** Forward socket drain and handle aborted signals ([#209](https://github.com/h3js/srvx/pull/209)) - **node:** Keep body methods working when globalThis.Request is patched ([8d91ebe](https://github.com/h3js/srvx/commit/8d91ebe)) - **node:** Deopt `FastURL` to native parser for fragments and path encode-set chars ([d384e41](https://github.com/h3js/srvx/commit/d384e41)) ###### 📖 Documentation - **cli:** Document static file serving ([#210](https://github.com/h3js/srvx/pull/210)) ###### ❤️ Contributors - Pooya Parsa (@pi0) - Sébastien Chopin (@atinux) ### v0.11.16 - Date: 2026-05-22 - Version: v0.11.16 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.16 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.16 [compare changes](https://github.com/h3js/srvx/compare/v0.11.15...v0.11.16) ###### 🩹 Fixes - **node:** Flatten writeHead headers on Deno ([#203](https://github.com/h3js/srvx/pull/203)) - **aws-lambda-streaming:** Handle empty body ([#205](https://github.com/h3js/srvx/pull/205)) - **node:** Do not crash on asterisk-form request targets ([#206](https://github.com/h3js/srvx/pull/206)) ###### 💅 Refactors - **node/web:** Add new `TypeOfService` utils to socker impl ([945fc17](https://github.com/h3js/srvx/commit/945fc17)) ###### ❤️ Contributors - Taylor Steele (@taylorfsteele) - Pooya Parsa (@pi0) - KT (@ktKongTong) ### v0.11.15 - Date: 2026-04-03 - Version: v0.11.15 - Original notes: https://github.com/h3js/srvx/releases/tag/v0.11.15 - Permalink: https://whatsnew.fyi/product/srvx/releases/v0.11.15 [compare changes](https://github.com/h3js/srvx/compare/v0.11.14...v0.11.15) ###### 🩹 Fixes - **node/web:** Do not swallow `getReader` errors ([#199](https://github.com/h3js/srvx/pull/199)) ###### ❤️ Contributors - Joël Charles (@magne4000)