Releases: nodejs/node
2023-10-24, Version 20.9.0 'Iron' (LTS), @richardlau
Notable Changes
This release marks the transition of Node.js 20.x into Long Term Support (LTS)
with the codename 'Iron'. The 20.x release line now moves into "Active LTS"
and will remain so until October 2024. After that time, it will move into
"Maintenance" until end of life in April 2026.
Known issue
Collecting code coverage via the NODE_V8_COVERAGE
environment variable may
lead to a hang. This is not thought to be a regression in Node.js 20 (some
reports are on Node.js 18). For more information, including some potential
workarounds, see issue #49344.
2023-10-17, Version 21.0.0 (Current), @RafaelGSS and @targos
We're excited to announce the release of Node.js 21! Highlights include updates of the V8 JavaScript engine to 11.8,
stable fetch
and WebStreams
, a new experimental flag to change the interpretation of ambiguous code
from CommonJS to ES modules (--experimental-default-type
), many updates to our test runner, and more!
Node.js 21 will replace Node.js 20 as our βCurrentβ release line when Node.js 20 enters long-term support (LTS) later this month.
As per the release schedule, Node.js 21 will be βCurrent' release for the next 6 months, until April 2024.
Other Notable Changes
- [
740ca5423a
] - doc: promote fetch/webstreams from experimental to stable (Steven) #45684 - [
85301803e1
] - esm: --experimental-default-type flag to flip module defaults (Geoffrey Booth) #49869 - [
705e623ac4
] - esm: removeglobalPreload
hook (superseded byinitialize
) (Jacob Smith) #49144 - [
e01c1d700d
] - fs: add flush option to writeFile() functions (Colin Ihrig) #50009 - [
1948dce707
] - (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) #47653 - [
e28dbe1c2b
] - (SEMVER-MINOR) lib: add WebSocket client (Matthew Aitken) #49830 - [
95b8f5dcab
] - stream: optimize Writable (Robert Nagy) #50012 - [
7cd4e70948
] - (SEMVER-MAJOR) test_runner: support passing globs (Moshe Atlow) #47653 - [
1d220b55ac
] - vm: use default HDO when importModuleDynamically is not set (Joyee Cheung) #49950
Semver-Major Commits
- [
ac2a68c76b
] - (SEMVER-MAJOR) build: drop support for Visual Studio 2019 (MichaΓ«l Zasso) #49051 - [
4e3983031a
] - (SEMVER-MAJOR) build: bump supported macOS and Xcode versions (MichaΓ«l Zasso) #49164 - [
5a0777776d
] - (SEMVER-MAJOR) crypto: do not overwrite _writableState.defaultEncoding (Tobias NieΓen) #49140 - [
162a0652ab
] - (SEMVER-MAJOR) deps: bump minimum ICU version to 73 (MichaΓ«l Zasso) #49639 - [
17a74ddd3d
] - (SEMVER-MAJOR) deps: update V8 to 11.8.172.13 (MichaΓ«l Zasso) #49639 - [
e9ff81016d
] - (SEMVER-MAJOR) deps: update llhttp to 9.1.2 (Paolo Insogna) #48981 - [
7ace5aba75
] - (SEMVER-MAJOR) events: validate options ofon
andonce
(Deokjin Kim) #46018 - [
b3ec13d449
] - (SEMVER-MAJOR) fs: adjustposition
validation in reading methods (Livia Medeiros) #42835 - [
1948dce707
] - (SEMVER-MAJOR) fs: add globSync implementation (Moshe Atlow) #47653 - [
d68d0eacaa
] - (SEMVER-MAJOR) http: reduce parts in chunked response when corking (Robert Nagy) #50167 - [
c5b0b894ed
] - (SEMVER-MAJOR) lib: mark URL/URLSearchParams as uncloneable and untransferable (Chengzhong Wu) #47497 - [
3205b1936a
] - (SEMVER-MAJOR) lib: remove aix directory case for package reader (Yagiz Nizipli) #48605 - [
b40f0c3074
] - (SEMVER-MAJOR) lib: addnavigator.hardwareConcurrency
(Yagiz Nizipli) #47769 - [
4b08c4c047
] - (SEMVER-MAJOR) lib: runtime deprecate punycode (Yagiz Nizipli) #47202 - [
3ce51ae9c0
] - (SEMVER-MAJOR) module: harmonize error code between ESM and CJS (Antoine du Hamel) #48606 - [
7202859402
] - (SEMVER-MAJOR) net: do not treatserver.maxConnections=0
asInfinity
(ignoramous) #48276 - [
c15bafdaf4
] - (SEMVER-MAJOR) net: only defer _final call when connecting (Jason Zhang) #47385 - [
6ffacbf0f9
] - (SEMVER-MAJOR) node-api: rename internal NAPI_VERSION definition (Chengzhong Wu) #48501 - [
11af089b14
] - (SEMVER-MAJOR) src: update NODE_MODULE_VERSION to 120 (MichaΓ«l Zasso) #49639 - [
d920b7c94b
] - (SEMVER-MAJOR) src: throw DOMException on cloning non-serializable objects (Chengzhong Wu) #47839 - [
64549731b6
] - (SEMVER-MAJOR) src: throw DataCloneError on transfering untransferable objects (Chengzhong Wu) #47604 - [
dac8de689b
] - (SEMVER-MAJOR) stream: use private properties for strategies (Yagiz Nizipli) #47218 - [
1fa084ecdf
] - (SEMVER-MAJOR) stream: use private properties for encoding (Yagiz Nizipli) #47218 - [
4e93247079
] - (SEMVER-MAJOR) stream: use private properties for compression (Yagiz Nizipli) #47218 - [
527589b755
] - (SEMVER-MAJOR) test_runner: disallow array inrun
options (Raz Luvaton) #49935 - [
7cd4e70948
] - (SEMVER-MAJOR) test_runner: support passing globs (Moshe Atlow) #47653 - [
2ef170254b
] - (SEMVER-MAJOR) tls: usevalidateNumber
foroptions.minDHSize
(Deokjin Kim) #49973 - [
092fb9f541
] - (SEMVER-MAJOR) tls: use validateFunction foroptions.checkServerIdentity
(Deokjin Kim) #49896 - [
ccca547e28
] - (SEMVER-MAJOR) util: runtime deprecatepromisify
-ing a function returning aPromise
(Antoine du Hamel) #49609 - [
4038cf0513
] - (SEMVER-MAJOR) vm: freezedependencySpecifiers
array (Antoine du Hamel) #49720
Semver-Minor Commits
- [
3227d7327c
] - (SEMVER-MINOR) deps: update uvwasi to 0.0.19 (Node.js GitHub Bot) #49908 - [
e28dbe1c2b
] - (SEMVER-MINOR) lib: add WebSocket client (Matthew Aitken) #49830 - [
9f9c58212e
] - (SEMVER-MINOR) test_runner, cli: add --test-concurrency flag (Colin Ihrig) #49996 - [
d37b0d267f
] - (SEMVER-MINOR) wasi: updates required for latest uvwasi version (Michael Dawson) #49908
Semver-Patch Commits
- [
33c87ec096
] - benchmark: fix race condition on fs benchs (Vinicius Lourenço) #50035 - [
3c0ec61c4b
] - benchmark: add warmup to accessSync bench (Rafael Gonzaga) #50073 - [[
1a839f388e
](https://g...
2023-10-13, Version 20.8.1 (Current), @RafaelGSS
This is a security release.
Notable Changes
The following CVEs are fixed in this release:
- CVE-2023-44487:
nghttp2
Security Release (High) - CVE-2023-45143:
undici
Security Release (High) - CVE-2023-39332: Path traversal through path stored in Uint8Array (High)
- CVE-2023-39331: Permission model improperly protects against path traversal (High)
- CVE-2023-38552: Integrity checks according to policies can be circumvented (Medium)
- CVE-2023-39333: Code injection via WebAssembly export names (Low)
More detailed information on each of the vulnerabilities can be found in October 2023 Security Releases blog post.
Commits
- [
c86883e844
] - deps: update nghttp2 to 1.57.0 (James M Snell) #50121 - [
2860631359
] - deps: update undici to v5.26.3 (Matteo Collina) #50153 - [
cd37838bf8
] - lib: let deps requirenode
prefixed modules (Matthew Aitken) #50047 - [
f5c90b2951
] - module: fix code injection through export names (Tobias NieΓen) nodejs-private/node-private#461 - [
fa5dae1944
] - permission: fix Uint8Array path traversal (Tobias NieΓen) nodejs-private/node-private#456 - [
cd35275111
] - permission: improve path traversal protection (Tobias NieΓen) nodejs-private/node-private#456 - [
a4cb7fc7c0
] - policy: use tamper-proof integrity check function (Tobias NieΓen) nodejs-private/node-private#462
2023-10-13, Version 18.18.2 'Hydrogen' (LTS), @RafaelGSS
This is a security release.
Notable Changes
The following CVEs are fixed in this release:
- CVE-2023-44487:
nghttp2
Security Release (High) - CVE-2023-45143:
undici
Security Release (High) - CVE-2023-38552: Integrity checks according to policies can be circumvented (Medium)
- CVE-2023-39333: Code injection via WebAssembly export names (Low)
More detailed information on each of the vulnerabilities can be found in October 2023 Security Releases blog post.
Commits
- [
55028468db
] - deps: update undici to v5.26.3 (Matteo Collina) #50153 - [
a792bbc515
] - deps: update nghttp2 to 1.57.0 (James M Snell) #50121 - [
f6444defa4
] - deps: update nghttp2 to 1.56.0 (Node.js GitHub Bot) #49582 - [
7e9b08dfd4
] - deps: update nghttp2 to 1.55.1 (Node.js GitHub Bot) #48790 - [
85672c153f
] - deps: update nghttp2 to 1.55.0 (Node.js GitHub Bot) #48746 - [
300a902422
] - deps: update nghttp2 to 1.53.0 (Node.js GitHub Bot) #47997 - [
7d83ed0bf6
] - Revert "deps: update nghttp2 to 1.55.0" (Richard Lau) #50151 - [
1193ca5fdb
] - lib: let deps requirenode
prefixed modules (Matthew Aitken) #50047 - [
eaf9083cf1
] - module: fix code injection through export names (Tobias NieΓen) nodejs-private/node-private#461 - [
1c538938cc
] - policy: use tamper-proof integrity check function (Tobias NieΓen) nodejs-private/node-private#462
2023-10-10, Version 18.18.1 'Hydrogen' (LTS), @richardlau
Notable Changes
This release addresses some regressions that appeared in Node.js 18.18.0:
- (Windows) FS can not handle certain characters in file name #48673
- 18 and 20 node images give error - Text file busy (after re-build images) nodejs/docker-node#1968
- libuv update in 18.18.0 breaks webpack's thread-loader #49911
The libuv 1.45.0 and 1.46.0 updates that were released in Node.js 18.18.0 have been temporarily reverted.
Commits
- [
3e3a75cc46
] - Revert "build: sync libuv header change" (Richard Lau) #50036 - [
14ece2c479
] - Revert "deps: upgrade to libuv 1.45.0" (Richard Lau) #50036 - [
022352acbe
] - Revert "deps: upgrade to libuv 1.46.0" (Richard Lau) #50036 - [
d9f138189c
] - Revert "deps: add missing thread-common.c in uv.gyp" (Richard Lau) #50036 - [
7a3e1ffbb8
] - fs: make sure to write entire buffer (Robert Nagy) #49211 - [
04cba95a67
] - test: addtmpdir.resolve()
(Livia Medeiros) #49079
2023-09-28, Version 20.8.0 (Current), @ruyadorno
Notable Changes
Stream performance improvements
Performance improvements to writable and readable streams, improving the creation and destruction by Β±15% and reducing the memory overhead each stream takes in Node.js
Contributed by Benjamin Gruenbaum in #49745 and Raz Luvaton in #49834.
Performance improvements for readable webstream, improving readable stream async iterator consumption by Β±140% and improving readable stream pipeTo
consumption by Β±60%
Contributed by Raz Luvaton in #49662 and #49690.
Rework of memory management in vm
APIs with the importModuleDynamically
option
This rework addressed a series of long-standing memory leaks and use-after-free issues in the following APIs that support importModuleDynamically
:
vm.Script
vm.compileFunction
vm.SyntheticModule
vm.SourceTextModule
This should enable affected users (in particular Jest users) to upgrade from older versions of Node.js.
Contributed by Joyee Cheung in #48510.
Other notable changes
- [
32d4d29d02
] - deps: add v8::Object::SetInternalFieldForNodeCore() (Joyee Cheung) #49874 - [
0e686d096b
] - doc: deprecatefs.F_OK
,fs.R_OK
,fs.W_OK
,fs.X_OK
(Livia Medeiros) #49683 - [
a5dd057540
] - doc: deprecateutil.toUSVString
(Yagiz Nizipli) #49725 - [
7b6a73172f
] - doc: deprecate callingpromisify
on a function that returns a promise (Antoine du Hamel) #49647 - [
1beefd5f16
] - esm: set all hooks as release candidate (Geoffrey Booth) #49597 - [
b0ce78a75b
] - module: fix the leak in SourceTextModule and ContextifySript (Joyee Cheung) #48510 - [
4e578f8ab1
] - module: fix leak of vm.SyntheticModule (Joyee Cheung) #48510 - [
69e4218772
] - module: use symbol in WeakMap to manage host defined options (Joyee Cheung) #48510 - [
14ece0aa76
] - (SEMVER-MINOR) src: allow embedders to override NODE_MODULE_VERSION (Cheng Zhao) #49279 - [
9fd67fbff0
] - stream: use bitmap in writable state (Raz Luvaton) #49834 - [
0ccd4638ac
] - stream: use bitmap in readable state (Benjamin Gruenbaum) #49745 - [
7c5e322346
] - stream: improve webstream readable async iterator performance (Raz Luvaton) #49662 - [
80b342cc38
] - (SEMVER-MINOR) test_runner: accepttestOnly
inrun
(Moshe Atlow) #49753 - [
17a05b141d
] - (SEMVER-MINOR) test_runner: add junit reporter (Moshe Atlow) #49614
Commits
- [
4879e3fbbe
] - benchmark: add a benchmark for read() of ReadableStreams (Debadree Chatterjee) #49622 - [
78a6c73157
] - benchmark: shorten pipe-to by reducing number of chunks (Raz Luvaton) #49577 - [
4126a6e4c9
] - benchmark: fix webstream pipe-to (Raz Luvaton) #49552 - [
6010a91825
] - bootstrap: do not expand argv1 for snapshots (Joyee Cheung) #49506 - [
8480280c4b
] - bootstrap: only use the isolate snapshot when compiling code cache (Joyee Cheung) #49288 - [
b30754aa87
] - build: run embedtest using node executable (Joyee Cheung) #49506 - [
31db0b8e2b
] - build: add --write-snapshot-as-array-literals to configure.py (Joyee Cheung) #49312 - [
6fcb51d3ba
] - debugger: useinternal/url.URL
instead ofurl.parse
(LiviaMedeiros) #49590 - [
32d4d29d02
] - deps: add v8::Object::SetInternalFieldForNodeCore() (Joyee Cheung) #49874 - [
ad37cadc3f
] - deps: V8: backport de9a5de2274f (Joyee Cheung) #49703 - [
cdd1c66222
] - deps: V8: cherry-pick b33bf2dfd261 (Joyee Cheung) #49703 - [
61d18d6473
] - deps: update undici to 5.24.0 (Node.js GitHub Bot) #49559 - [
b8a4fef393
] - deps: remove pthread-fixes.c from uv.gyp (Ben Noordhuis) #49744 - [
6c86c0683c
] - deps: update googletest to d1467f5 (Node.js GitHub Bot) #49676 - [
1424404742
] - deps: update nghttp2 to 1.56.0 (Node.js GitHub Bot) #49582 - [
15b54ff95d
] - deps: update googletest to 8a6feab (Node.js GitHub Bot) #49463 - [
2ceab877c2
] - deps: update corepack to 0.20.0 (Node.js GitHub Bot) #49464 - [
4814872ddc
] - doc: fixDEP0176
number (LiviaMedeiros) #49858 - [
0e686d096b
] - doc: deprecatefs.F_OK
,fs.R_OK
,fs.W_OK
,fs.X_OK
(Livia Medeiros) #49683 - [
5877c403a2
] - doc: add mertcanaltin as a triager (mert.altin) #49826 - [
864fe56432
] - doc: addgit node backport
way to the backporting guide (Raz Luvaton) #49760 - [
e0f93492d5
] - doc: improve documentation about ICU data fallback (Joyee Cheung) #49666 - [
a5dd057540
] - doc: deprecateutil.toUSVString
(Yagiz Nizipli) #49725 - [
774c1cfd52
] - doc: add missing function call to example forutil.promisify
(Jungku Lee) #49719 - [
fe78a34845
] - doc: update output of example inmimeParams.set()
(Deokjin Kim) #49718 - [
4175ea33bd
] - doc: add missedinspect
with numericSeparator to example (Deokjin Kim) #49717 - [
3a88571972
] - doc: fix history comments (Antoine du Hamel) #49701 - [
db4ab1ccbb
] - doc: add missing history info forimport.meta.resolve
(Antoine du Hamel) #49700 - [
a304d1ee19
] - doc: link maintaining deps to pull-request.md (Marco Ippolito) #49716 - [
35294486ad
] - doc: fix print results inevents
(Jungku Lee) #49548 - [
9f0b0e15c9
] - doc: alphabetize cli.md sections (Geoffrey Booth) #49668 - [[
7b6a73172f
](7b6a731...
2023-09-18, Version 20.7.0 (Current), @UlisesGascon
Notable Changes
- [
022f1b70c1
] - src: support multiple--env-file
declarations (Yagiz Nizipli) #49542 - [
4a1d1cad61
] - crypto: update root certificates to NSS 3.93 (Node.js GitHub Bot) #49341 - [
a1a65f593c
] - deps: upgrade npm to 10.1.0 (npm team) #49570 - [
6c2480cad9
] - (SEMVER-MINOR) deps: upgrade npm to 10.0.0 (npm team) #49423 - [
bef900e56b
] - doc: move and rename loaders section (Geoffrey Booth) #49261 - [
db4ce8a593
] - doc: add release key for Ulises Gascon (Ulises GascΓ³n) #49196 - [
11c85ffa98
] - (SEMVER-MINOR) lib: add api to detect whether source-maps are enabled (ηΏ / green) #46391 - [
ec51e25ed7
] - src,permission: add multiple allow-fs-* flags (Carlos Espa) #49047 - [
efdc95fbc0
] - (SEMVER-MINOR) test_runner: expose location of tests (Colin Ihrig) #48975
Commits
- [
e84515594e
] - benchmark: usetmpdir.resolve()
(Livia Medeiros) #49137 - [
f37444e896
] - bootstrap: build code cache from deserialized isolate (Joyee Cheung) #49099 - [
af6dc1754d
] - bootstrap: do not generate code cache in an unfinalized isolate (Joyee Cheung) #49108 - [
cade5716df
] - build: add symlink tocompile_commands.json
file if needed (Juan JosΓ©) #49260 - [
34a2590b05
] - build: expand when we run internet tests (Michael Dawson) #49218 - [
f637fd46ab
] - build: fix typolibray
->library
(configure.py) (michalbiesek) #49106 - [
ef3d8dd493
] - crypto: remove webcrypto EdDSA key checks and properties (Filip Skokan) #49408 - [
4a1d1cad61
] - crypto: update root certificates to NSS 3.93 (Node.js GitHub Bot) #49341 - [
7eb10a38ea
] - crypto: remove getDefaultEncoding() (Tobias NieΓen) #49170 - [
772496c030
] - crypto: remove default encoding from DiffieHellman (Tobias NieΓen) #49169 - [
c795083232
] - crypto: remove default encoding from Hash/Hmac (Tobias NieΓen) #49167 - [
08197aa010
] - crypto: remove default encoding from sign/verify (Tobias NieΓen) #49145 - [
a1a65f593c
] - deps: upgrade npm to 10.1.0 (npm team) #49570 - [
6c2480cad9
] - (SEMVER-MINOR) deps: upgrade npm to 10.0.0 (npm team) #49423 - [
84195d9584
] - deps: add missing thread-common.c in uv.gyp (Santiago Gimeno) #49410 - [
5b70b68b3d
] - deps: V8: cherry-pick eadaef581c29 (Adam Majer) #49401 - [
fe34d632e8
] - deps: update zlib to 1.2.13.1-motley-f5fd0ad (Node.js GitHub Bot) #49252 - [
db4ce8a593
] - doc: add release key for Ulises Gascon (Ulises GascΓ³n) #49196 - [
e5f3a694cf
] - doc: fix node-api call example (Chengzhong Wu) #49395 - [
021345a724
] - doc: add news issue for Diagnostics WG (Michael Dawson) #49306 - [
f82347266b
] - doc: clarify policy expectations (Rafael Gonzaga) #48947 - [
73cfd9c895
] - doc: add print results for examples inStringDecoder
(Jungku Lee) #49326 - [
63ab591416
] - doc: update outdated reference to NIST SP 800-131A (Tobias NieΓen) #49316 - [
935dfe2afd
] - doc: usecjs
as block code's type inMockTimers
(Deokjin Kim) #49309 - [
7c0cd2fb87
] - doc: updateoptions.filter
description forfs.cp
(Shubham Pandey) #49289 - [
f72e79ea67
] - doc: add riscv64 to list of architectures (Stewart X Addison) #49284 - [
d19c710064
] - doc: avoid "not currently recommended" (Tobias NieΓen) #49300 - [
ae656101c0
] - doc: update module hooks docs (Geoffrey Booth) #49265 - [
fefbdb92f2
] - doc: modify param description for end(),write() inStringDecoder
(Jungku Lee) #49285 - [
59e66a1ebe
] - doc: use NODE_API_SUPPORTED_VERSION_MAX in release doc (Cheng Zhao) #49268 - [
ac3b88449b
] - doc: fix typo instream.finished
documentation (Antoine du Hamel) #49271 - [
7428ebf6c3
] - doc: update description forpercent_encode
sets inWHATWG API
(Jungku Lee) #49258 - [
bef900e56b
] - doc: move and rename loaders section (Geoffrey Booth) #49261 - [
a22e0d9696
] - doc: clarify use of Uint8Array for n-api (Fedor Indutny) #48742 - [
1704f24cb9
] - doc: add signature formodule.register
(Geoffrey Booth) #49251 - [
5a363bb01b
] - doc: caveat unavailability ofimport.meta.resolve
in custom loaders (Jacob Smith) #49242 - [
8101f2b259
] - doc: use same name in the doc as in the code (Hyunjin Kim) #49216 - [
edf278d60d
] - doc: add notable-change label mention to PR template (Rafael Gonzaga) #49188 - [
3df2251a6a
] - doc: add h1 summary to security release process (Rafael Gonzaga) #49112 - [
9fcd99a744
] - doc: update to semver-minor releases by default (Rafael Gonzaga) #49175 - [
777931f499
] - doc: fix wording in napi_async_init (Tobias NieΓen) #49180 - [
f45c8e10c0
] - doc,test: add known path resolution issue in permission model (Tobias NieΓen) #49155 - [
a6cfea3f74
] - esm: align sync and async load implementations (Antoine du Hamel) [#49152](https://github.com/nodejs/node...
2023-09-18, Version 18.18.0 'Hydrogen' (LTS), @ruyadorno
Notable Changes
- [
7dc731d4bf
] - build: sync libuv header change (Jiawen Geng) #48078 - [
490fc004b0
] - crypto: update root certificates to NSS 3.93 (Node.js GitHub Bot) #49341 - [
dd8cd97d4d
] - crypto: update root certificates to NSS 3.90 (Node.js GitHub Bot) #48416 - [
ea23870bec
] - deps: add missing thread-common.c in uv.gyp (Santiago Gimeno) #48078 - [
88855e0b1b
] - deps: upgrade to libuv 1.46.0 (Santiago Gimeno) #48078 - [
fb2b80fca0
] - deps: upgrade to libuv 1.45.0 (Santiago Gimeno) #48078 - [
249879e46c
] - doc: add atlowChemi to collaborators (atlowChemi) #48757 - [
e8dc7bde6a
] - doc: add vmoroz to collaborators (Vladimir Morozov) #48527 - [
a30f2fbcc1
] - doc: add kvakil to collaborators (Keyhan Vakil) #48449 - [
c39b7c240e
] - (SEMVER-MINOR) esm: add--import
flag (Moshe Atlow) #43942 - [
a68a67f54d
] - (SEMVER-MINOR) events: allow safely adding listener to abortSignal (Chemi Atlow) #48596 - [
3a8586bee2
] - fs, stream: initialSymbol.dispose
andSymbol.asyncDispose
support (Moshe Atlow) #48518 - [
863bdb785d
] - net: add autoSelectFamily global getter and setter (Paolo Insogna) #45777 - [
c59ae86ba0
] - (SEMVER-MINOR) url: add value argument to has and delete methods (Sankalp Shubham) #47885
Commits
- [
d1f43317ea
] - benchmark: add bar.R (Rafael Gonzaga) #47729 - [
4f74be3c92
] - benchmark: refactor crypto oneshot (Filip Skokan) #48267 - [
fe9da9df0f
] - benchmark: add crypto.create*Key (Filip Skokan) #48284 - [
9cb18b3e9d
] - build: do not pass target toolchain flags to host toolchain (Ivan Trubach) #48597 - [
7dc731d4bf
] - build: sync libuv header change (Jiawen Geng) #48078 - [
211a4f88a9
] - build: update action to close stale PRs (Michael Dawson) #48196 - [
cc33a1864b
] - child_process: harden against prototype pollution (Livia Medeiros) #48726 - [
b5df084e1e
] - child_process: use addAbortListener (atlowChemi) #48550 - [
611db8df1a
] - child_process: supportSymbol.dispose
(Moshe Atlow) #48551 - [
490fc004b0
] - crypto: update root certificates to NSS 3.93 (Node.js GitHub Bot) #49341 - [
dd8cd97d4d
] - crypto: update root certificates to NSS 3.90 (Node.js GitHub Bot) #48416 - [
b2bc839d4c
] - crypto: remove OPENSSL_FIPS guard for OpenSSL 3 (Richard Lau) #48392 - [
c8da8c80b9
] - deps: update nghttp2 to 1.55.0 (Node.js GitHub Bot) #48746 - [
7e04242dcb
] - deps: update minimatch to 9.0.3 (Node.js GitHub Bot) #48704 - [
ea23870bec
] - deps: add missing thread-common.c in uv.gyp (Santiago Gimeno) #48078 - [
88855e0b1b
] - deps: upgrade to libuv 1.46.0 (Santiago Gimeno) #48078 - [
fb2b80fca0
] - deps: upgrade to libuv 1.45.0 (Santiago Gimeno) #48078 - [
59fca4e09a
] - deps: update acorn to 8.10.0 (Node.js GitHub Bot) #48713 - [
bcb255d5a8
] - deps: V8: cherry-pick cb00db4dba6c (Keyhan Vakil) #48671 - [
65a6c90fc6
] - deps: update acorn to 8.9.0 (Node.js GitHub Bot) #48484 - [
6b6d5d91e9
] - deps: update zlib to 1.2.13.1-motley-f81f385 (Node.js GitHub Bot) #48541 - [
56249b0770
] - deps: update googletest to ec4fed9 (Node.js GitHub Bot) #48538 - [
8914a5204a
] - deps: update minimatch to 9.0.2 (Node.js GitHub Bot) #48542 - [
1b960d9988
] - deps: update icu to 73.2 (Node.js GitHub Bot) #48502 - [
f0e2e3c549
] - deps: update zlib to 1.2.13.1-motley-3ca9f16 (Node.js GitHub Bot) #48413 - [
9cf8fe6b93
] - deps: upgrade npm to 9.8.1 (npm team) #48838 - [
d9ff473ff3
] - deps: upgrade npm to 9.8.0 (npm team) #48665 - [
4a6177daad
] - deps: upgrade npm to 9.7.2 (npm team) #48514 - [
104b58feb1
] - deps: update ada to 2.6.0 (Node.js GitHub Bot) #48896 - [
7f7a125d78
] - deps: update corepack to 0.19.0 (Node.js GitHub Bot) #48540 - [
5e1eb451d1
] - deps: update corepack to 0.18.1 (Node.js GitHub Bot) #48483 - [
3be53358bc
] - deps: add loong64 config into openssl gypi (Shi Pujin) #48043 - [
555982c59e
] - deps: upgrade npm to 9.7.1 (npm team) #48378 - [
3c03ec0832
] - deps: update simdutf to 3.2.14 (Node.js GitHub Bot) #48344 - [
a2964a4583
] - deps: update ada to 2.5.1 (Node.js GitHub Bot) #48319 - [
38f6e0d8cd
] - deps: update zlib to 982b036 (Node.js GitHub Bot) #48327 - [
f4617a4f81
] - deps: add loongarch64 into openssl Makefile and gen openssl-loongarch64 (Shi Pujin) #46401 - [
573eb4be12
] - dgram: socket addasyncDispose
(atlowChemi) #48717 - [
f3c4300e00
] - dgram: use addAbortListener (atlowChemi) #48550 - [
d3041df738
] - doc: expand on squashing and rebasing to land a PR (Chengzhong Wu) [#48751](#48...
2023-09-08, Version 20.6.1 (Current), @ruyadorno and @RafaelGSS
Commit
- [
8acbe6d8e8
] - esm: fix loading of CJS modules from ESM (Antoine du Hamel) #49500
2023-09-04, Version 20.6.0 (Current), @juanarbol prepared by @UlisesGascon
Notable changes
built-in .env
file support
Starting from Node.js v20.6.0, Node.js supports .env
files for configuring environment variables.
Your configuration file should follow the INI file format, with each line containing a key-value pair for an environment variable.
To initialize your Node.js application with predefined configurations, use the following CLI command: node --env-file=config.env index.js
.
For example, you can access the following environment variable using process.env.PASSWORD
when your application is initialized:
PASSWORD=nodejs
In addition to environment variables, this change allows you to define your NODE_OPTIONS
directly in the .env
file, eliminating the need to include it in your package.json
.
This feature was contributed by Yagiz Nizipli in #48890.
import.meta.resolve
unflagged
In ES modules, import.meta.resolve(specifier)
can be used to get an absolute URL string to which specifier
resolves, similar to require.resolve
in CommonJS. This aligns Node.js with browsers and other server-side runtimes.
This feature was contributed by Guy Bedford in #49028
New node:module
API register
for module customization hooks; new initialize
hook
There is a new API register
available on node:module
to specify a file that exports module customization hooks, and pass data to the hooks, and establish communication channels with them. The βdefine the file with the hooksβ part was previously handled by a flag --experimental-loader
, but when the hooks moved into a dedicated thread in 20.0.0 there was a need to provide a way to communicate between the main (application) thread and the hooks thread. This can now be done by calling register
from the main thread and passing data, including MessageChannel
instances.
We encourage users to migrate to an approach that uses --import
with register
, such as:
node --import ./file-that-calls-register.js ./app.js
Using --import
ensures that the customization hooks are registered before any application code runs, even the entry point.
This feature was contributed by Izaak Schroeder in #48842 and #48559
Module customization load
hook can now support CommonJS
Authors of module customization hooks can how handle both ES module and CommonJS sources in the load
hook. This works for CommonJS modules referenced via either import
or require
, so long as the main entry point of the application is handled by the ES module loader (such as because the entry point is an ES module file, or if the --import
flag is passed). This should simplify the customization of the Node.js module loading process, as package authors can customize more of Node.js without relying on deprecated APIs such as require.extensions
.
This feature was contributed by Antoine du Hamel in #47999
Node.js C++ addons now have experimental support for cppgc (Oilpan), a C++ garbage collection library in V8.
Now when Node.js starts up, it makes sure that there is a v8::CppHeap
attached to the V8 isolate. This enables users to allocate in the v8::CppHeap
using <cppgc/*>
headers from V8, which are now also included into the Node.js headers available to addons. Note that since Node.js only bundles the cppgc library coming from V8, the ABI stability of cppgc is currently not guaranteed in semver-minor and -patch updates, but we do not expect the ABI to break often, as it has been stable and battle-tested in Chromium for years. We may consider including cppgc into the ABI stability guarantees when it gets enough adoption internally and externally.
To help addon authors create JavaScript-to-C++ references of which V8's garbage collector can be aware, a helper function node::SetCppgcReference(isolate, js_object, cppgc_object)
has been added to node.h
. V8 may provide a native alternative in the future, which could then replace this Node.js-specific helper. In the mean time, users can use this API to avoid having to hard-code the layout of JavaScript wrapper objects. An example of how to create garbage-collected C++ objects in the unified heap and wrap it in a JavaScript object can be found in the Node.js addon tests.
The existing node::ObjectWrap
helper would continue to work, while cppgc-based object management serves as an alternative with some advantages mentioned in the V8 blog post about Oilpan.
This feature was contributed by Daryl Haresign and Joyee Cheung in #48660 and #45704.
Other notable changes
- [
d6862b085c
] - deps: V8: cherry-pick 93275031284c (Joyee Cheung) #48660 - [
00fc8bb8b3
] - doc: add rluvaton to collaborators (Raz Luvaton) #49215 - [
d649339abd
] - doc: add new TSC members (Michael Dawson) #48841 - [
67f9896247
] - (SEMVER-MINOR) inspector: open addSymbolDispose
(Chemi Atlow) #48765 - [
5aef593db3
] - module: implementregister
utility (JoΓ£o Lenon) #46826
Commits
- [
771abcb5da
] - benchmark: add benchmarks for the test_runner (Raz Luvaton) #48931 - [
6b27bb0dab
] - benchmark: add pm startup benchmark (Rafael Gonzaga) #48905 - [
1f35c0ca55
] - child_process: harden against prototype pollution (Livia Medeiros) #48726 - [
d6862b085c
] - deps: V8: cherry-pick 93275031284c (Joyee Cheung) #48660 - [
f71e383948
] - deps: update simdutf to 3.2.17 (Node.js GitHub Bot) #49019 - [
e14f0456ae
] - deps: update googletest to 7e33b6a (Node.js GitHub Bot) #49034 - [
bfaa0fb500
] - deps: update zlib to 1.2.13.1-motley-526382e (Node.js GitHub Bot) #49033 - [
b79c652c85
] - deps: update undici to 5.23.0 (Node.js GitHub Bot) #49021 - [
6ead86145c
] - deps: update googletest to c875c4e (Node.js GitHub Bot) #48964 - [
4b0e50501e
] - deps: update ada to 2.6.0 (Node.js GitHub Bot) #48896 - [
d960ee0ba3
] - deps: upgrade npm to 9.8.1 (npm team) #48838 - [
d92b0139ca
] - deps: update zlib to 1.2.13.1-motley-61dc0bd (Node.js GitHub Bot) #48788 - [
2a7835c376
] - deps: V8: cherry-pick 9f4b7699f68e (Joyee Cheung) #48830 - [
c8e17829ac
] - deps: V8: cherry-pick c1a54d5ffcd1 (Joyee Cheung) #48830 - [
318e075b6f
] - deps: update googletest to cc36671 (Node.js GitHub Bot) #48789 - [
114e088267
] - diagnostics_channel: fix last subscriber removal (Gabriel Schulhof) #48933 - [
00fc8bb8b3
] - doc: add rluvaton to collaborators (Raz Luvaton) #49215 - [
21949c45b6
] - doc: add print results for examples inWebStreams
(Jungku Lee) #49143 - [
032107a6fe
] - doc: fixType
notation in webstreams (Deokjin Kim) #49121 - [
91d41e7c5a
] - doc: fix name of the flag ininitialize()
docs (Antoine du Hamel) #49158 - [[
aa4caf810e
](https://github.com/nodejs/...