Node.js 26.12.0 (Current)
Richard Lau
2026-10-14, Version 26.12.0 (Current), @richardlau
Notable Changes
- [
1ebd6d3677] - (SEMVER-MINOR) doc,lib,src: throw on missing WebAssembly or RX support (Paolo Insogna) #66533 - [
7f1937d2b9] - (SEMVER-MINOR) http: add websocketMask() and websocketUnmask() (James M Snell) #66335
Commits
- [
30e76bb16a] - benchmark: fix input passed to subtle.digest in webcrypto-digest (Rafael Gonzaga) #66608 - [
adef72223a] - benchmark: fix buffer option in buffer read/write benchmarks (Rafael Gonzaga) #66604 - [
2f498f08fe] - benchmark: add util.parseArgs benchmark (Rafael Gonzaga) #66599 - [
4ce8412e18] - benchmark: fix url-searchparams-sort to sort a fresh list (RafaelGSS) #66535 - [
493bd6c66e] - benchmark,tools: fix napi benchmarks on GHA (Nigro Simone) #66423 - [
e4515552d6] - build: run QUIC CI for V8 changes (Yuya Inoue) #66602 - [
a888e51062] - build: support Python 3.15 (Mike McCready) #65750 - [
2afab9a63b] - build: do not include shared gtest innodelink path (Antoine du Hamel) #66626 - [
f88c2f8ec6] - build,test: enable temporal support on no-ICU and system-ICU builds (Antoine du Hamel) #66697 - [
5fd03e6fdf] - child_process: propagate config-file permission flags to children (Rafael Gonzaga) #66559 - [
f771134b07] - crypto: isolate provider EC PKCS8 encoding (Filip Skokan) #66413 - [
4e00a293db] - crypto: remove key export and metadata locks (Filip Skokan) #66413 - [
bcd8018775] - crypto: remove verify setup key locking (Filip Skokan) #66413 - [
883250fee2] - crypto: remove KEM key locking (Filip Skokan) #66413 - [
9d98805071] - crypto: remove RSA-OAEP key locking (Filip Skokan) #66413 - [
d6293e7bb1] - crypto: skip secret key mutex allocation (Filip Skokan) #66413 - [
8d8af8003e] - crypto: keep the root cert store per Environment (Shelley Vohr) #66411 - [
c6f0614785] - crypto: remove select Web Crypto warnings (Filip Skokan) #66312 - [
e5360b5a08] - deps: update googletest to 988ea2c1798de7779f656df2281dd36d6039a17a (Node.js GitHub Bot) #66652 - [
7eb230a2c1] - deps: update acorn to 8.19.0 (Node.js GitHub Bot) #66655 - [
af946ba8f3] - deps: update sqlite to 3.54.0 (Node.js GitHub Bot) #66663 - [
007872a85d] - deps: V8: cherry-pick 8d14d49c4040 (Antoine du Hamel) #66627 - [
f44aec4966] - deps: update simdjson to 5.0.3 (Daniel Lemire) #66620 - [
1a33e914e8] - deps: V8: cherry-pick 7d5eb1df2a72 (inoway46) #66566 - [
3294d51e5a] - diagnostics_channel: fix default callback context (Matteo Collina) #66481 - [
5c602a5824] - doc: list futimes among fd APIs disabled by the permission model (Rafael Gonzaga) #66649 - [
eaeb4736c8] - doc: add Test Runner to list of built-in diagnostic channels (Vas Sudanagunta) #66563 - [
0e1c99afae] - doc: document stream/iter behaviors and Node.js extensions (James M Snell) #66483 - [
846236367d] - doc: document URL and Uint8Array references in process.permission (Rafael Gonzaga) #66557 - [
fc3b067be7] - doc: clarify http Agent keepSocketAlive behavior (Efe Karasakal) #66252 - [
73a4e90ce2] - doc: document keepAliveTimeoutBuffer server option (Efe Karasakal) #66286 - [
bb816582af] - doc: fix request.reusedSocket timeout example (Efe Karasakal) #66286 - [
82223ab4d9] - doc: clarify revert PR label policy (Antoine du Hamel) #66529 - [
c6f59d4e8e] - doc: clarify node binary misuse after compromise (Rafael Gonzaga) #66530 - [
8904178498] - doc: document linux-x64-musl build toolchain (Issac) #66523 - [
1e8247a74e] - doc: run license-builder (github-actions[bot]) #66517 - [
b2773d5e4c] - doc: add missing return types in cluster.md (Daniel Pinto) #66453 - [
1ebd6d3677] - (SEMVER-MINOR) doc,lib,src: throw on missing WebAssembly or RX support (Paolo Insogna) #66533 - [
c1073f31de] - ffi: fix exportArrayBuffer type check (Trivikram Kamat) #66455 - [
69148ee0ff] - fs: lock FileHandle on first read in pull() and pullSync() (James M Snell) #66483 - [
700c60a1cd] - fs: serialize FileHandle writer() async writes (James M Snell) #66483 - [
32833def1c] - http: reduce raw header name allocations (Roberto Bianchi) #66488 - [
7f1937d2b9] - (SEMVER-MINOR) http: add websocketMask() and websocketUnmask() (James M Snell) #66335 - [
115731dda7] - http2: speed up response getHeaders (Roberto Bianchi) #66592 - [
447c36cb45] - lib: fix AbortSignal.any() nested composite leak (Darius) #66617 - [
1722ced4b4] - lib: add --allow-fs-vfs to permission available flags (Rafael Gonzaga) #66554 - [
062ece77fc] - lib: fix benchmark record acknowledgement race (Filip Skokan) #66430 - [
05d0b14438] - lib: set exit code on failed node:bench run() (RafaelGSS) #66534 - [
2cab299471] - lib: default node:bench warmup to 10 invocations (RafaelGSS) #66536 - [
83f507845d] - meta: bump nodejs/node-pr-labeler to dfe5eb3 (Soul Lee) #66606 - [
6fbffd5ee5] - meta: bump codecov/codecov-action from 7.1.0 to 7.1.1 (dependabot[bot]) #66448 - [
bd567f8bd6] - module: fix require of imports with package map (Lazizbek Ergashev) #66565 - [
c442f471a5] - module: synchronously load most ES modules (Geoffrey Booth) #62530 - [
51f66f0134] - permission: keep explicit fs grants when dropping a covering directory (Rafael Gonzaga) #66556 - [
1aa10d80e2] - process: mark process.finalization as release candidate (Matteo Collina) #66436 - [
dd4715a6ba] - querystring: fix value decoding after encoded keys (Ved Chaudhari) #66553 - [
9648a6ba8e] - quic: reject closed stream writer writes with a TypeError (James M Snell) #66483 - [
d6f566baf8] - quic: give each BindingData its own allocator state (Shelley Vohr) #66411 - [
c3204c15bd] - quic: validate session close error codes (Christian Aurich Zanettini Martins) #66302 - [
5b87354f5a] - quic: destroy stream on invalid promise body (Christian Aurich Zanettini Martins) #66260 - [
9ef698c781] - sqlite: validate aggregate() name and options (Guilherme Araújo) #66463 - [
bbf41f8cfb] - sqlite: persist enableDefensive() across reopen (Trivikram Kamat) #66404 - [
54867cd25e] - sqlite: throw on oversized strings instead of aborting (Trivikram Kamat) #66521 - [
4314cde48b] - src: release uv_fs_t in permission WildcardIfDir (Rafael Gonzaga) #66555 - [
0e58916f08] - src: stop including simdjson.h from env.h (Daniel Lemire) #66620 - [
06f56a55bb] - src: use native CopyArrayBufferBytes for webstream buffer copy (René) #66400 - [
2e3dd5bb63] - src: fix config file handling (Marco Ippolito) #66431 - [
cd86506bc2] - src: mark config file as stable (Marco Ippolito) #66431 - [
15ff9884e4] - stream: skip idle webstreams start and watchers (Matteo Collina) #66424 - [
3f75c89fb8] - stream: add pipeToSync() failOnIncompleteClose option (James M Snell) #66483 - [
6cecf140e7] - stream: do not fail the writer when pipeToSync() cannot close (James M Snell) #66483 - [
16833534b6] - stream: fix fromSync() async input error messages (James M Snell) #66483 - [
af41622ad8] - stream: reject closed fromWritable() writes with a TypeError (James M Snell) #66483 - [
4b83c6c38e] - stream: accept explicit stream/iter budgets below 16384 (James M Snell) #66483 - [
f302fbd04a] - stream: reduce per-chunk overhead in stream/iter consumers (James M Snell) #66483 - [
7ba60dcdbe] - stream: keep the original error when writer.fail() throws (James M Snell) #66483 - [
dcac51a7db] - stream: align pull() abort handling with the spec (James M Snell) #66483 - [
995dee6b6b] - stream: honor stream/iter protocols on function objects (James M Snell) #66483 - [
6eaf91353a] - stream: do not hold back nested async data in from() (James M Snell) #66483 - [
69d44aedb4] - stream: bound pre-batched async values in from() (James M Snell) #66483 - [
6b1e7c4cf1] - stream: guard shareSync() against re-entrant source reads (James M Snell) #66483 - [
8a47365425] - stream: split oversized share batches under drop-oldest (James M Snell) #66483 - [
30cbc4e643] - stream: reject drop-newest backpressure in shareSync() (James M Snell) #66483 - [
42ae08594e] - stream: detach shareSync consumers on strict budget errors (James M Snell) #66483 - [
fa49de9ba6] - stream: keep share buffer when all consumers detach (James M Snell) #66483 - [
e6662cb904] - stream: fix Utf8Stream flush handling (James M Snell) #66473 - [
93596b1a9e] - stream: add dump()/dumpSync() for stream/iter (Ethan Arrowood) #65598 - [
4ba6ce1b0c] - stream: port remaining SonicBoom tests for Utf8Stream (Matteo Collina) #66275 - [
cd8b5fa5b0] - test: tolerate async block count updates in test-fs-stat-bigint (Rafael Gonzaga) #66576 - [
30814ce991] - test: replace discard loops with dump() (Ethan Arrowood) #65598 - [
20441b8fc0] - test: run node-bench tools test sequentially (Filip Skokan) #66338 - [
9618da6fe3] - test: remove duplicated cases in permission fs-read fixture (Rafael Gonzaga) #66450 - [
c348a4cb46] - test: run instantiateStreaming-bad-imports WPT (Filip Skokan) #66322 - [
7d4fda6ba7] - test: honor allowed WPT promise rejections (Filip Skokan) #66322 - [
d4c87eb086] - test: scope Blob WPT failures to big-endian (Filip Skokan) #66322 - [
7309ddf204] - test_runner: rerun failing todo tests in suites (Barak) #66605 - [
da908b3072] - test_runner: report load errors with --test-isolation=none (Lazizbek Ergashev) #66550 - [
b18e121625] - test_runner: add mock call assertions to t.assert (Guilherme Araújo) #66476 - [
3d691ab75e] - tools: restore Python 3.14 for daily WPT (Filip Skokan) #66699 - [
714aca1ef6] - tools: switch to PGP and SHA256 in ICU updater (Antoine du Hamel) #66469 - [
fa9fca45e4] - tools: lint thread_local in src (Shelley Vohr) #66411 - [
dbc3e97847] - tools: copy hdr_histogram_internal.h in update-histogram.sh (Filipe Oliveira (Redis)) #66528 - [
4760c27904] - tools: bump the eslint group in /tools/eslint with 5 updates (dependabot[bot]) #66445 - [
63c20ee58e] - vfs: add ComposableProvider for layered mounts (Matteo Collina) #66235 - [
ab057989af] - watch: strip underscore aliases of watch flags (Trivikram Kamat) #66365
Windows 64-bit Installer: https://nodejs.org/dist/v26.12.0/node-v26.12.0-x64.msi
Windows ARM 64-bit Installer: https://nodejs.org/dist/v26.12.0/node-v26.12.0-arm64.msi
Windows 64-bit Binary: https://nodejs.org/dist/v26.12.0/win-x64/node.exe
Windows ARM 64-bit Binary: https://nodejs.org/dist/v26.12.0/win-arm64/node.exe
macOS 64-bit Installer: https://nodejs.org/dist/v26.12.0/node-v26.12.0.pkg
macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v26.12.0/node-v26.12.0-darwin-arm64.tar.gz
macOS Intel 64-bit Binary: https://nodejs.org/dist/v26.12.0/node-v26.12.0-darwin-x64.tar.gz
Linux 64-bit Binary: https://nodejs.org/dist/v26.12.0/node-v26.12.0-linux-x64.tar.xz
Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v26.12.0/node-v26.12.0-linux-ppc64le.tar.xz
Linux s390x 64-bit Binary: https://nodejs.org/dist/v26.12.0/node-v26.12.0-linux-s390x.tar.xz
AIX 64-bit Binary: https://nodejs.org/dist/v26.12.0/node-v26.12.0-aix-ppc64.tar.gz
ARMv8 64-bit Binary: https://nodejs.org/dist/v26.12.0/node-v26.12.0-linux-arm64.tar.xz
Source Code: https://nodejs.org/dist/v26.12.0/node-v26.12.0.tar.gz
Other release files: https://nodejs.org/dist/v26.12.0/
Documentation: https://nodejs.org/docs/v26.12.0/api/
SHASUMS
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256
34d306d13e321942f6a48c5c0b8c4e781e864cbe052cf04386ace94f5448033d node-v26.12.0-aix-ppc64.tar.gz
bc13c50e9dd29645c3b5880ae8366c7c603fe97945ae32b4f846381fa15f5348 node-v26.12.0-arm64.msi
2a154d4a5458930e0a2d6a1ecf64eddf5a2b3e1c13636b609c2ecb042e8c4553 node-v26.12.0-darwin-arm64.tar.gz
a2e255e35347f727f29aa158c552a60140b17b6ba68719d5d6fc46c7d058aa75 node-v26.12.0-darwin-arm64.tar.xz
878ecede191c7abc1bff01d3fb81f7ed81aa1161040dba18776b8ff8593614b1 node-v26.12.0-darwin-x64.tar.gz
c04edbd7b8429acb26058dee20c915308b174b71612ebfcb7e5976d790ae47d4 node-v26.12.0-darwin-x64.tar.xz
6abd0ddeccf3ebec9abe99582710c594669ee9510a40a1d1d990133dec36a1fc node-v26.12.0-headers.tar.gz
c30445f95c9f6e44b4cc3d5a2b5644d5195fa11a1799b4a182006072d8cb68ec node-v26.12.0-headers.tar.xz
ec53c915c3fdd8786c5685abd25ae3fe9fba0692307f9811d7caaadea1bcaf03 node-v26.12.0-linux-arm64.tar.gz
fd6cc729fa4448c2ac27c3fca5606019ced63c65a15c152c8df03e0cbce7f4c5 node-v26.12.0-linux-arm64.tar.xz
f9350847d0732f8bcc1577417ce536f0d617f93f093c664d88f0b1e70f2cc4e4 node-v26.12.0-linux-ppc64le.tar.gz
e90a7c8a3b2e453d3be98782b0275f119334d1a780434470b5e912f1fbfdc57d node-v26.12.0-linux-ppc64le.tar.xz
7563e026ac03f95120201e37d6074960d06610536f45aac1fa5ed87cf74ac0d4 node-v26.12.0-linux-s390x.tar.gz
a62e7e0a7aa77893646fa076ff0444aa916e57ec3554d4cfc89f68e79f10c103 node-v26.12.0-linux-s390x.tar.xz
fdaa2cf6e44ca443a374b05db121827001aa167be25676368bab9bf36c0e48d1 node-v26.12.0-linux-x64-musl.tar.gz
4eec22381cc162f55273151bdf4f434d61216bb5abc3e7a23b8ad859ee5827c7 node-v26.12.0-linux-x64-musl.tar.xz
d9f88af72ad34f7ddf8e67289829f1698f54b6254f7d4f54b7453117ff1a3d2c node-v26.12.0-linux-x64.tar.gz
fd47865ecd6391ebb431fc815e01b9135bf83ded5cf373247e9331e196b7aded node-v26.12.0-linux-x64.tar.xz
4a52bdf4a236145267143ce2cc8c058def3485a5901af055572d5f15d026cf77 node-v26.12.0.pkg
435d4e5b5e12e14819f2598710f0f637f2094b25232fdf0cc304b7c4eadeadbb node-v26.12.0.tar.gz
ce59f9038dda0e637656fb1c36cf52c07c637922fd81d419dbba2ec129afbd35 node-v26.12.0.tar.xz
c6e88e5a0ff6afdb6dfd2c8b6dc690f14f2eafc75bf839397ff9c447fdded3a2 node-v26.12.0-win-arm64.7z
cc773b9829623e3d4fd13aef394f05010e0459273f27fb3255150f38a2577abf node-v26.12.0-win-arm64.zip
7a43d0d5b196dcb5990712a1ff403b2858366eeb0385fcaa7cbf27088dbb23d4 node-v26.12.0-win-x64.7z
50efaf01a08c520b4bbe499c09a8c5a5c370002c419c0d9da2c6815d3066a453 node-v26.12.0-win-x64.zip
dd72e3693abed70b7cb5c528dc6eaa46e628a25cd82319fb2c1ccb4462cce633 node-v26.12.0-x64.msi
141c9ed6c662e848aecdf2f3540ad5a9a7d97d51bca300e9e1a9c308f4e1cf93 win-arm64/node.exe
45084cbfc0170d7a30b29ab1eeeb2b0d770995ade0a13a4cc82cf31189f95c9f win-arm64/node.lib
176fc7eda8c6ae75f073200fc2d2cb2d03a4b4ed2d7822c76750c00d0c7c99eb win-arm64/node_pdb.7z
32ef09e9e7b5829bba3190b64ee603555ea91c85bab75fa8084e0fd7130eb7ab win-arm64/node_pdb.zip
1a14457b043fe82fd2fc027959595e91d138a8185c7ca6c02c15c16632b51aa4 win-x64/node.exe
caad0090dc3add94c06abd01e395e8ec0f1586c10071bda1f99480445d695f6f win-x64/node.lib
598c8b6c1ae03a3f24f4ff8d395313e25e3c386efd1c4cb00d45efd9ca57cf1a win-x64/node_pdb.7z
63043620be735731e016e35189dff6d80dc6e1b534bcbf4a79814f8b9f6b983a win-x64/node_pdb.zip
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCAAdFiEEyC+jrhy+3Gvka5NgxDzsRcF6uTwFAmrPnfwACgkQxDzsRcF6
uTxseBAAurwha0uv70sp0lvJVcxitj+7zhb5Fa1jK1/njAlKRc2N9ZAwji2tdhZC
GwAtNmhd9Z+hwWrpi/8YEQy3kMfi3QpAVAm7nxzD7CBiFEeURP21VADpwKDtJp1R
fue5K7sGli2M07B7/8sgndj5ddGYcRqfWds0LWKbdp3Ws+mlnh9/wF5zUtYt1tne
yur2IZD+qEFqVqnJT54lu4WCGrllUgbH5t1nQP+oIRrSJDgj6VfLKpAHTBT0Qu1n
osZvnktriYkYp7v86DXh/n8/2G8H7AaZv44lNmMZ90UiCSSu7bheyzqCL4p2COWD
52uDac6oM7/zZJ0JD8yJrkL8jKFfIqapwkcUkXyBjR6MN2oyn/KzKUFOPkKh7NU4
Uji0AYs4BFsRWfzVD7WH5AIDiES2Aw44O3sAWViQnUzAuIT9TtOxYwpujj/aMXa4
7jtGsxFutRqY327+RLfPRGjXoLvF3Qg8GEyNLMBezb9LnTqNf3mDkO8qbobqXhzu
JswodLLEQdwMwvFOr2m+HIqWwM5aACBElFnsTJWUtS77xOjjNqUSCgpPLb0zDgMJ
OiGqyyFjM3MU7KgTStvnLyTJ8+Xr39lNUQVxWvS/VI+NQ7OsXzu6wYAin1DyUJgN
UmnEdFrLhtgagqGZQGoJ933D9RwNIdQoyqLePsEWVL3GgOxHGDU=
=9EZ3
-----END PGP SIGNATURE-----