Skip to content

2026-07-22, Version 26.6.0 (Current) - #64655

Open
github-actions[bot] wants to merge 150 commits into
v26.xfrom
v26.6.0-proposal
Open

2026-07-22, Version 26.6.0 (Current)#64655
github-actions[bot] wants to merge 150 commits into
v26.xfrom
v26.6.0-proposal

Conversation

@github-actions

@github-actions github-actions Bot commented Jul 21, 2026

Copy link
Copy Markdown
Contributor
  • [5a36018abc] - doc: add MikeMcC399 as collaborator (Mike McCready) #64656
  • [9b04f82d7b] - (SEMVER-MINOR) ffi: add getCurrentEventLoop (Paolo Insogna) #64323
  • [bb51f2c960] - (SEMVER-MINOR) test_runner: add context.log() and test:log event (Moshe Atlow) #64389
  • [56ce83b3ee] - (SEMVER-MINOR) test_runner: report entryFile in TestStream events (Moshe Atlow) #64309
Commits
  • [248ff9fa5c] - assert,util: fix TypeError on Maps with null keys (Paul Bouchon) #64441
  • [3b5baceafe] - benchmark: add bytes variant to webstreams async-iterator (Matteo Collina) #64291
  • [0a46d1ef66] - buffer: normalize lone "\r" in Blob native line endings (Daijiro Wachi) #64115
  • [d9ada18b70] - buffer: fix Blob.stream() leaking source buffer (semimikoh) #63577
  • [d05993bcf6] - build: merge multiple on download artifact (Chengzhong Wu) #64633
  • [6c25ac909a] - build: extract temporal_capi crate directory name into gyp variable (René) #64482
  • [612f60c300] - cli: style node --help output with util.styleText (Adrián Estrada) #64484
  • [29a938ddbb] - crypto: preserve RSA-PSS legacy pubkey DER (Filip Skokan) #64547
  • [2fde794357] - crypto: cleanse provider private key copies (Filip Skokan) #64547
  • [33a0e08d41] - crypto: handle incomplete RSA private keys (Filip Skokan) #64547
  • [11b4d505ef] - crypto: retain legacy DH validation (Filip Skokan) #64547
  • [6e302041e1] - crypto: limit KangarooTwelveParams customization to 512 bytes (Filip Skokan) #64557
  • [195f103e87] - crypto: split OpenSSL 3, BoringSSL, and legacy backends (Filip Skokan) #64211
  • [ec67e24eee] - deps: update googletest to fa005b296f90faec4f352d7ab382287bf6548c8d (Node.js GitHub Bot) #64587
  • [32ffff88fd] - deps: histogram: cherry-pick 62ea52b07ee9b195 (StefanStojanovic) #64296
  • [e0664f1f09] - deps: update histogram to 0.11.10 (Node.js GitHub Bot) #64296
  • [cf0622bdd6] - deps: update amaro to 1.1.11 (Node.js GitHub Bot) #64586
  • [04c78b8b24] - deps: update timezone to 2026c (Node.js GitHub Bot) #64588
  • [59f4318976] - deps: V8: cherry-pick 1158ae719749 (René) #64432
  • [e5ea7cd299] - deps: update googletest to 8240fa7d62f73e01c7af27d61ed965d6d66698fa (Node.js GitHub Bot) #64439
  • [0e7554cee4] - deps: update libffi to 3.7.1 (Node.js GitHub Bot) #64438
  • [46c9d724ad] - deps: update ngtcp2 to 1.24.0 (Node.js GitHub Bot) #64297
  • [3519aac9af] - deps: enable OpenSSL asm support for riscv64 (Jamie Magee) #62606
  • [c09701218b] - deps: update c-ares to 1.34.8 (Node.js GitHub Bot) #64330
  • [ad2f3bc95b] - deps: upgrade npm to 11.18.0 (npm team) #64199
  • [d7a4b22c86] - deps: V8: backport a05321ebd98e (Chengzhong Wu) #64202
  • [8679cff291] - deps: update zlib to 1.3.2.1-motley-8b3aa8a (Node.js GitHub Bot) #64295
  • [df5b1e10ba] - doc: remove unsupported syntax from stream_iter.md (Antoine du Hamel) #64649
  • [8a4ca9083f] - doc: clarify rules for adding new built-in modules (Antoine du Hamel) #64648
  • [7d50fe6b7a] - doc: mention DEPENDENCY custom field for H1 reports (Rafael Gonzaga) #64634
  • [8f415bf5fc] - doc: fix dnsPromises.lookup verbatim default (Shivam S) #64658
  • [c6378f724d] - doc: fix broken links and clean up type map (Antoine du Hamel) #64625
  • [9b53ec19a2] - doc: fix typo in releases guide (Jihwan) #64621
  • [5a36018abc] - doc: add MikeMcC399 as collaborator (Mike McCready) #64656
  • [d2c8acd764] - doc: use promote wording in release guide (Md Muhtasim Munif Fahim) #64371
  • [5c692cb576] - doc: fix import.meta example for vm.SourceTextModule (Muhammad Zeeshan) #64112
  • [7568ce71ca] - doc: mention crypto.hash() for better perf (Steven) #63420
  • [cf3f631936] - doc: update sea example by fixing wrong code example (Maxence Robinet) #64025
  • [ce21e567a4] - doc: fix socket.readyState state descriptions (YuSheng Chen) #64468
  • [018c7f1c01] - doc: replace large tables in crypto.md and webcrypto.md with lists (Filip Skokan) #64582
  • [cf82de8d8b] - doc: note --env-file is not applied to --run (Paul Bouchon) #64442
  • [e635ce5201] - doc: fix typo in embedding.md (greenhead) #64425
  • [0b1f6eda3f] - doc: fix typos in contributing docs (Donghoon Kang) #64520
  • [d978ce80ef] - doc: document TLS alpnProtocol and servername fields (Tim Perry) #64362
  • [394669e3b3] - doc: fix spelling in devcontainer guide (한만욱) #64459
  • [9786a593ea] - doc: clarify PEM format for signing keys (Harjoth Khara) #64404
  • [6251f832ba] - doc: fix typo in tls.md (Daijiro Wachi) #64458
  • [b8656c40ad] - doc: document net Socket server property (Efe Karasakal) #64364
  • [03e9c738f3] - doc: update a Dispatcher undici doc link (Filip Skokan) #64358
  • [b6dd2debf0] - doc: fix typos in documentation (Jungwon Sohn) #64466
  • [3b7d778c3c] - doc: clarify fixes and refs trailer guidance (Trivikram Kamat) #64421
  • [eb086a6e03] - doc: remove duplicate VirtualProvider description (Archkon) #64400
  • [bc221a8cd7] - doc: add scope overview tables for TestsStream events (Moshe Atlow) #64386
  • [4b3dbd36df] - doc: clarify proxy threat model (Matteo Collina) #64366
  • [c5526f69d6] - doc: add note about restricted CI to pull-requests.md (Stewart X Addison) #64321
  • [968eaf6538] - doc: various updates to releases.md (Stewart X Addison) #64198
  • [2a51f8ba8e] - doc: remove obsolete --napi-modules doc entry (Chengzhong Wu) #64220
  • [ee5a54535e] - doc,test: widen fsPromises.appendFile()'s data type, add missing tests (Jimmy Leung) #64279
  • [b923df86fc] - events: avoid retaining removed event names (Matteo Collina) #64475
  • [7d8d413ff5] - events: optimize once() and removeListener() (Matteo Collina) #64373
  • [f2f8881d2a] - ffi: evaluate function signatures once (Trivikram Kamat) #64559
  • [9b04f82d7b] - (SEMVER-MINOR) ffi: add getCurrentEventLoop (Paolo Insogna) #64323
  • [4a3ef5b2b5] - fs: add pattern cache for matchGlobPattern() (bq) #63915
  • [ce113efcac] - fs: fix cp symlink and EEXIST handling on Windows (Kirill Saied) #64353
  • [3be3041ac9] - http: fix perf_hooks detail.req.url port and proxied path (Stefano Baghino) #64311
  • [0047ad73cf] - http: remove unused n arg from IncomingMessage._read (Efe Karasakal) #64370
  • [4d48984d5c] - http2: don't throw when destroying socket proxy (Matteo Collina) #64427
  • [3329647762] - http2: avoid copying the options in respond() (Matteo Collina) #64265
  • [a44fca5e24] - http2: avoid per-write closures in kWriteGeneric (Matteo Collina) #64265
  • [546e0e70a1] - inspector: add --cond to node inspect probe mode (Joyee Cheung) #64328
  • [b38a39dd96] - lib: use assignFunctionName util where it makes sense (Antoine du Hamel) #64515
  • [f60a12b94f] - lib,tools: add node-core/func-name-matching lint rule (Livia Medeiros) #57901
  • [9e6e9d4745] - meta: lower stale to 3 months (Aviv Keller) #64569
  • [3dd11c4993] - meta: move one or more collaborators to emeritus (Node.js GitHub Bot) #64315
  • [3f55208104] - module: add two tests for eager imports when using import defer (Maya Lekova) #64197
  • [c791eedc9d] - net: support sync connect for BoundSocket (Guy Bedford) #64375
  • [4df4a3fc61] - net: make TCP Server and Socket transferable across worker threads (Matteo Collina) #64225
  • [5dd34d7d06] - path: add benchmarks for path.matchesGlob() (bq) #63915
  • [8e520646b6] - quic: defer server session emit until TLS ClientHello is processed (Tim Perry) #64132
  • [4b8cc9a3fb] - quic: preserve session stats after close (한만욱) #64489
  • [591090ca85] - quic: add support for TLS certificate compression (Sebastian Beltran) #64434
  • [d636c9c30f] - quic: extract transport logic from Application to Session (Tim Perry) #64127
  • [abb62f961f] - quic: correct http3 callback and fix revealed errs (Marten Richter) #64289
  • [5f535fdbe8] - quic: fix no onstream handler crash quic (Efe) #64158
  • [933e5f14b5] - quic: fix stall datagrams, if no pending streams (Marten Richter) #64303
  • [272632a57f] - quic: fix potential crash from unobserved closed (Tim Perry) #64134
  • [2d5f445489] - sqlite: read column count after step in StatementSync.all() (Guilherme Araújo) #64219
  • [54929af44e] - src: avoid redundant KEM encapsulation copies (Filip Skokan) #64553
  • [5380bf28b3] - src: avoid redundant DataPointer reallocations (Filip Skokan) #64552
  • [6ff5a1b834] - src: fix comment typos (Jungwon Sohn) #64509
  • [508ec0e435] - src: zero-initialize cap_data in node_credentials.cc (Samuel Kapust) #64347
  • [c5090a36c1] - src: fix some typo errors and rename some variables (Archkon) #64301
  • [0a89bef69e] - src,permission: do not throw on denied access in audit mode (Adrián Estrada) #64426
  • [63e71195c5] - stream: abort pending single-source merge reads (Trivikram Kamat) #64445
  • [f403b30c3d] - stream: use RangeError for broadcast overflow (Trivikram Kamat) #64420
  • [5c0578cbf7] - stream: skip null output from stateful transforms (Trivikram Kamat) #64462
  • [0488d02d5d] - stream: update iterable streams to use budget backpressure (James M Snell) #64464
  • [f0811baeef] - stream: remove custom CloneableDOMException implementation (Antoine du Hamel) #64469
  • [10f3f9682e] - stream: fix drop-newest behavior in share() (Trivikram Kamat) #64417
  • [2aad973b29] - stream: resume flow when an errored pipe destination is removed (Mahin Anowar) #64310
  • [6112ed5ceb] - stream: fold desired-size check into WHATWG backpressure update (Matteo Collina) #64451
  • [d829aa1138] - stream: validate writer options signal (Trivikram Kamat) #64385
  • [8e7a5e940e] - stream: reject push iterator.throw() with error (Trivikram Kamat) #64380
  • [4390f81294] - stream: simplify nested PromisePrototypeThens (Antoine du Hamel) #64470
  • [ddf2c38e9d] - stream: use the ring buffer for WHATWG stream request queues (Matteo Collina) #64431
  • [518d81b36d] - stream: validate writevSync chunks before queuing (Trivikram Kamat) #64300
  • [f745c4261d] - stream: speed up reads and iteration over default WHATWG streams (Matteo Collina) #64320
  • [4f4bce62fe] - stream: copy SAB-backed chunks in iter consumers (Trivikram Kamat) #64382
  • [f29937d26f] - stream: reject nested async streamables in from() (Trivikram Kamat) #64352
  • [424cec71b7] - stream: avoid draining merged iter sources (Trivikram Kamat) #64293
  • [e01906180c] - stream: use ring buffer for WHATWG stream queues (Yagiz Nizipli) #64312
  • [0a0193f666] - stream: hoist repeated loads in readable paths (Yagiz Nizipli) #64312
  • [ebe16003b6] - stream: prefer sync iterator in fromSync (Trivikram Kamat) #64294
  • [f249614835] - stream: speed up async iteration over WHATWG byte streams (Matteo Collina) #64291
  • [7331118699] - stream, quic: update iterable streams backpressure (James M Snell) #64464
  • [46b117729d] - test: update quic tests for stream/iter update (James M Snell) #64464
  • [b122ca5389] - test: fix flaky http2 socket proxy test (Tim Perry) #64673
  • [68c46146fd] - test: apply correction to comment (Rich Trott) #64524
  • [d7e119b26b] - test: keep finalization before-exit ref alive (Tim Perry) #64521
  • [0db4e10a0c] - test: copyedit test-tls-psk-alpn-callback-exception-handling (Antoine du Hamel) #63485
  • [21389f7b25] - test: fix stale async-context-frame status entries (Kirill Saied) #64141
  • [af55304846] - test: update WPT for urlpattern to 5847ee5cfa (Node.js GitHub Bot) #64436
  • [43a5ce4e00] - test: update WPT for WebCryptoAPI to ec2fee39a4 (Node.js GitHub Bot) #64435
  • [11ca52a521] - test: fix flaky http2 maxOriginSetSize test (Tim Perry) #64407
  • [af08a11e77] - test: fix 2nd flaky blob test case (Tim Perry) #64391
  • [0104ae1171] - test: fix flaky watch + cwd + argv test-runner test (Tim Perry) #64372
  • [b3ff5fe3f4] - test: normalize Windows crash in debugger test normalization (Joyee Cheung) #64332
  • [4cdceb7436] - test: unmark flaky http2-large-file for Win (Kirill Saied) #64255
  • [19f529377b] - test: unmark flaky SEA snapshot tests on Windows (Kirill Saied) #64317
  • [66f9b342ef] - test: increase timeout in consumed-timeout test (Trivikram Kamat) #64204
  • [fdbbf0ae6d] - test: handle null stdio streams in spawnSyncAndAssert helper (Joyee Cheung) #64273
  • [10ea17dafe] - test: remove impact of tier-up changes in worker stack size test (Joyee Cheung) #64271
  • [bb51f2c960] - (SEMVER-MINOR) test_runner: add context.log() and test:log event (Moshe Atlow) #64389
  • [56ce83b3ee] - (SEMVER-MINOR) test_runner: report entryFile in TestStream events (Moshe Atlow) #64309
  • [7a02e4f9e6] - timers: do not retain a reference to the async store after firing (Matteo Collina) #53443
  • [7d5d46ef00] - tls: match IPv6 hosts against IP-Address SANs (Pascal Garber) #64145
  • [f7bc0c62df] - tools: bump brace-expansion from 5.0.6 to 5.0.7 in /tools/eslint (dependabot[bot]) #64636
  • [3f80ed2e93] - tools: reference 'git node land' in PR-URL: error message in merge.sh (Stewart X Addison) #64495
  • [7b373cafce] - tools: disable zipping tarballs on GHA (Antoine du Hamel) #64423
  • [5bdbd256e9] - tools: add workflow to compare Nix changes (Antoine du Hamel) #64410
  • [ca4a16634b] - tools: add option for benchmark.yml to post comment on PR (Antoine du Hamel) #64395
  • [86193ef193] - tools: fix redundant conditions in v8.gyp for riscv64 and loong64 (Jamie Magee) #62608
  • [ee460404be] - util: make MIMEParams accessors case-insensitive (Daijiro Wachi) #64123
  • [a63ee46ddd] - vfs: make recursive readdir iterative (AkshatOP) #64149
  • [37f93c3b15] - vfs: make lchmod update symlink mode (Trivikram Kamat) #64350
  • [ce54e2a9c8] - vfs: fix VirtualReadStream race with async iteration (Y1D7NG) #64394
  • [54e8d3a14b] - vfs: follow symlinked dirs in recursive mkdir (Trivikram Kamat) #64287
  • [7be42b64e1] - vm: enable interception on global restricted properties (Chengzhong Wu) #64202
  • [c2cfcf8e7d] - zlib: reject truncated zstd input (Archkon) #64593

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/actions
  • @nodejs/gyp
  • @nodejs/net
  • @nodejs/performance
  • @nodejs/security-wg
  • @nodejs/tsc

