## nodejs/node — v26.8.2…v26.9.0

_210+ commits._

### Features
- **tools: add GHA workflow to test vendored Perfetto** (2266c14)
- **lib: improve diagnostic message support** (aae83d8)
- **lib: add runFile api to node:bench** (55103db)
- **lib: add context.diagnostic api to node:bench** (0a4c50e)
- **lib: add `bench:plan` event to `node:bench`** (476e25e)
- **lib: add runId, fileRunId, entryFile, namePath to node:bench** (b32b09f)
- **typings: add types for performance binding** (b57db8d)
- **lib: add `node:bench` explicit createRunner** (4b9b53f)
- **perf_hooks: add missing resource timing attributes** (09b333b)
- **crypto: add strict mode to --force-fips** (3fd905e)
- **crypto: add FIPS indicator diagnostics channel** (54b3cdb)
- **vfs: add ZipProvider** (b4f6b37)
- **v8: add setHeapProfileNearHeapLimit** (acd2bb1)
- **permission: support URL and Uint8Array as has()/drop() reference** (19e69e5)
- **src: add re-entrancy guard to TriggerUncaughtException** (2fd50ae)
- **src: add missing vector include** (0650dca)
- **worker: add ref/unref to web workers** (56144ea)
- **benchmark: add --analyze option to benchmark/scatter.js** (49d4009)
- **typings: add encodeIntoResults to EncodingBinding** (371e226)
- **crypto: add a generic MAC API** (d414624)

### Fixes
- **http2: fix write deadlock exposed by larger window sizes** (b4a7cd3)
- **stream: fix nested async flushing with infinite sources** (2322099)
- **crypto: fix multi-prime RSA JWKs** (2f494cb)
- **src: fix use-after-free in CleanupHookThunkRun** (f66ed89)
- **net: fix BlockList.fromJSON for IPv4-mapped IPv6 rules** (c93a90c)
- **vfs: fix rename over non-empty directory** (ea6f70b)
- **src: fix startup snapshot reproducibility of InternalFieldInfo** (6db3f66)
- **stream: fix merge settlement tagging and falsy error tracking** (3060690)
- **src: fix live lock between environments with blocked requests** (760337a)
- **fs: fix recursive watch error handling** (d418ca1)
- **stream: fix early drain after Utf8Stream reopen** (dfe0617)
- **crypto: fix public PKCS8 export error** (3e6e931)
- **benchmark: fix max-regressions detection in compare.js** (6bdb6dd)
- **events: fix weak listener retention overwrite** (ed1b629)

