v25.7.0

nodejs/nodev25.7.0Feb 24, 2026by ruyadorno

AI Summary

A minor release adding HTTP/1 fallback configuration for HTTP/2, ESM support in SEA, and stream type renaming.

Key Highlights

  • HTTP/2: Add `http1Options` for HTTP/1 fallback configuration.
  • SEA: Support ESM entry point.
  • Stream: Rename `Duplex.toWeb()` type option to `readableType`.
  • Test Runner: Show interrupted test on SIGINT.
  • Zlib: Add support for brotli compression dictionary.

New Features

  • HTTP/2 http1Options configuration
  • SEA ESM entry point support
  • Stream readableType option
  • Test runner SIGINT interruption handling

Full Release Notes




### Notable Changes

* \[[`b0a79b10f0`](https://github.com/nodejs/node/commit/b0a79b10f0)] - **(SEMVER-MINOR)** **http2**: add http1Options for HTTP/1 fallback configuration (Amol Yadav) [#61713](https://github.com/nodejs/node/pull/61713)
* \[[`2d874dfb8e`](https://github.com/nodejs/node/commit/2d874dfb8e)] - **(SEMVER-MINOR)** **sea**: support ESM entry point in SEA (Joyee Cheung) [#61813](https://github.com/nodejs/node/pull/61813)
* \[[`ee59127664`](https://github.com/nodejs/node/commit/ee59127664)] - **sqlite**: mark as release candidate (Matteo Collina) [#61262](https://github.com/nodejs/node/pull/61262)
* \[[`608736e19e`](https://github.com/nodejs/node/commit/608736e19e)] - **(SEMVER-MINOR)** **stream**: rename `Duplex.toWeb()` type option to `readableType` (René) [#61632](https://github.com/nodejs/node/pull/61632)
* \[[`a43375999f`](https://github.com/nodejs/node/commit/a43375999f)] - **(SEMVER-MINOR)** **test\_runner**: show interrupted test on SIGINT (Matteo Collina) [#61676](https://github.com/nodejs/node/pull/61676)

### Commits

* \[[`ab4375e141`](https://github.com/nodejs/node/commit/ab4375e141)] - **benchmark**: add startup benchmark for ESM entrypoint (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769)
* \[[`8d83d8026b`](https://github.com/nodejs/node/commit/8d83d8026b)] - **build**: add temporal test on GHA windows (Chengzhong Wu) [#61810](https://github.com/nodejs/node/pull/61810)
* \[[`aab153eec3`](https://github.com/nodejs/node/commit/aab153eec3)] - **build**: skip sscache action on non-main branches (Joyee Cheung) [#61790](https://github.com/nodejs/node/pull/61790)
* \[[`9e40fb93bc`](https://github.com/nodejs/node/commit/9e40fb93bc)] - **build**: use path-ignore in GHA coverage-windows.yml (Chengzhong Wu) [#61811](https://github.com/nodejs/node/pull/61811)
* \[[`4896653361`](https://github.com/nodejs/node/commit/4896653361)] - **build**: generate\_config\_gypi.py generates valid JSON (Shelley Vohr) [#61791](https://github.com/nodejs/node/pull/61791)
* \[[`bb82b44de0`](https://github.com/nodejs/node/commit/bb82b44de0)] - **build**: build with v8 gdbjit support on supported platform (Joyee Cheung) [#61010](https://github.com/nodejs/node/pull/61010)
* \[[`e7173a093a`](https://github.com/nodejs/node/commit/e7173a093a)] - **build**: show cc outputs when version detection failed (Chengzhong Wu) [#61700](https://github.com/nodejs/node/pull/61700)
* \[[`848050d38f`](https://github.com/nodejs/node/commit/848050d38f)] - **build,win**: add WinGet Visual Studio 2022 Build Tools Edition config (Mike McCready) [#61652](https://github.com/nodejs/node/pull/61652)
* \[[`938841e1cd`](https://github.com/nodejs/node/commit/938841e1cd)] - **crypto**: always return certificate serial numbers as uppercase (Anna Henningsen) [#61752](https://github.com/nodejs/node/pull/61752)
* \[[`dba9001d6f`](https://github.com/nodejs/node/commit/dba9001d6f)] - **deps**: upgrade npm to 11.10.1 (npm team) [#61892](https://github.com/nodejs/node/pull/61892)
* \[[`75c8e18d2f`](https://github.com/nodejs/node/commit/75c8e18d2f)] - **deps**: update nbytes to 0.1.3 (Node.js GitHub Bot) [#61879](https://github.com/nodejs/node/pull/61879)
* \[[`4ca1597f25`](https://github.com/nodejs/node/commit/4ca1597f25)] - **deps**: remove stale OpenSSL arch configs (René) [#61834](https://github.com/nodejs/node/pull/61834)
* \[[`c4f298c729`](https://github.com/nodejs/node/commit/c4f298c729)] - **deps**: update llhttp to 9.3.1 (Node.js GitHub Bot) [#61827](https://github.com/nodejs/node/pull/61827)
* \[[`7d63a2df93`](https://github.com/nodejs/node/commit/7d63a2df93)] - **deps**: V8: cherry-pick 64b36b441179 (Rafael Magrin) [#61712](https://github.com/nodejs/node/pull/61712)
* \[[`241a6b7088`](https://github.com/nodejs/node/commit/241a6b7088)] - **deps**: update googletest to 5a9c3f9e8d9b90bbbe8feb32902146cb8f7c1757 (Node.js GitHub Bot) [#61731](https://github.com/nodejs/node/pull/61731)
* \[[`eec896c0e0`](https://github.com/nodejs/node/commit/eec896c0e0)] - **deps**: V8: backport 6a0a25abaed3 (Vivian Wang) [#61666](https://github.com/nodejs/node/pull/61666)
* \[[`5a9874af09`](https://github.com/nodejs/node/commit/5a9874af09)] - **doc**: clarify status of feature request issues (Antoine du Hamel) [#61505](https://github.com/nodejs/node/pull/61505)
* \[[`0648ac64aa`](https://github.com/nodejs/node/commit/0648ac64aa)] - **doc**: add esm and cjs examples to node:vm (Alfredo González) [#61498](https://github.com/nodejs/node/pull/61498)
* \[[`8b38718294`](https://github.com/nodejs/node/commit/8b38718294)] - **doc**: clarify build environment is trusted in threat model (Matteo Collina) [#61865](https://github.com/nodejs/node/pull/61865)
* \[[`10e86818ee`](https://github.com/nodejs/node/commit/10e86818ee)] - **doc**: remove incorrect mention of `module` in `typescript.md` (Rob Palmer) [#61839](https://github.com/nodejs/node/pull/61839)
* \[[`b50376f527`](https://github.com/nodejs/node/commit/b50376f527)] - **doc**: simplify addAbortListener example (Chemi Atlow) [#61842](https://github.com/nodejs/node/pull/61842)
* \[[`dea0e7a856`](https://github.com/nodejs/node/commit/dea0e7a856)] - **doc**: fix typo in --disable-wasm-trap-handler description (Dmytro Semchuk) [#61820](https://github.com/nodejs/node/pull/61820)
* \[[`57ac1f5aa0`](https://github.com/nodejs/node/commit/57ac1f5aa0)] - **doc**: clean up globals.md (René) [#61822](https://github.com/nodejs/node/pull/61822)
* \[[`4c30d2bb4d`](https://github.com/nodejs/node/commit/4c30d2bb4d)] - **doc**: remove obsolete Boxstarter automated install (Mike McCready) [#61785](https://github.com/nodejs/node/pull/61785)
* \[[`db610b9e32`](https://github.com/nodejs/node/commit/db610b9e32)] - **doc**: clarify async caveats for `events.once()` (René) [#61572](https://github.com/nodejs/node/pull/61572)
* \[[`b4a826b11c`](https://github.com/nodejs/node/commit/b4a826b11c)] - **doc**: update Juan's security steward info (Juan José) [#61754](https://github.com/nodejs/node/pull/61754)
* \[[`7d9cc5dc54`](https://github.com/nodejs/node/commit/7d9cc5dc54)] - **doc**: fix methods being documented as properties in `process.md` (Antoine du Hamel) [#61765](https://github.com/nodejs/node/pull/61765)
* \[[`aa0362c26a`](https://github.com/nodejs/node/commit/aa0362c26a)] - **doc**: add riscv64 info into platform list (Lu Yahan) [#42251](https://github.com/nodejs/node/pull/42251)
* \[[`9b0101b65b`](https://github.com/nodejs/node/commit/9b0101b65b)] - **doc**: fix dropdown menu being obscured at <600px due to stacking context (Jeff) [#61735](https://github.com/nodejs/node/pull/61735)
* \[[`df2c65b3e4`](https://github.com/nodejs/node/commit/df2c65b3e4)] - **doc**: fix spacing in process message event (Aviv Keller) [#61756](https://github.com/nodejs/node/pull/61756)
* \[[`01018559f5`](https://github.com/nodejs/node/commit/01018559f5)] - **doc**: move describe/it aliases section before expectFailure (Luca Raveri) [#61567](https://github.com/nodejs/node/pull/61567)
* \[[`49443583af`](https://github.com/nodejs/node/commit/49443583af)] - **doc**: fix broken links of net.md (YuSheng Chen) [#61673](https://github.com/nodejs/node/pull/61673)
* \[[`af7c927a2a`](https://github.com/nodejs/node/commit/af7c927a2a)] - **doc**: clean up Windows code snippet in `child_process.md` (reillylm) [#61422](https://github.com/nodejs/node/pull/61422)
* \[[`221648a687`](https://github.com/nodejs/node/commit/221648a687)] - **esm**: update outdated FIXME comment in translators.js (Karan Mangtani) [#61715](https://github.com/nodejs/node/pull/61715)
* \[[`4484e14a31`](https://github.com/nodejs/node/commit/4484e14a31)] - **events**: don't call resume after close (Сковорода Никита Андреевич) [#60548](https://github.com/nodejs/node/pull/60548)
* \[[`4cecbe1f53`](https://github.com/nodejs/node/commit/4cecbe1f53)] - **fs**: add `throwIfNoEntry` option for fs.stat and fs.promises.stat (Juan José) [#61178](https://github.com/nodejs/node/pull/61178)
* \[[`2c94967684`](https://github.com/nodejs/node/commit/2c94967684)] - **http**: remove redundant keepAliveTimeoutBuffer assignment (Efe) [#61743](https://github.com/nodejs/node/pull/61743)
* \[[`435f3dd8e4`](https://github.com/nodejs/node/commit/435f3dd8e4)] - **http**: attach error handler to socket synchronously in onSocket (RajeshKumar11) [#61770](https://github.com/nodejs/node/pull/61770)
* \[[`ce0ebd853d`](https://github.com/nodejs/node/commit/ce0ebd853d)] - **http**: fix keep-alive socket reuse race in requestOnFinish (Martin Slota) [#61710](https://github.com/nodejs/node/pull/61710)
* \[[`8103a78b6a`](https://github.com/nodejs/node/commit/8103a78b6a)] - **http2**: add strictSingleValueFields option to relax header validation (Tim Perry) [#59917](https://github.com/nodejs/node/pull/59917)
* \[[`b0a79b10f0`](https://github.com/nodejs/node/commit/b0a79b10f0)] - **(SEMVER-MINOR)** **http2**: add http1Options for HTTP/1 fallback configuration (Amol Yadav) [#61713](https://github.com/nodejs/node/pull/61713)
* \[[`c589b6b23c`](https://github.com/nodejs/node/commit/c589b6b23c)] - **http2**: fix FileHandle leak in respondWithFile (sangwook) [#61707](https://github.com/nodejs/node/pull/61707)
* \[[`df477202ae`](https://github.com/nodejs/node/commit/df477202ae)] - **lib**: reduce cycles in esm loader and load it in snapshot (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769)
* \[[`deda50a819`](https://github.com/nodejs/node/commit/deda50a819)] - **lib**: remove top-level getOptionValue() calls in lib/internal/modules (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769)
* \[[`b1c1ddff79`](https://github.com/nodejs/node/commit/b1c1ddff79)] - **lib**: optimize styleText when validateStream is false (Rafael Gonzaga) [#61792](https://github.com/nodejs/node/pull/61792)
* \[[`df334f7fa0`](https://github.com/nodejs/node/commit/df334f7fa0)] - **meta**: use SCCACHE\_GHA\_ENABLED for shared build workflows (René) [#61640](https://github.com/nodejs/node/pull/61640)
* \[[`e1b2cd605f`](https://github.com/nodejs/node/commit/e1b2cd605f)] - **meta**: bump cachix/install-nix-action from 31.9.0 to 31.9.1 (dependabot\[bot]) [#61910](https://github.com/nodejs/node/pull/61910)
* \[[`24b858547a`](https://github.com/nodejs/node/commit/24b858547a)] - **module**: fix extensionless entry with explicit type=commonjs (Yuya Inoue) [#61600](https://github.com/nodejs/node/pull/61600)
* \[[`4f2f8006bd`](https://github.com/nodejs/node/commit/4f2f8006bd)] - **repl**: fix FileHandle leak in history initialization (sangwook) [#61706](https://github.com/nodejs/node/pull/61706)
* \[[`2d874dfb8e`](https://github.com/nodejs/node/commit/2d874dfb8e)] - **(SEMVER-MINOR)** **sea**: support ESM entry point in SEA (Joyee Cheung) [#61813](https://github.com/nodejs/node/pull/61813)
* \[[`ee59127664`](https://github.com/nodejs/node/commit/ee59127664)] - **sqlite**: mark as release candidate (Matteo Collina) [#61262](https://github.com/nodejs/node/pull/61262)
* \[[`f14ff14473`](https://github.com/nodejs/node/commit/f14ff14473)] - **src**: remove unnecessary `c_str()` conversions in diagnostic messages (Anna Henningsen) [#61786](https://github.com/nodejs/node/pull/61786)
* \[[`26a09e541d`](https://github.com/nodejs/node/commit/26a09e541d)] - **src**: use bool literals in TraceEnvVarOptions (Tobias Nießen) [#61425](https://github.com/nodejs/node/pull/61425)
* \[[`62b0758c47`](https://github.com/nodejs/node/commit/62b0758c47)] - **src**: fix `--build-sea` default executable path (Alex Schwartz) [#61708](https://github.com/nodejs/node/pull/61708)
* \[[`b5724921b1`](https://github.com/nodejs/node/commit/b5724921b1)] - **src**: track allocations made by zstd streams (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717)
* \[[`3d1d1523a5`](https://github.com/nodejs/node/commit/3d1d1523a5)] - **src**: do not store compression methods on Brotli classes (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717)
* \[[`b2915cda77`](https://github.com/nodejs/node/commit/b2915cda77)] - **src**: extract zlib allocation tracking into its own class (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717)
* \[[`3032a7e3c6`](https://github.com/nodejs/node/commit/3032a7e3c6)] - **src**: release memory for zstd contexts in `Close()` (Anna Henningsen) [#61717](https://github.com/nodejs/node/pull/61717)
* \[[`bc2287db74`](https://github.com/nodejs/node/commit/bc2287db74)] - **src**: add more checks and clarify docs for external references (Joyee Cheung) [#61719](https://github.com/nodejs/node/pull/61719)
* \[[`5daf282e33`](https://github.com/nodejs/node/commit/5daf282e33)] - **src**: fix cjs\_lexer external reference registration (Joyee Cheung) [#61718](https://github.com/nodejs/node/pull/61718)
* \[[`fb2db5f947`](https://github.com/nodejs/node/commit/fb2db5f947)] - **src**: support import() and import.meta in embedder-run modules (Joyee Cheung) [#61654](https://github.com/nodejs/node/pull/61654)
* \[[`e146591002`](https://github.com/nodejs/node/commit/e146591002)] - **stream**: fix decoded fromList chunk boundary check (Thomas Watson) [#61884](https://github.com/nodejs/node/pull/61884)
* \[[`065200a5f0`](https://github.com/nodejs/node/commit/065200a5f0)] - **stream**: add fast paths for webstreams read and pipeTo (Matteo Collina) [#61807](https://github.com/nodejs/node/pull/61807)
* \[[`608736e19e`](https://github.com/nodejs/node/commit/608736e19e)] - **(SEMVER-MINOR)** **stream**: rename `Duplex.toWeb()` type option to `readableType` (René) [#61632](https://github.com/nodejs/node/pull/61632)
* \[[`51587d684d`](https://github.com/nodejs/node/commit/51587d684d)] - **test**: fix typos in test files (Daijiro Wachi) [#61408](https://github.com/nodejs/node/pull/61408)
* \[[`17b2361360`](https://github.com/nodejs/node/commit/17b2361360)] - **test**: allow filtering async internal frames in assertSnapshot (Joyee Cheung) [#61769](https://github.com/nodejs/node/pull/61769)
* \[[`3f6a5f5f7f`](https://github.com/nodejs/node/commit/3f6a5f5f7f)] - **test**: unify assertSnapshot stacktrace transform (Chengzhong Wu) [#61665](https://github.com/nodejs/node/pull/61665)
* \[[`c8dac320de`](https://github.com/nodejs/node/commit/c8dac320de)] - **test**: check stability block position in API markdown (René) [#58590](https://github.com/nodejs/node/pull/58590)
* \[[`6809ef8d04`](https://github.com/nodejs/node/commit/6809ef8d04)] - **test**: adapt buffer test for v8 sandbox (Shelley Vohr) [#61772](https://github.com/nodejs/node/pull/61772)
* \[[`60f5771a74`](https://github.com/nodejs/node/commit/60f5771a74)] - **test**: update FileAPI tests from WPT (Ms2ger) [#61750](https://github.com/nodejs/node/pull/61750)
* \[[`d2fef4a31a`](https://github.com/nodejs/node/commit/d2fef4a31a)] - **test**: update WPT for WebCryptoAPI to 7cbe7e8ed9 (Node.js GitHub Bot) [#61729](https://github.com/nodejs/node/pull/61729)
* \[[`d7a87f14da`](https://github.com/nodejs/node/commit/d7a87f14da)] - **test**: update WPT for url to efb889eb4c (Node.js GitHub Bot) [#61728](https://github.com/nodejs/node/pull/61728)
* \[[`b6ae1fc4b8`](https://github.com/nodejs/node/commit/b6ae1fc4b8)] - **test**: split test-embedding.js and run tests in parallel (Joyee Cheung) [#61571](https://github.com/nodejs/node/pull/61571)
* \[[`a43375999f`](https://github.com/nodejs/node/commit/a43375999f)] - **(SEMVER-MINOR)** **test\_runner**: show interrupted test on SIGINT (Matteo Collina) [#61676](https://github.com/nodejs/node/pull/61676)
* \[[`1c02aa09b0`](https://github.com/nodejs/node/commit/1c02aa09b0)] - **test\_runner**: fix suite rerun (Moshe Atlow) [#61775](https://github.com/nodejs/node/pull/61775)
* \[[`47821ec609`](https://github.com/nodejs/node/commit/47821ec609)] - **tools**: switch to ARM runners on GHA jobs (Antoine du Hamel) [#61903](https://github.com/nodejs/node/pull/61903)
* \[[`1630a56370`](https://github.com/nodejs/node/commit/1630a56370)] - **tools**: avoid building twice in coverage jobs (Antoine du Hamel) [#61899](https://github.com/nodejs/node/pull/61899)
* \[[`89318b0a02`](https://github.com/nodejs/node/commit/89318b0a02)] - **tools**: fix auto-start-ci (Antoine du Hamel) [#61900](https://github.com/nodejs/node/pull/61900)
* \[[`ee107f5e84`](https://github.com/nodejs/node/commit/ee107f5e84)] - **tools**: do not checkout repo in `auto-start-ci.yml` (Antoine du Hamel) [#61874](https://github.com/nodejs/node/pull/61874)
* \[[`c2de1fa619`](https://github.com/nodejs/node/commit/c2de1fa619)] - **tools**: cache V8 build on test-shared workflow (Antoine du Hamel) [#61860](https://github.com/nodejs/node/pull/61860)
* \[[`111c77ec94`](https://github.com/nodejs/node/commit/111c77ec94)] - **tools**: automate updates for test/fixtures/test426 (Rich Trott) [#60978](https://github.com/nodejs/node/pull/60978)
* \[[`ea8886f7d5`](https://github.com/nodejs/node/commit/ea8886f7d5)] - **tools**: use ubuntu-slim runner in GHA (Antoine du Hamel) [#61759](https://github.com/nodejs/node/pull/61759)
* \[[`9db82ba786`](https://github.com/nodejs/node/commit/9db82ba786)] - **tools**: bump unist-util-visit in /tools/doc in the doc group (dependabot\[bot]) [#61646](https://github.com/nodejs/node/pull/61646)
* \[[`c8e58c56b9`](https://github.com/nodejs/node/commit/c8e58c56b9)] - **tools**: bump the eslint group in /tools/eslint with 6 updates (dependabot\[bot]) [#61628](https://github.com/nodejs/node/pull/61628)
* \[[`2518ec77e8`](https://github.com/nodejs/node/commit/2518ec77e8)] - **tools**: use ubuntu-slim runner in GHA (Antoine du Hamel) [#61734](https://github.com/nodejs/node/pull/61734)
* \[[`c5ad2beba3`](https://github.com/nodejs/node/commit/c5ad2beba3)] - **tools**: fix small inconsistencies in JSON doc output (Antoine du Hamel) [#61757](https://github.com/nodejs/node/pull/61757)
* \[[`a9f90bee0a`](https://github.com/nodejs/node/commit/a9f90bee0a)] - **tools**: use ubuntu-latest runner in `notify-on-push` workflow (Antoine du Hamel) [#61742](https://github.com/nodejs/node/pull/61742)
* \[[`30e38182d9`](https://github.com/nodejs/node/commit/30e38182d9)] - **watch**: get flags from execArgv (Efe) [#61779](https://github.com/nodejs/node/pull/61779)
* \[[`da1a08a3a5`](https://github.com/nodejs/node/commit/da1a08a3a5)] - **worker**: eliminate race condition in process.cwd() (giulioAZ) [#61664](https://github.com/nodejs/node/pull/61664)
* \[[`dfac82a235`](https://github.com/nodejs/node/commit/dfac82a235)] - **zlib**: add support for brotli compression dictionary (Andy Weiss) [#61763](https://github.com/nodejs/node/pull/61763)