nodejs-github-bot added a commit that referenced this pull request Jul 21, 2026
Notable changes:

ffi:
  * (SEMVER-MINOR) add getCurrentEventLoop (Paolo Insogna) #64323
test_runner:
  * (SEMVER-MINOR) add context.log() and test:log event (Moshe Atlow) #64389
  * (SEMVER-MINOR) report `entryFile` in `TestStream` events (Moshe Atlow) #64309

PR-URL: #64655
@github-actions github-actions Bot added release Issues and PRs related to Node.js releases. v26.x Issues that can be reproduced on v26.x or PRs targeting the v26.x-staging branch. labels Jul 21, 2026
@aduh95
aduh95 marked this pull request as ready for review July 21, 2026 15:15
@aduh95 aduh95 added the request-ci Add this label to start a Jenkins CI on a PR. label Jul 21, 2026
@github-actions github-actions Bot removed the request-ci Add this label to start a Jenkins CI on a PR. label Jul 21, 2026
@nodejs-github-bot

nodejs-github-bot commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

@aduh95
aduh95 force-pushed the v26.6.0-proposal branch from f3cc24c to 36be7da Compare July 21, 2026 17:03
aduh95 added a commit that referenced this pull request Jul 21, 2026
Notable changes:

ffi:
  * (SEMVER-MINOR) add `getCurrentEventLoop` (Paolo Insogna) #64323