### Backend
- **2026-09-16, Version 26.9.0 (Current)** (b469d3f)
- **deps: update googletest to 283c17563fe7a1111cd7f581aa5d541e8baeff2f** (0539e90)
- **deps: update simdjson to 4.6.11** (e34af82)
- **deps: update zlib to 1.3.2.1-motley-285e94b** (5fb7ffe)
- **lib: put node:bench behind an --experimental-bench flag** (bea74e1)
- **http2: error for incomplete reads on RST, auto-drain, deprecate aborted** (b7e97f6)
- **deps: V8: backport 1a0089053443** (05cdf1d)
- **deps: V8: backport c9c0abfa51f0** (8910f79)
- **deps: V8: backport ebd15783b7ba** (e7fd388)
- **fs: copy directory trees for fs.cp() on the thread pool** (5d24a8f)
- **fs: give directories created by cpSync the source directory's mode** (40bdf32)
- **quic: stop guarding ngtcp2_recv_stop_sending callback field** (855fff6)
- **ffi: throw on missing memory helper arguments** (7b4c17f)
- **stream: use webidl validation semantics for args** (76538d5)
- **stream: ensure that stateful transforms preserve this** (649a4ab)
- **stream: ensure from() observes returned rejecting promise correctly** (3ad1338)
- **stream: apply source normalization once at call time** (cafdee6)
- **stream: make consumer signals on longer alter source precedence** (edb83cb)
- **stream: make pipeTo source normalization independent of Writer** (56bdd76)
- **stream: pre-aborted pipeTo now applies dest failure handling** (037c07a)
- **stream: ensure pre-existing writes drain before EOF and end() waits** (7308492)
- **stream: ensure async dispoal after endSync awaits for drain** (7567734)
- **stream: ensure factory signals remain active through closing** (042b951)
- **stream: canWrite and ondrain now reflect physical capacity** (2dc09ca)
- **lib: fixup node:bench handling of --require option** (2835523)
- **lib,benchmark: address multiple review issues** (c07b2ab)
- **lib: have runFile honor permissions and accept URL/Buffer paths** (ba7baed)
- **doc: clarify node:bench significance policy** (a97def7)
- **doc: clarify isolation modes for node:bench** (c740916)
- **doc: clarify measurement integrity details of node:bench** (3ef81a6)
- **lib: clarify mean in node:bench docs** (67cf0e5)
- **lib: improve node:bench stream handling** (f85f72a)
- **permission: do not enforce fs and addons in audit mode** (67a7831)
- **stream: skip unobserved 'readable' emission at EOF** (9192fbb)
- **vfs: load native addons from a mounted file system** (d0535b1)
- **http: fast-forward teardown of unread messages** (e3cc0d9)
- **worker: start worker threads from the built-in snapshot** (3819212)
- **crypto: cache valid ECDH key pairs** (501d8ac)
- **ffi: include SharedArrayBuffer in error message** (cf78d42)
- **stream: avoid per-chunk promises in webstream adapters** (dc25a61)
- **errors: validate constructor name** (6b84ee6)
- **src: fixup histogram and options linting issues** (14613fd)
- **benchmark: implement node:bench version of bench tools** (59dcad3)
- **lib: complete the implementation of node:bench and cli** (d9f1817)
- **lib: implement bench/reporters** (c39e20e)
- **lib: implement node:bench** (657415c)
- **perf_hooks: implement Histogram meanCI API** (ebcfec2)
- **sqlite: re-validate database state after reading options** (1627fd6)
- **fs: write files in one thread pool round trip** (6ac1bc0)
- **https: limit proxy CONNECT response headers** (8aba314)
- **sea: mount bundled assets as a virtual file system** (4876627)
- **lib: use `Float16Array` from primordials** (46863a7)
- **deps: V8: backport f3d4d458fe59** (8271515)
- **fs: handle recursive watch setup races** (b4b89c0)
- **fs: apply nocase to literal glob exclude patterns** (54a1311)
- **buffer: pad aligned allocations by a multiple of 8** (6bff223)
- **sqlite: run backup completion in callback scope** (18c3867)
- **fs: improve performance of recursive directory read** (2130460)
- **lib: defer source map payload decoding until first use** (cbd0948)
- **diagnostics_channel: lazily create tracing context** (7003159)
- **src: let embedders supply a builtin code cache without a snapshot** (8e9151c)
- **stream: address stream/iter review feedback** (82ae196)
- **stream: replace object sentinel with symbol** (3b37b48)
- **stream: ensure pipeToSync requires synchronous close** (b6424b6)
- **stream: cancel active stream/iter pulls** (830fc81)
- **stream: ensure full-close semantics when closed** (7319198)
- **stream: defend against re-entrancy in writev** (bf5acb7)
- **stream: ensure stability of stored metadata** (b01594f)
- **stream: fixup writer to terminate on consumer return/throw** (7bfd81a)
- **stream: ensure iterator cleanup on done, reject, etc** (dc2483c)
- **stream: fixup cancelation handling in pull()** (f6fac6f)
- **quic: reuse TLS pause machinery to drop event deferral & improve 0RTT** (d30df2a)
- **node-api: make object property arrays const** (51d094e)
- **net: recognize bare IPv6 loopback addresses in isLoopback** (506d23b)
- **url: align URLPatternInit dictionary conversion with WebIDL** (a82cc70)
- **tls: read the peer certificate chain without consuming it** (6a3d8a6)
- **sqlite: copy changeset before applying it** (a77d738)
- **src: apply IsolateSettings when using a snapshot** (f2a588c)
- **fs: do not descend into symlinks for ** unless following symlinks** (ab7f4c8)
- **fs: watch directories, not files, in recursive fs.watch fallback** (e990324)
- **fs: preserve directory timestamps in cp** (b6db219)
- **vfs: integrate with CJS and ESM module loaders** (5198142)
- **src: reuse cached strings in CompileSerializeMain** (e260fd1)
- **sqlite: reject closing a session from a callback** (b5f0558)
- **node-api: enter env context for async callbacks** (875c7ec)
- **zlib: avoid waiting for paused ZIP iterators** (069a1b1)
- **quic: remove unused fin flag from blob reader wakeup** (fce1b6a)
- **src: disable V8 external memory reasonable size check** (6e9d44d)
- **module: derive builtinModules from enabled builtin set** (54a5e25)
- **sqlite: keep sessions alive across SQLite callbacks** (5f95032)
- **http: coalesce chunked writes during auto-corking** (f9175a2)
- **fs: cancel in-flight stat on abort** (ea372bf)
- **src: report libuv error when openAsBlob cannot stat** (9c46e56)
- **sqlite: throw on disposal of an in-use session** (2ce0e2e)

### Tests
- **test: split test-bench-cli to try deflaking it** (900fae0)
- **test: make node:bench test samples survive a coarse clock** (31f4bd7)
- **test: do not dump core in external memory limit test** (e0fa189)
- **test: zero-fill buffers before the string length limit check** (00ad283)
- **test: expand test coverage of node:bench** (70763fc)
- **test: fix node:bench test timing** (5a38e6b)
- **test: improve node:bench test coverage** (536ae0e)
- **test: update bench tests to not fail on no-crypto** (eec66d5)
- **test: bump WPT webidl and interfaces** (ce7b349)
- **test: update WPT for url to c23755a144** (ec96f8d)
- **test: fix recursive fs.watch error fixture** (ebe2ac2)
- **test: update streams WPT** (a19912e)
- **test: remove `console.log` call in `node_run_list`** (14b5dfc)
- **test: expect node:ffi to be enabled by default** (3f67df1)
- **test: use native builder for legacy SEA tests** (b9ee2e6)

### Chore
- **build: add `--shared-perfetto` flag** (02f8eb3)
- **build: enable V8 gdb/lldb plugin support** (fe7032e)
- **build: allow linking shared dependencies in the GN build** (109f2ca)
- **build: enable the V8 sandbox in shared-cage builds** (55213fd)
- **build: add `--shared-highway` configure flag** (120929a)
- **build: add `--shared-abseil` configure flag** (c99af09)
- **build: define V8_CONTIGUOUS_COMPRESSED_RO_SPACE for shared cage** (431c2bf)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/nodejs/node?utm_source=github-action)._