test_runner:
  * (SEMVER-MINOR) add `context.log()` and `test:log` event (Moshe Atlow) #64389
  * (SEMVER-MINOR) report `entryFile` in `TestStream` events (Moshe Atlow) #64309

PR-URL: #64655

@RafaelGSS RafaelGSS left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please, let's release it after the security release https://nodejs.org/en/blog/vulnerability/july-2026-security-releases.

@codecov

codecov Bot commented Jul 21, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.20%. Comparing base (bebd1b8) to head (6edaf75).
⚠️ Report is 15 commits behind head on v26.x.

Additional details and impacted files
@@            Coverage Diff             @@
##            v26.x   #64655      +/-   ##
==========================================
- Coverage   91.99%   90.20%   -1.79%     
==========================================
  Files         377      737     +360     
  Lines      168036   240382   +72346     
  Branches    25945    45500   +19555     
==========================================
+ Hits       154578   216847   +62269     
- Misses      13164    15091    +1927     
- Partials      294     8444    +8150     

see 522 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@aduh95
aduh95 force-pushed the v26.6.0-proposal branch from 36be7da to 08d15c2 Compare July 21, 2026 21:24
aduh95 added a commit that referenced this pull request Jul 21, 2026
Notable changes:

ffi:
  * (SEMVER-MINOR) add `getCurrentEventLoop` (Paolo Insogna) #64323
test_runner:
  * (SEMVER-MINOR) add `context.log()` and `test:log` event (Moshe Atlow) #64389
  * (SEMVER-MINOR) report `entryFile` in `TestStream` events (Moshe Atlow) #64309

PR-URL: #64655
@nodejs-github-bot

nodejs-github-bot commented Jul 21, 2026

Copy link
Copy Markdown
Collaborator

JamieMagee and others added 12 commits July 29, 2026 10:31
The builtins conditions for riscv64 and loong64 both have the form
'v8_target_arch=="X" or v8_target_arch=="X"' which is redundant.
This was copied from the mips64/mips64el pattern (where the 'or' is
correct since those are two different architectures) when riscv64
and loong64 support were first added.

Simplify both to match the pattern used by ppc64, s390x, and other
single-variant architectures.

Signed-off-by: Jamie Magee <jamie.magee@gmail.com>
PR-URL: #62608
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Recursive mkdir currently checks an existing intermediate entry
directly, so a symlink to a directory is treated as a non-directory
and throws ENOTDIR.

Resolve symlinked intermediate components while walking the recursive
mkdir path, creating new directories in the resolved target while
preserving the caller-facing first-created return path.

Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com>
Assisted-by: openai:gpt-5.5
PR-URL: #64287
Fixes: #64286
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
PR-URL: #64295
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Signed-off-by: Tim Perry <pimterry@gmail.com>
PR-URL: #64134
Reviewed-By: James M Snell <jasnell@gmail.com>
If you are only sending datagrams and so streams,
your datagrams could stall.
There were two reasons:
i. A SendPendingDataScope in SendDatagrams was
missing.
ii. SendPendingData did not attempt to send
datagrams, if there were no stream data.

Signed-off-by: Marten Richter <marten.richter@freenet.de>
PR-URL: #64303
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
for await / reader.read() loops over byte streams were ~4x slower than
over default streams. Three per-chunk costs, none required by the spec:

- ArrayBufferViewGetBuffer/ByteLength/ByteOffset went through
  ReflectGet(view.constructor.prototype, ...), a reflective get that is
  ~3.5x slower than the original prototype getters from primordials and
  spoofable through a user-defined .constructor to boot.

- The buffered fast paths in ReadableStreamDefaultReader.read() and the
  async iterator only covered default controllers, so byte streams with
  queued data still allocated a read request and PromiseWithResolvers
  per chunk. Byte-queue dequeue is fully synchronous (it is the
  queue-filled arm of the byte controller's pull steps), so both fast
  paths now resolve directly from the byte queue.

- readableByteStreamControllerEnqueue re-ran the reader brand check and
  re-loaded the read request list four times per chunk across
  HasDefaultReader / ProcessReadRequestsUsingQueue / GetNumReadRequests
  / FulfillReadRequest; it now does a single pass. The async iterator
  also reuses its read request object across reads (at most one is ever
  in flight).

benchmark/webstreams interleaved same-day A/B, --runs 10:
readable-async-iterator bytes +16.3% (***), readable-read byob +9.1%
(***), all other rows neutral. Profiler harness: parked byte iteration
+14%, buffered byte iteration +37%, buffered byte read loop +18%,
default-stream rows at parity. WPT streams/compression/encoding
subtests identical to baseline.

Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: #64291
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: #64291
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
The depth of the stack depends not only on the stack size, but
also on the size of each stack frame, which in turn depends on
which tier the recursive function happens to be running at when
the overflow occurs. Under load the background tier-up can land
at a non-deterministic point in the recursion and flake the test.
Keep the recursive function in the interpreter with
%NeverOptimizeFunction() so the frame size - and thus the depth
- is deterministic.

Signed-off-by: Joyee Cheung <joyeec9h3@gmail.com>
PR-URL: #64271
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
When a test  uses 'pipe' for the stdio but the child process crashes,
the stream will be null. In this case, don't try to stringify it and
instead log an empty string.

Signed-off-by: Joyee Cheung <joyeec9h3@gmail.com>
PR-URL: #64273
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Signed-off-by: Guilherme Araújo <arauujogui@gmail.com>
PR-URL: #64219
Reviewed-By: Edy Silva <edigleyssonsilva@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: Efe Karasakal <hi@efe.dev>
PR-URL: #64158
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Stephen Belanger <admin@stephenbelanger.com>
Every _write()/_writev() on an Http2Stream allocated four closures
and an anonymous nextTick callback to coordinate the write callback
with the end-of-stream check. Since the stream machinery dispatches
at most one write at a time, that coordination state can live on the
stream's kState object instead, with shared named functions for the
end check and completion logic.

When trailers are pending the writable side cannot be shut down
early anyway, so the end-of-stream check tick is now skipped
entirely for those writes.

Also pre-initialize the kState fields that used to be added
dynamically (shutdownWritableCalled, fd) so hot-path stores no
longer transition the object shape.

h2load, 1 KiB response payload, -c 4 -m 100, mean of 6 alternating
runs vs main: core API 61.0k -> 70.7k req/s (+15.9% cumulative),
compat API 43.7k -> 50.4k req/s (+15.3% cumulative).

Signed-off-by: Matteo Collina <hello@matteocollina.com>
PR-URL: #64265
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Gürgün Dayıoğlu <hey@gurgun.day>
Reviewed-By: Tim Perry <pimterry@gmail.com>
panva and others added 26 commits July 30, 2026 13:24
Clear provider-exported RSA, EC, and DH private BIGNUMs before freeing
them. Also cleanse OSSL_PARAM builder copies and the plaintext DER
intermediate used for encrypted traditional PEM output.

Signed-off-by: Filip Skokan <panva.ip@gmail.com>
PR-URL: #64547
Refs: #64211
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Recreate the historical rsaEncryption AlgorithmIdentifier used by
X509Certificate legacy pubkey output for restricted and unrestricted
RSA-PSS keys without relying on deprecated RSA APIs.

Signed-off-by: Filip Skokan <panva.ip@gmail.com>
PR-URL: #64547
Refs: #64211
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Signed-off-by: Filip Skokan <panva.ip@gmail.com>
PR-URL: #64552
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
KEM encapsulation produces separate ciphertext and shared-secret
allocations. The existing DeriveBitsJob path packs both values into an
intermediate buffer, then copies them again into separate buffers.

Instead, this uses a dedicated KEMEncapsulateJob to retain both outputs
across the worker boundary and convert each directly through ByteSource.
This removes the intermediate allocation and at least one complete round
of copies.

Signed-off-by: Filip Skokan <panva.ip@gmail.com>
PR-URL: #64553
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Yagiz Nizipli <yagiz@nizipli.com>
Signed-off-by: Mike McCready <66998419+MikeMcC399@users.noreply.github.com>
PR-URL: #64656
Fixes: #64502
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Chengzhong Wu <legendecas@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Antoine du Hamel <duhamelantoine1995@gmail.com>
Reviewed-By: Rafael Gonzaga <rafael.nunu@hotmail.com>
Reviewed-By: René <contact.9a5d6388@renegade334.me.uk>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Signed-off-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: #64469
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Signed-off-by: hanityx <hanityx@gmail.com>
PR-URL: #64621
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Signed-off-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: #64625
Reviewed-By: Jacob Smith <jacob@frende.me>
Reviewed-By: Aviv Keller <me@aviv.sh>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 5.0.6 to 5.0.7.
- [Release notes](https://github.com/juliangruber/brace-expansion/releases)
- [Commits](juliangruber/brace-expansion@v5.0.6...v5.0.7)

---
updated-dependencies:
- dependency-name: brace-expansion
  dependency-version: 5.0.7
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
PR-URL: #64636
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
The verbatim default flipped to true in v17 (#39987), but the
dnsPromises.lookup docs still say false. The order bullet right above
it and the dns.lookup section both already say the addresses are not
reordered by default, so this bullet was contradicting them.

Signed-off-by: BIGSUS24 <152616194+BIGSUS24@users.noreply.github.com>
PR-URL: #64658
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Signed-off-by: Tim Perry <pimterry@gmail.com>
PR-URL: #64673
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Updates the implementation to use the updated backpressure
model that landed here: WinterTC55/iter-streams#23

Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
PR-URL: #64464
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Signed-off-by: James M Snell <jasnell@gmail.com>
Assisted-by: Opencode/Opus
PR-URL: #64464
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
PR-URL: #64464
Reviewed-By: Tim Perry <pimterry@gmail.com>
Reviewed-By: Trivikram Kamat <trivikr.dev@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Signed-off-by: RafaelGSS <rafael.nunu@hotmail.com>
PR-URL: #64634
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
This ensures we don't fire session events for totally invalid TLS
handshakes - fundamental errors, bad SNI/ALPN values, or anything else
that our TLS config would reject. Instead, it means servers can access
servername & alpnProtocol synchronously as soon as the event is fired -
all key session data is available and it's immediately usable.

We don't want to defer further to handshake completed, since that'd be
an extra RT, and defeat 0RTT benefits entirely. ClientHello processed
without errors is sufficient for now.

This isn't a security mechanism. Existing structures will defer
actually sending & receiving anything that's not marked explicitly as
early data until the handshake completes anyway.

Signed-off-by: Tim Perry <pimterry@gmail.com>
PR-URL: #64132
Reviewed-By: James M Snell <jasnell@gmail.com>
Signed-off-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: #64648
Reviewed-By: Filip Skokan <panva.ip@gmail.com>
Reviewed-By: Michaël Zasso <targos@protonmail.com>
Reviewed-By: Ulises Gascón <ulisesgascongonzalez@gmail.com>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Jake Yuesong Li <jake.yuesong@gmail.com>
Reviewed-By: Richard Lau <richard.lau@ibm.com>
Treat null yielded by sync and async stateful transforms as no output,
consistent with transform normalization semantics.

Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com>
PR-URL: #64462
Fixes: #64461
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Reject strict-backpressure writes with a RangeError when the broadcast
pending writes queue is full.

Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com>
PR-URL: #64420
Fixes: #64419
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
Make the single-source merge path abort-aware so signal cancellation
rejects a pending read and closes the active source iterator.

Handle synchronous iterator return values when marking aborted cleanup
as handled.

Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com>
PR-URL: #64445
Fixes: #64444
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
Reviewed-By: Ethan Arrowood <ethan@arrowood.dev>
PR-URL: #64586
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
PR-URL: #64296
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Original commit message:

    Fix ClangCL build on Windows

Refs: HdrHistogram/HdrHistogram_c@62ea52b
PR-URL: #64296
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
PR-URL: #64587
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
Signed-off-by: Antoine du Hamel <duhamelantoine1995@gmail.com>
PR-URL: #64649
Reviewed-By: Marco Ippolito <marcoippolito54@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Aviv Keller <me@aviv.sh>
Notable changes:

doc:
  * add MikeMcC399 as collaborator (Mike McCready) #64656
ffi:
  * (SEMVER-MINOR) add `getCurrentEventLoop` (Paolo Insogna) #64323
test_runner:
  * (SEMVER-MINOR) add `context.log()` and `test:log` event (Moshe Atlow) #64389
  * (SEMVER-MINOR) report `entryFile` in `TestStream` events (Moshe Atlow) #64309

PR-URL: #64655
@aduh95
aduh95 force-pushed the v26.6.0-proposal branch from 08d15c2 to 6edaf75 Compare July 30, 2026 11:34
@nodejs-github-bot

nodejs-github-bot commented Jul 30, 2026

Copy link
Copy Markdown
Collaborator

@nodejs-github-bot

Copy link
Copy Markdown
Collaborator

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release Issues and PRs related to Node.js releases. v26.x Issues that can be reproduced on v26.x or PRs targeting the v26.x-staging branch.

Projects

None yet

Development

Successfully merging this pull request may close these issues.