Skip to content

Releases: nodejs/node

2024-11-20, Version 23.3.0 (Current), @RafaelGSS

20 Nov 23:00
v23.3.0
Compare
Choose a tag to compare

Notable Changes

  • [5767b76c30] - doc: enforce strict policy to semver-major releases (Rafael Gonzaga) #55732
  • [ccb69bb8d5] - (SEMVER-MINOR) src: add cli option to preserve env vars on dr (Rafael Gonzaga) #55697
  • [d4e792643d] - (SEMVER-MINOR) util: add sourcemap support to getCallSites (Marco Ippolito) #55589
  • [00e092bb4b] - (SEMVER-MINOR) util: fix util.getCallSites plurality (Chengzhong Wu) #55626

Commits

  • [9862912d41] - assert: differentiate cases where cause is undefined or missing (Antoine du Hamel) #55738
  • [32e5bbca95] - benchmark: add test-reporters (Aviv Keller) #55757
  • [c2103354e6] - benchmark: add test_runner/mock-fn (Aviv Keller) #55771
  • [472d55e3e4] - build: implement node_use_amaro flag in GN build (Cheng) #55798
  • [77735674eb] - build: use glob for dependencies of out/Makefile (Richard Lau) #55789
  • [bba7323d51] - build: apply cpp linting and formatting to ncrypto (Aviv Keller) #55362
  • [e0c222525e] - crypto: allow length=0 for HKDF and PBKDF2 in SubtleCrypto.deriveBits (Filip Skokan) #55866
  • [cad557ec53] - deps: update simdutf to 5.6.1 (Node.js GitHub Bot) #55850
  • [dc8aca3692] - deps: update undici to 6.21.0 (Node.js GitHub Bot) #55851
  • [e0db9ede4f] - deps: update c-ares to v1.34.3 (Node.js GitHub Bot) #55803
  • [e147935144] - deps: update icu to 76.1 (Node.js GitHub Bot) #55551
  • [e0ef65b8d5] - doc: remove non-working example (Antoine du Hamel) #55856
  • [ec953bca09] - doc: add node:sqlite to mandatory node: prefix list (翠 / green) #55846
  • [1b863b96d5] - doc: add -S flag release preparation example (Antoine du Hamel) #55836
  • [a8311847d1] - doc: clarify UV_THREADPOOL_SIZE env var usage (Preveen P) #55832
  • [787e51e603] - doc: add notable-change mention to sec release (Rafael Gonzaga) #55830
  • [e56265cc18] - doc: fix history info for URL.prototype.toJSON (Antoine du Hamel) #55818
  • [c5afdaf5cb] - doc: correct max-semi-space-size statement (Joe Bowbeer) #55812
  • [65ffb2cae3] - doc: update unflag info of import.meta.resolve (skyclouds2001) #55810
  • [9aeb671677] - doc: run license-builder (github-actions[bot]) #55813
  • [df5ea1a5b3] - doc: clarify triager role (Gireesh Punathil) #55775
  • [aa12de0f03] - doc: sort --report-exclude alphabetically (Rafael Gonzaga) #55788
  • [8576ca9897] - doc: clarify removal of experimental API does not require a deprecation (Antoine du Hamel) #55746
  • [5767b76c30] - doc: enforce strict policy to semver-major releases (Rafael Gonzaga) #55732
  • [1f2fcf1dc8] - doc: add history entries for JSON modules stabilization (Antoine du Hamel) #55855
  • [83ba688d8f] - esm: fix import.meta.resolve crash (Marco Ippolito) #55777
  • [bdb6d12e7a] - events: add hasEventListener util for validate (Sunghoon) #55230
  • [d41cb49516] - fs: prevent unwanted dependencyOwners removal (Carlos Espa) #55565
  • [db0d648d8f] - fs: fix bufferSize option for opendir recursive (Ethan Arrowood) #55744
  • [693fda0802] - lib: remove unused file fetch_module (Michaël Zasso) #55880
  • [156873303a] - lib: prefer symbol to number in webidl type function (Antoine du Hamel) #55737
  • [cfe28b161a] - lib: remove unnecessary optional chaining (Gürgün Dayıoğlu) #55728
  • [bbb8f5914d] - lib: use Promise.withResolvers() in timers (Yagiz Nizipli) #55720
  • [11e1bdd409] - module: tidy code string concat → string templates (Jacob Smith) #55820
  • [9c99255468] - permission: ignore internalModuleStat on module loading (Rafael Gonzaga) #55797
  • [5a437c446f] - report: fix network queries in getReport libuv with exclude-network (Adrien Foulon) #55602
  • [bcbba723de] - sqlite: add support for SQLite Session Extension (Bart Louwers) #54181
  • [49d55228de] - src: use env strings to create sqlite results (Michaël Zasso) #55785
  • [58d7a6ec10] - Revert "src: migrate String::Value to String::ValueView" (Michaël Zasso) #55828
  • [16786a6df8] - src: improve node:os userInfo performance (Yagiz Nizipli) #55719
  • [ccb69bb8d5] - (SEMVER-MINOR) src: add cli option to preserve env vars on dr (Rafael Gonzaga) #55697
  • [770670c52c] - test: fix permission fixtures lint (Rafael Gonzaga) #55819
  • [84c47478d0] - test: improve test coverage for child process message sending (Juan José) #55710
  • [e1f54e2527] - test: ensure that test priority is not higher than current priority (Livia Medeiros) #55739
  • [e1b42e7637] - test: add buffer to fs_permission tests (Rafael Gonzaga) #55734
  • [d1ad43e9ae] - test: improve test coverage for ServerResponse (Juan José) #55711
  • [034505e037] - test_runner: error on mocking an already mocked date (Aviv Keller) #55858
  • [44324aa7e9] - tools: bump @eslint/plugin-kit from 0.2.0 to 0.2....
Read more

2024-11-20, Version 20.18.1 'Iron' (LTS), @marco-ippolito

20 Nov 14:40
v20.18.1
7017811
Compare
Choose a tag to compare

Notable Changes

Commits

  • [085c3441fe] - assert: show the diff when deep comparing data with a custom message (Giovanni) #54759
  • [01f0b0e7b4] - benchmark: adjust config for deepEqual object (Rafael Gonzaga) #55254
  • [a45537269b] - benchmark: rewrite detect-esm-syntax benchmark (Joyee Cheung) #55238
  • [1a0d8ef64f] - benchmark: add no-warnings to process.has bench (Rafael Gonzaga) #55159
  • [2be5d611ce] - benchmark: create benchmark for typescript (Marco Ippolito) #54904
  • [a2aa4fa477] - benchmark: include ascii to fs/readfile (Rafael Gonzaga) #54988
  • [09849105fe] - benchmark: add dotenv benchmark (Aviv Keller) #54278
  • [6b3c24dbad] - buffer: fix out of range for toString (Jason Zhang) #54553
  • [f25a5b6dc4] - build: use rclone instead of aws CLI (Michaël Zasso) #55617
  • [0bbeb605de] - build: fix notify-on-review-wanted action (Rafael Gonzaga) #55304
  • [5b35836732] - build: include .nycrc in coverage workflows (Wuli Zuo) #55210
  • [f38d1e90e0] - build: notify via slack when review-wanted (Rafael Gonzaga) #55102
  • [0b985ec4bb] - build: remove -v flag to reduce noise (iwuliz) #55025
  • [09f75b27a1] - build: display free disk space after build in the test-macOS workflow (iwuliz) #55025
  • [f25760c4a2] - build: add the option to generate compile_commands.json in vcbuild.bat (Segev Finer) #52279
  • [746e78c4f3] - Revert "build: upgrade clang-format to v18" (Chengzhong Wu) #54994
  • [67834ee646] - build: print Running XYZ linter... for py and yml (Aviv Keller) #54386
  • [ae34e276a2] - build: pin doc workflow to Node.js 20 (Richard Lau) #55755
  • [d0e871a706] - build,win: add winget config to set up env (Hüseyin Açacak) #54729
  • [93ac799b6b] - cli: fix spacing for port range error (Aviv Keller) #54495
  • [3ba2e7bf97] - Revert "console: colorize console error and warn" (Aviv Keller) #54677
  • [2f678ea53b] - crypto: ensure invalid SubtleCrypto JWK data import results in DataError (Filip Skokan) #55041
  • [5d28d98542] - deps: update undici to 6.20.0 (Node.js GitHub Bot) #55329
  • [0c7f2fc421] - deps: update archs files for openssl-3.0.15+quic1 (Node.js GitHub Bot) #55184
  • [da15e7edf5] - deps: upgrade openssl sources to quictls/openssl-3.0.15+quic1 (Node.js GitHub Bot) #55184
  • [381f1f9d08] - deps: update archs files for openssl-3.0.14+quic1 (Node.js GitHub Bot) #54336
  • [48d643f78a] - deps: upgrade openssl sources to quictls/openssl-3.0.14+quic1 (Node.js GitHub Bot) #54336
  • [7b1796803b] - deps: update timezone to 2024b (Node.js GitHub Bot) #55056
  • [8f1956c588] - deps: update acorn-walk to 8.3.4 (Node.js GitHub Bot) #54950
  • [20501a7350] - deps: update corepack to 0.29.4 (Node.js GitHub Bot) #54845
  • [0f81eafecc] - doc: fix Markdown linter (Antoine du Hamel) #55344
  • [df713f0a98] - Revert "doc: update test context.assert" (Antoine du Hamel) #55344
  • [fd6fc61d2c] - doc: add pmarchini to collaborators (Pietro Marchini) #55331
  • [b963db9ee2] - doc: fix events.once() example using AbortSignal (Ivo Janssen) #55144
  • [50b13bfb12] - doc: add onboarding details for ambassador program (Marco Ippolito) #55284
  • [27564b7811] - doc: fix initial default value of autoSelectFamily (Ihor Rohovets) #55245
  • [9e7be23aa5] - doc: tweak onboarding instructions (Michael Dawson) #55212
  • [f412a029c3] - doc: update test context.assert (Pietro Marchini) #55186
  • [2f7828debb] - doc: fix unordered error anchors (Antoine du Hamel) #55242
  • [d08e4c235b] - doc: mention addons to experimental permission (Rafael Gonzaga) #55166
  • [d65c2458dc] - doc: use correct dash in stability status (Antoine du Hamel) #55200
  • [d9839c16cf] - doc: fix link in test/README.md (Livia Medeiros) #55165
  • [1ad659afa4] - doc: add esm examples to node:net (Alfredo González) #55134
  • [81ad69d50f] - doc: move the YAML changes element (sendoru) #55112
  • [7a51a161be] - doc: fix the require resolve algorithm in modules.md (chirsz) #55117
  • [80edcdf899] - doc: update style guide (Aviv Keller) #53223
  • [388c754dd2] - doc: add missing : to run()'s globPatterns (Aviv Keller) #55135
  • [94302b6a76] - doc: add abmusse to collaborators (Abdirahim Musse) #55086
  • [27ff2da964] - doc: add note about --expose-internals (Aviv Keller) #52861
  • [df6dc753b7] - doc: remove parseREPLKeyword from REPL documentation (Aviv Keller) #54749
  • [4baa5c4d10] - doc: change backporting guide with updated info (Aviv Keller) #53746
  • [9947fc112f] - doc: add missing definitio...
Read more

2024-11-12, Version 18.20.5 'Hydrogen' (LTS), @aduh95

12 Nov 21:41
v18.20.5
f73db8f
Compare
Choose a tag to compare

Notable Changes

  • [ac37e554a5] - esm: mark import attributes and JSON module as stable (Nicolò Ribaudo) #55333

Commits

Read more

2024-11-11, Version 23.2.0 (Current), @aduh95

11 Nov 20:44
v23.2.0
a83fbdb
Compare
Choose a tag to compare

Notable Changes

Update root certificates to NSS 3.104

This is the version of NSS that shipped in Firefox 131.0 on 2024-10-01.

Certificates added:

  • FIRMAPROFESIONAL CA ROOT-A WEB
  • TWCA CYBER Root CA
  • SecureSign Root CA12
  • SecureSign Root CA14
  • SecureSign Root CA15

Other notable changes

  • [fa61dced44] - doc: move typescript support to active development (Marco Ippolito) #55536
  • [9dcca5441b] - doc: add jazelly to collaborators (Jason Zhang) #55531
  • [f628fc43cb] - (SEMVER-MINOR) fs: make dirent.path writable (Antoine du Hamel) #55547
  • [25b1422337] - (SEMVER-MINOR) http: add diagnostic channel http.client.request.created (Marco Ippolito) #55586
  • [adda37f00c] - (SEMVER-MINOR) module: add findPackageJSON util (Jacob Smith) #55412
  • [69dd1e13c3] - (SEMVER-MINOR) module: add module.stripTypeScriptTypes (Marco Ippolito) #55282

Commits

  • [9dbb255efb] - assert: fix deepStrictEqual on errors when cause is not undefined (Edigleysson Silva (Edy)) #55406
  • [7af76ef0b3] - assert: fix the string length check for printing the simple diff (Giovanni Bucci) #55474
  • [34483a299b] - benchmark: add nodeTiming.uvmetricsinfo bench (RafaelGSS) #55614
  • [b79e4835ab] - build: use rclone instead of aws CLI (Michaël Zasso) #55617
  • [7ab1f46b8a] - build: stop pre-compiling lint-md (Aviv Keller) #55266
  • [4887214e23] - build: fix building with system icu 76 (Michael Cho) #55563
  • [f8df27aa5a] - build: fix GN arg used in generate_config_gypi.py (Shelley Vohr) #55530
  • [bb78904548] - build: fix GN build for sqlite and nghttp2 (Shelley Vohr) #55529
  • [535f1b0d4c] - crypto: update root certificates to NSS 3.104 (Richard Lau) #55681
  • [9b351b0749] - crypto: fix RSA_PKCS1_PADDING error message (Richard Lau) #55629
  • [4b192daac0] - deps: update acorn to 8.14.0 (Node.js GitHub Bot) #55699
  • [dfb764cbc6] - deps: update sqlite to 3.47.0 (Node.js GitHub Bot) #55557
  • [3477492588] - deps: update amaro to 0.2.0 (Node.js GitHub Bot) #55601
  • [3a1d490535] - deps: update nghttp2 to 1.64.0 (Node.js GitHub Bot) #55559
  • [50552fdc92] - deps: update acorn to 8.13.0 (Node.js GitHub Bot) #55558
  • [1b82013f06] - deps: update undici to 6.20.1 (Node.js GitHub Bot) #55503
  • [09060045b1] - dns: stop using deprecated ares_query (Aviv Keller) #55430
  • [2d0914f337] - doc: consolidate history table of CustomEvent (Edigleysson Silva) #55758
  • [cbe09b579f] - doc: add path aliases typescript doc (Carlos Espa) #55766
  • [89aa83842a] - doc: add esm example in path.md (Aviv Keller) #55745
  • [ee12431298] - doc: consistent use of word child process (Gireesh Punathil) #55654
  • [20cb52d1d8] - doc: clarity to available addon options (Preveen P) #55715
  • [bffbaa13a2] - doc: update --max-semi-space-size description (Joe Bowbeer) #55495
  • [505ff199b6] - doc: broken PerformanceObserver code sample (Dom Harrington) #54227
  • [b8ca9d89f4] - doc: add write flag when open file as the demo code's intention (robberfree) #54626
  • [6662752b62] - doc: add a note on console stream behavior (Gireesh Punathil) #55616
  • [9743fa44ed] - doc: remove mention of ECDH-ES in crypto.diffieHellman (Filip Skokan) #55611
  • [5de2567644] - doc: improve c++ embedder API doc (Gireesh Punathil) #55597
  • [f355054ec7] - doc: capitalize "MIT License" (Aviv Keller) #55575
  • [fa61dced44] - doc: move typescript support to active development (Marco Ippolito) #55536
  • [f77bf65059] - doc: add suggested tsconfig for type stripping (Marco Ippolito) #55534
  • [f00ad27132] - doc: add esm examples to node:string_decoder (Alfredo González) #55507
  • [9dcca5441b] - doc: add jazelly to collaborators (Jason Zhang) #55531
  • [f628fc43cb] - (SEMVER-MINOR) fs: make dirent.path writable (Antoine du Hamel) #55547
  • [dd9b6833c7] - Revert "fs,win: fix bug in paths with trailing slashes" (Rod Vagg) #55527
  • [8d0526f1f4] - http: add diagnostic channel http.server.response.created (Marco Ippolito) #55622
  • [25b1422337] - (SEMVER-MINOR) http: add diagnostic channel http.client.request.created (Marco Ippolito) #55586
  • [f92f20b930] - http: don't emit error after destroy (Robert Nagy) #55457
  • [137aa5c9f6] - http2: fix client async storage persistence (Orgad Shaneh) #55460
  • [d1965f9f5b] - lib: implement webidl dictionary converter and use it in structuredClone (Jason Zhang) #55489
  • [bf552fa3cc] - lib: prefer number to string in webidl type function (Jason Zhang) #55489
  • [7bfd295416] - meta: bump actions/setup-python from 5.2.0 to 5.3.0 (dependabot[bot]) #55688
  • [21e3b7b2f4] - meta: bump actions/setup-node from 4.0.4 to 4.1.0 (dependabot[bot]) #55687
  • [2ae8d3b2ff] - meta: bump rtCamp/action-slack-notify from 2.3.0 to 2.3.2 (dependabot[bot]) #55686
  • [42e6c47086] - meta: bump actions...
Read more

2024-10-29, Version 22.11.0 'Jod' (LTS), @richardlau

29 Oct 15:11
v22.11.0
4e0f277
Compare
Choose a tag to compare

Notable Changes

This release marks the transition of Node.js 22.x into Long Term Support (LTS)
with the codename 'Jod'. The 22.x release line now moves into "Active LTS"
and will remain so until October 2025. After that time, it will move into
"Maintenance" until end of life in April 2027.

Other than updating metadata, such as the process.release object, to reflect
that the release is LTS, no further changes from Node.js 22.10.0 are included.

OpenSSL 3.x

Official binaries for Node.js 22.x currently include OpenSSL 3.0.x (more
specifically, the quictls OpenSSL fork).
OpenSSL 3.0.x is the currently designated long term support version that is
scheduled to be supported until 7th September 2026, which is within the expected
lifetime of Node.js 22.x. We are expecting upstream OpenSSL to announce a
successor long term support version prior to that date and since OpenSSL now
follows a semantic versioning-like versioning scheme we expect to be able to
update to the next long term supported version of OpenSSL during the lifetime of
Node.js 22.x.

2024-10-24, Version 23.1.0 (Current), @aduh95

24 Oct 21:30
v23.1.0
17fae65
Compare
Choose a tag to compare

Notable Changes

Buffer now work with resizable ArrayBuffer

When a Buffer is created using a resizable ArrayBuffer, the Buffer length
will now correctly change as the underlying ArrayBuffer size is changed.

const ab = new ArrayBuffer(10, { maxByteLength: 20 });
const buffer = Buffer.from(ab);
console.log(buffer.byteLength); 10
ab.resize(15);
console.log(buffer.byteLength); 15
ab.resize(5);
console.log(buffer.byteLength); 5

Contributed by James M Snell in #55377.

MockTimers test runner API is now stable

MockTimers, introduced in April 2023, has just reached stable status. This
API provides comprehensive support for mocking Date and all major timers in
Node.js, including setTimeout, setInterval, and setImmediate, both from
the node:timers, node:timers/promises modules and global objects. After
months of refinement, developers can now fully rely on MockTimers for testing
time-based operations with confidence, ensuring better control over asynchronous
behavior in their Node.js applications.

Example usage with initial Date object as time set:

import { mock } from 'node:test';
mock.timers.enable({ apis: ['Date'], now: new Date('1970-01-01') });

Contributed by Erick Wendel in #55398.

JSON modules and import attributes are now stable

The two proposals reached stage 4 of the TC39 process, at the October 2024
meeting. The Node.js implementation already matches exactly the semantics
required by the proposals.

Contributed by Nicolò Ribaudo by #55333.

Other Notable Changes

  • [4ba31b7f20] - (SEMVER-MINOR) assert: make assertion_error use Myers diff algorithm (Giovanni Bucci) #54862
  • [dcbc5fbe65] - (SEMVER-MINOR) lib: add UV_UDP_REUSEPORT for udp (theanarkh) #55403
  • [ec867ac7ce] - (SEMVER-MINOR) net: add UV_TCP_REUSEPORT for tcp (theanarkh) #55408

Commits

  • [4ba31b7f20] - (SEMVER-MINOR) assert: make assertion_error use Myers diff algorithm (Giovanni Bucci) #54862
  • [fe667bea28] - assert: fix deepEqual always return true on URL (Xuguang Mei) #50853
  • [aca03d9083] - benchmark: add --runs support to run.js (Rafael Gonzaga) #55158
  • [c5abf50692] - benchmark: adjust byte size for buffer-copy (Rafael Gonzaga) #55295
  • [d3618b2334] - benchmark: adjust config for deepEqual object (Rafael Gonzaga) #55254
  • [c05582da3d] - (SEMVER-MINOR) buffer: make Buffer work with resizable ArrayBuffer (James M Snell) #55377
  • [194bb0fca5] - build: fix GN build for cares/uv deps (Cheng) #55477
  • [8eb5359592] - build: fix uninstall script for AIX 7.1 (Cloorc) #55438
  • [32f7d5ad1c] - build: conditionally compile bundled sqlite (Richard Lau) #55409
  • [2147e496e7] - build: tidy up cares.gyp (Richard Lau) #55445
  • [2beae50c77] - build: synchronize list of c-ares source files (Richard Lau) #55445
  • [f48d30eb9f] - build: fix path concatenation (Mohammed Keyvanzadeh) #55387
  • [d42522eec5] - build: fix make errors that occur in Makefile (minkyu_kim) #55287
  • [52da293471] - cli: add --heap-prof flag available to NODE_OPTIONS (Juan José) #54259
  • [adead26815] - crypto: include openssl/rand.h explicitly (Shelley Vohr) #55425
  • [df2f1adf9e] - deps: V8: cherry-pick f915fa4c9f41 (Chengzhong Wu) #55484
  • [bfc10a975f] - deps: update googletest to df1544b (Node.js GitHub Bot) #55465
  • [45ef1809bd] - deps: update c-ares to v1.34.2 (Node.js GitHub Bot) #55463
  • [c2b5ebfeca] - deps: update ada to 2.9.1 (Node.js GitHub Bot) #54679
  • [903863cafa] - deps: update simdutf to 5.6.0 (Node.js GitHub Bot) #55379
  • [008fb5f7f4] - deps: patch V8 to 12.9.202.28 (Node.js GitHub Bot) #55371
  • [8b282228ae] - deps: update c-ares to v1.34.1 (Node.js GitHub Bot) #55369
  • [54d55f2337] - Revert "deps: disable io_uring support in libuv by default" (Santiago Gimeno) #55114
  • [bfb3c621c4] - deps: update libuv to 1.49.1 (Santiago Gimeno) #55114
  • [055d2b8919] - deps: update amaro to 0.1.9 (Node.js GitHub Bot) #55348
  • [c028d21b44] - diagnostics_channel: fix unsubscribe during publish (simon-id) #55116
  • [b4b6ddb777] - dns: honor the order option (Luigi Pinca) #55392
  • [37352cef7f] - doc: changed the command used to verify SHASUMS256 (adriancuadrado) #55420
  • [66bcf4c065] - doc: move dual package shipping docs to separate repo (Joyee Cheung) #55444
  • [04b41bda03] - doc: add note about stdio streams in child_process (Ederin (Ed) Igharoro) #55322
  • [689d3a3e41] - doc: add isBigIntObject to documentation (leviscar) #55450
  • [784c825a27] - doc: remove outdated remarks about highWaterMark in fs (Ian Kerins) #55462
  • [1ec25e8573] - doc: move Danielle Adams key to old gpg keys (RafaelGSS) #55399
  • [7d5bb097eb] - doc: move Bryan English key to old gpg keys (RafaelGSS) #55399
  • [2967471f67] - doc: move Beth Griggs keys to old gpg keys (RafaelGSS) #55399
  • [0be3a7505f] - doc: add changelog for mocktimers (Erick Wendel) #55398
  • [e15f779794] - doc: spell out condition restrictions (Jan Martin) #55187
  • [c3f2216a7d] - doc: add instructions for WinGet build (Hüseyin Açacak) #55356
  • [bdc2c3bb94] - doc: add missing return values in buffer docs (Karl Horky) #55273
  • [41f68f59af] - doc: fix ambasador markdown list (Rafael Gonzaga) #55361
  • [bbd5318729] - esm: add a fallback when importer in not a file (Antoine du Hamel) #55471
  • [[`22d7777...
Read more

2024-10-16, Version 23.0.0 (Current), @RafaelGSS

16 Oct 15:42
v23.0.0
Compare
Choose a tag to compare

We’re excited to announce the release of Node.js 23! Key highlights include:

  • Enabling require(esm) by default for Node.js applications
  • Removing support for Windows 32-bit systems
  • Stabilizing the node --run command
  • Enhancements to the test runner, including glob pattern support for coverage files

Node.js 23 will replace Node.js 22 as the ‘Current’ release line when Node.js 22 enters long-term support (LTS) later this month.
According to the release schedule, Node.js 23 will remain the ‘Current’ release for the next six months, until April 2025.

Other Notable Changes

  • [7ad0cc3e57] - (SEMVER-MAJOR) build: remove support for 32-bit Windows (Michaël Zasso) #53184
  • [83eb4f2855] - (SEMVER-MINOR) deps: V8: cherry-pick cd10ad7cdbe5 (Joyee Cheung) #52535
  • [b8493a5789] - doc: add abmusse to collaborators (Abdirahim Musse) #55086
  • [7fab6e8885] - (SEMVER-MAJOR) doc: use gcc 12 on AIX for Node.js >=23 (Richard Lau) #54338
  • [d473606040] - (SEMVER-MINOR) lib: propagate aborted state to dependent signals before firing events (jazelly) #54826
  • [06206af181] - (SEMVER-MINOR) module: unflag --experimental-require-module (Joyee Cheung) #55085
  • [0b9249e335] - (SEMVER-MINOR) module: implement the "module-sync" exports condition (Joyee Cheung) #54648
  • [92a25abca9] - (SEMVER-MINOR) path: add matchGlob method (Aviv Keller) #52881
  • [12dd4c7575] - src: mark node --run as stable (Yagiz Nizipli) #53763
  • [4174b73153] - test: support glob matching coverage files (Aviv Keller) #53553

Semver-Major Commits

  • [764b13d75c] - (SEMVER-MAJOR) assert,util: change WeakMap and WeakSet comparison handling (Cristian Barlutiu) #53495
  • [3800d60c66] - (SEMVER-MAJOR) buffer: throw when writing beyond buffer" (Robert Nagy) #54588
  • [17fd32790a] - (SEMVER-MAJOR) buffer: make File cloneable (Matthew Aitken) #47613
  • [f68d7d2acc] - (SEMVER-MAJOR) build: reset embedder string to "-node.0" (Michaël Zasso) #54536
  • [9d0748c5df] - (SEMVER-MAJOR) build: disable ICF for mksnapshot (Leszek Swirski) #54077
  • [b7bcf3e121] - (SEMVER-MAJOR) build: include v8-sandbox.h header in distribution (Michaël Zasso) #54077
  • [1dfa3b8255] - (SEMVER-MAJOR) build: reset embedder string to "-node.0" (Michaël Zasso) #54077
  • [046343ea9d] - (SEMVER-MAJOR) build: warn for GCC versions earlier than 12.2 (Michaël Zasso) #54081
  • [a5decd4c8d] - (SEMVER-MAJOR) build: drop experimental support for Windows <10 (Michaël Zasso) #54079
  • [7ad0cc3e57] - (SEMVER-MAJOR) build: remove support for 32-bit Windows (Michaël Zasso) #53184
  • [c7e42092f3] - (SEMVER-MAJOR) build: compile with C++20 support (Michaël Zasso) #45427
  • [e2b7e41e23] - (SEMVER-MAJOR) child_process: remove unused internal event (Rich Trott) #53793
  • [4f1fe8a015] - (SEMVER-MAJOR) cli: remove deprecated V8 flag (Omer Katz) #54761
  • [8f37492b65] - (SEMVER-MAJOR) cli: move --trace-atomics-wait to eol (Marco Ippolito) #52747
  • [f7e73cd1f2] - (SEMVER-MAJOR) cli: remove --no-experimental-global-customevent flag (Daeyeon Jeong) #52723
  • [311504125f] - (SEMVER-MAJOR) cli: remove --no-experimental-fetch flag (Filip Skokan) #52611
  • [a30ae50860] - (SEMVER-MAJOR) cli: remove --no-experimental-global-webcrypto flag (Filip Skokan) #52564
  • [afe56aa58b] - (SEMVER-MAJOR) crypto: runtime deprecate crypto.fips (Yagiz Nizipli) #55019
  • [33a6d1fe3a] - (SEMVER-MAJOR) crypto: remove ERR_CRYPTO_SCRYPT_INVALID_PARAMETER (Tobias Nießen) #53305
  • [ff826069a8] - (SEMVER-MAJOR) crypto: move DEP0182 to runtime deprecation (Tobias Nießen) #52552
  • [6e150f9527] - (SEMVER-MAJOR) deps: V8: cherry-pick 97199f686e2f (Michaël Zasso) #54536
  • [1e16779fa1] - (SEMVER-MAJOR) deps: V8: cherry-pick 01a47f3ffff2 (Michaël Zasso) #54536
  • [762a440e68] - (SEMVER-MAJOR) deps: patch V8 to support older Clang versions (Michaël Zasso) #54536
  • [95f2213eed] - (SEMVER-MAJOR) deps: always define V8_NODISCARD as no-op (Michaël Zasso) #54536
  • [09d997f181] - (SEMVER-MAJOR) deps: fix FP16 bitcasts.h (Stefan Stojanovic) #54536
  • [1866363854] - (SEMVER-MAJOR) deps: patch V8 to support compilation with MSVC (StefanStojanovic) #54536
  • [6f4f22f84c] - (SEMVER-MAJOR) deps: patch V8 to avoid duplicated zlib symbol (Michaël Zasso) #54536
  • [dfff61475e] - (SEMVER-MAJOR) deps: disable V8 concurrent sparkplug compilation (Michaël Zasso) #54536
  • [69ad89f8eb] - (SEMVER-MAJOR) deps: always define V8_EXPORT_PRIVATE as no-op (Michaël Zasso) #54536
  • [5ab3140dfb] - (SEMVER-MAJOR) deps: update V8 to 12.9.202.18 (Michaël Zasso) #54536
  • [fba06eb34a] - (SEMVER-MAJOR) deps: remove bogus V8 DCHECK (Michaël Zasso) #54077
  • [5355603fb5] - (SEMVER-MAJOR) deps: V8: cherry-pick 00e9eeb3fb2c (Michaël Zasso) #54077
  • [bcc1e2716c] - (SEMVER-MAJOR) deps: V8: cherry-pick b1397772c70c (Michaël Zasso) #54077
  • [415bc750a5] - (SEMVER-MAJOR) deps: V8: cherry-pick 35888fee7bba (Joyee Cheung) #54077
  • [28f3e5c9d1] - (SEMVER-MAJOR) deps: always define V8_NODISCARD as no-op (Michaël Zasso) #54077
  • [a41c381cde] - (SEMVER-MAJOR) deps: fix FP16 bitcasts.h (Stefan Stojanovic) [#54077](https://github.com/nod...
Read more

2024-10-16, Version 22.10.0 (Current), @aduh95

16 Oct 22:49
v22.10.0
afe4bc6
Compare
Choose a tag to compare

Notable Changes

New "module-sync" exports condition

This release introduces a "module-sync" exports condition that's enabled when
require(esm) is enabled, so packages can supply a synchronous ES module to the
Node.js module loader, no matter if it's being required or imported. This is
similar to the "module" condition that bundlers have been using to support
require(esm) in Node.js, and allows dual-package authors to opt into ESM-first
only on newer versions of Node.js that supports require(esm) to avoid the
dual-package hazard.

{
  "type": "module",
  "exports": {
    "node": {
      // On new version of Node.js, both require() and import get
      // the ESM version
      "module-sync": "./index.js",
      // On older version of Node.js, where "module-sync" and require(esm) are
      // not supported, use the CJS version to avoid dual-package hazard.
      // When package authors think it's time to drop support for older versions of
      // Node.js, they can remove the exports conditions and just use "main": "index.js".
      "default": "./dist/index.cjs"
    },
    // On any other environment, use the ESM version.
    "default": "./index.js"
  }
}

Or if the package is only meant to be run on Node.js and wants to fallback to
CJS on older versions that don't have require(esm):

{
  "type": "module",
  "exports": {
    // On new version of Node.js, both require() and import get the ESM version
    "module-sync": "./index.js",
    // On older version of Node.js, where "module-sync" and require(esm) are
    // not supported, use the CJS version to avoid dual-package hazard.
    // When package authors think it's time to drop support for older versions of
    // Node.js, they can remove the exports conditions and just use "main": "index.js".
    "default": "./dist/index.cjs"
  }
}

For package authors: this only serves as a feature-detection mechanism for
packages that wish to support both CJS and ESM users during the period when some
active Node.js LTS versions support require(esm) while some older ones don't.
When all active Node.js LTS lines support require(esm), packages can simplify
their distributions by bumping the major version, dropping their CJS exports,
and removing the module-sync exports condition (with only main or default
targetting the ESM exports). If the package needs to support both bundlers and
being run unbundled on Node.js during the transition period, use both
module-sync and module and point them to the same ESM file. If the package
already doesn't want to support older versions of Node.js that doesn't support
require(esm), don't use this export condition.

For bundlers/tools: they should avoid implementing this stop-gap condition.
Most existing bundlers implement the de-facto bundler standard
module
exports condition, and that should be enough to support users who want to bundle
ESM from CJS consumers. Users who want both bundlers and Node.js to recognize
the ESM exports can use both module/module-sync conditions during the
transition period, and can drop module-sync+module when they no longer need
to support older versions of Node.js. If tools do want to support this
condition, it's recommended to make the resolution rules in the graph pointed by
this condition match the Node.js native ESM rules to avoid divergence.

We ended up implementing a condition with a different name instead of reusing
"module", because existing code in the ecosystem using the "module"
condition sometimes also expect the module resolution for these ESM files to
work in CJS style, which is supported by bundlers, but the native Node.js loader
has intentionally made ESM resolution different from CJS resolution (e.g.
forbidding import './noext' or import './directory'), so it would be
breaking to implement a "module" condition without implementing the forbidden
ESM resolution rules. For now, this just implements a new condition as
semver-minor so it can be backported to older LTS.

Contributed by Joyee Cheung in #54648.

node --run is now stable

This CLI flag runs a specified command from a package.json's "scripts" object.

For the following package.json:

{
  "scripts": {
    "test": "node --test-reporter junit --test ./test"
  }
}

You can run node --run test and that would start the test suite.

Contributed by Yagiz Nizipli in #53763.

Other notable changes

  • [f0b441230a] - (SEMVER-MINOR) crypto: add KeyObject.prototype.toCryptoKey (Filip Skokan) #55262
  • [349d2ed07b] - (SEMVER-MINOR) crypto: add Date fields for validTo and validFrom (Andrew Moon) #54159
  • [bebc95ed58] - doc: add abmusse to collaborators (Abdirahim Musse) #55086
  • [914db60159] - (SEMVER-MINOR) http2: expose nghttp2_option_set_stream_reset_rate_limit as an option (Maël Nison) #54875
  • [f7c3b03759] - (SEMVER-MINOR) lib: propagate aborted state to dependent signals before firing events (jazelly) #54826
  • [32261fc98a] - (SEMVER-MINOR) module: support loading entrypoint as url (RedYetiDev) #54933
  • [06957ff355] - (SEMVER-MINOR) module: implement flushCompileCache() (Joyee Cheung) #54971
  • [2dcf70c347] - (SEMVER-MINOR) module: throw when invalid argument is passed to enableCompileCache() (Joyee Cheung) #54971
  • [f9b19d7c44] - (SEMVER-MINOR) module: write compile cache to temporary file and then rename it (Joyee Cheung) #54971
  • [e95163b170] - (SEMVER-MINOR) process: add process.features.require_module (Joyee Cheung) #55241
  • [4050f68e5d] - (SEMVER-MINOR) process: add process.features.typescript (Aviv Keller) #54295
  • [86f7cb802d] - (SEMVER-MINOR) test_runner: support custom arguments in run() (Aviv Keller) #55126
  • [b62f2f8259] - (SEMVER-MINOR) test_runner: add 'test:summary' event (Colin Ihrig) #54851
  • [d7c708aec5] - (SEMVER-MINOR) test_runner: add support for coverage via run() (Chemi Atlow) #53937
  • [5fda4a1498] - (SEMVER-MINOR) worker: add markAsUncloneable api (Jason Zhang) #55234

Commits

  • [e3619510c8] - assert: show the diff when deep comparing data with a custom message (Giovanni) #54759
  • [39c7a9e70c] - benchmark: adjust config for deepEqual object (Rafael Gonzaga) #55254
  • [263526d5d0] - benchmark: rewrite detect-esm-syntax benchmark (Joyee Cheung) #55238
  • [cd0795fb00] - benchmark: add no-warnings to process.has bench (Rafael Gonzaga) #55159
  • [4352d9cc31] - benchmark: create benchmark for typescript (Marco Ippolito) #54904
  • [452bc9b48d] - benchmark: add webstorage benchmark (jakecastelli) #55040
  • [d4d5ba3a9b] - benchmark: include ascii to fs/readfile (Rafael Gonzaga) #54988
  • [23b628db65] - benchmark: add dotenv benchmark (Aviv Keller) #54278
  • [b1ebb0d8ca] - buffer: coerce extrema to int in blob.slice (Antoine du Hamel) #55141
  • [3a6e72483f] - buffer: extract Blob's .arrayBuffer() & webidl changes (Matthew Aitken) #53372
  • [d109f1c4ff] - buffer: use simdutf convert_latin1_to_utf8_safe (Robert Nagy) #54798
  • [77f8a3f9c2] - ...
Read more

2024-10-03, Version 20.18.0 'Iron' (LTS), @targos

03 Oct 18:00
v20.18.0
7eebd17
Compare
Choose a tag to compare

Notable Changes

Experimental Network Inspection Support in Node.js

This update introduces the initial support for network inspection in Node.js.
Currently, this is an experimental feature, so you need to enable it using the --experimental-network-inspection flag.
With this feature enabled, you can inspect network activities occurring within a JavaScript application.

To use network inspection, start your Node.js application with the following command:

$ node --inspect-wait --experimental-network-inspection index.js

Please note that the network inspection capabilities are in active development.
We are actively working on enhancing this feature and will continue to expand its functionality in future updates.

Contributed by Kohei Ueno in #53593 and #54246

Exposes X509_V_FLAG_PARTIAL_CHAIN to tls.createSecureContext

This releases introduces a new option to the API tls.createSecureContext. From
now on, tls.createSecureContext({ allowPartialTrustChain: true }) can be used
to treat intermediate (non-self-signed) certificates in the trust CA certificate
list as trusted.

Contributed by Anna Henningsen in #54790

New option for vm.createContext() to create a context with a freezable globalThis

Node.js implements a flavor of vm.createContext() and friends that creates a context without contextifying its global
object when vm.constants.DONT_CONTEXTIFY is used. This is suitable when users want to freeze the context
(impossible when the global is contextified i.e. has interceptors installed) or speed up the global access if they
don't need the interceptor behavior.

Contributed by Joyee Cheung in #54394

Deprecations

  • [64aa31f6e5] - repl: doc-deprecate instantiating node:repl classes without new (Aviv Keller) #54842
  • [4c52ee3d7f] - zlib: deprecate instantiating classes without new (Yagiz Nizipli) #54708

Other Notable Changes

  • [b80da2f964] - buffer: optimize createFromString (Robert Nagy) #54324
  • [02b36cbd2d] - (SEMVER-MINOR) lib: add EventSource Client (Aras Abbasi) #51575
  • [879546a9bf] - (SEMVER-MINOR) src,lib: add performance.uvMetricsInfo (Rafael Gonzaga) #54413
  • [f789f4c92d] - (SEMVER-MINOR) test_runner: support module mocking (Colin Ihrig) #52848
  • [4eb0749b6c] - (SEMVER-MINOR) url: implement parse method for safer URL parsing (Ali Hassan) #52280

Commits

  • [013c48f0e9] - benchmark: --no-warnings to avoid DEP/ExpWarn log (Rafael Gonzaga) #54928
  • [194fc113ac] - benchmark: add buffer.isAscii benchmark (RafaelGSS) #54740
  • [7410d51cb9] - benchmark: add buffer.isUtf8 bench (RafaelGSS) #54740
  • [2393f21e8a] - benchmark: add access async version to bench (Rafael Gonzaga) #54747
  • [b8779721f0] - benchmark: enhance dc publish benchmark (Rafael Gonzaga) #54745
  • [4078aa83ff] - benchmark: add match and doesNotMatch bench (RafaelGSS) #54734
  • [66acab9976] - benchmark: add rejects and doesNotReject bench (RafaelGSS) #54734
  • [6db777fb3a] - benchmark: add throws and doesNotThrow bench (RafaelGSS) #54734
  • [8f101560ce] - benchmark: add strictEqual and notStrictEqual bench (RafaelGSS) #54734
  • [2c9e4c936e] - benchmark: adds groups to better separate benchmarks (Giovanni Bucci) #54393
  • [671c3ac633] - benchmark: fix benchmark for file path and URL conversion (Early Riser) #54190
  • [8c8708cb5b] - benchmark: use assert.ok searchparams (Rafael Gonzaga) #54334
  • [8b71fa79e2] - benchmark: add stream.compose benchmark (jakecastelli) #54308
  • [93ee36e3a0] - benchmark: rename count to n (Rafael Gonzaga) #54271
  • [f2971b6f0b] - benchmark: change assert() to assert.ok() (Rafael Gonzaga) #54254
  • [f48f2c212c] - benchmark: support --help in CLI (Aviv Keller) #53358
  • [0309b0520b] - benchmark: remove force option as force defaults to true (Yelim Koo) #54203
  • [b6e8305b2d] - benchmark: use assert.ok instead of assert (Rafael Gonzaga) #54176
  • [90c660d26a] - benchmark: add require-esm benchmark (Joyee Cheung) #52166
  • [1b8584b52e] - benchmark,doc: add CPU scaling governor to perf (Rafael Gonzaga) #54723
  • [0b9161b330] - benchmark,doc: mention bar.R to the list of scripts (Rafael Gonzaga) #54722
  • [84bf93b7ea] - buffer: allow invalid encoding in from (Robert Nagy) #54533
  • [d04246a0d7] - buffer: optimize byteLength for common encodings (Robert Nagy) #54342
  • [f36831f694] - buffer: optimize createFromString (Robert Nagy) #54324
  • [f5f40c8088] - buffer: optimize for common encodings (Robert Nagy) #54319
  • [76c37703be] - buffer: add JSDoc to blob bytes method (Roberto Simonini) #54117
  • [3012d31404] - buffer: use faster integer argument check (Robert Nagy) #54089
  • [3505782801] - buffer: make indexOf(byte) faster (Tobias Nießen) #53455
  • [d285fc1f68] - build: upgrade clang-format to v18 (Aviv Keller) #53957
  • [d288ec3b0a] - build: fix conflicting V8 object print flags (Daeyeon Jeong) #54785
  • [e862eecac9] - build: do not build with code cache for core coverage collection (Joyee Cheung) #54633
  • [f7a606eb96] - build: turn off -Wrestrict (Richard Lau) #54737
  • [71ca2665e4] - build: reclaim disk space on macOS GHA runner (jakecastelli) #54658
  • [82d8051c39] - build: don't clean obj.target directory if it doesn't exist (Joyee Cheung) #54337
  • [[6e550b1f26](ht...
Read more

2024-09-17, Version 22.9.0 (Current), @RafaelGSS

17 Sep 21:07
v22.9.0
Compare
Choose a tag to compare

New API to retrieve execution Stack Trace

A new API getCallSite has been introduced to the util module. This API allows users
to retrieve the stacktrace of the current execution. Example:

const util = require('node:util');

function exampleFunction() {
  const callSites = util.getCallSite();

  console.log('Call Sites:');
  callSites.forEach((callSite, index) => {
    console.log(`CallSite ${index + 1}:`);
    console.log(`Function Name: ${callSite.functionName}`);
    console.log(`Script Name: ${callSite.scriptName}`);
    console.log(`Line Number: ${callSite.lineNumber}`);
    console.log(`Column Number: ${callSite.column}`);
  });
  // CallSite 1:
  // Function Name: exampleFunction
  // Script Name: /home/example.js
  // Line Number: 5
  // Column Number: 26

  // CallSite 2:
  // Function Name: anotherFunction
  // Script Name: /home/example.js
  // Line Number: 22
  // Column Number: 3

  // ...
}

// A function to simulate another stack layer
function anotherFunction() {
  exampleFunction();
}

anotherFunction();

Thanks to Rafael Gonzaga for making this work on #54380.

Disable V8 Maglev

We have seen several crashes/unexpected JS behaviors with maglev on v22
(which ships V8 v12.4). The bugs lie in the codegen so it would be difficult for
users to work around them or even figure out where the bugs are coming from.
Some bugs are fixed in the upstream while some others probably remain.

As v22 will get stuck with V8 v12.4 as LTS, it will be increasingly difficult to
backport patches for them even if the bugs are fixed. So disable it by default
on v22 to reduce the churn and troubles for users.

Thanks to Joyee Cheung for making this work on #54384

Exposes X509_V_FLAG_PARTIAL_CHAIN to tls.createSecureContext

This releases introduces a new option to the API tls.createSecureContext. For
now on users can use tls.createSecureContext({ allowPartialTrustChain: true })
to treat intermediate (non-self-signed) certificates in the trust CA certificate
list as trusted.

Thanks to Anna Henningsen for making this work on #54790

Other Notable Changes

  • [5c9599af5a] - src: create handle scope in FastInternalModuleStat (Joyee Cheung) #54384
  • [e2307d87e8] - (SEMVER-MINOR) stream: relocate the status checking code in the onwritecomplete (YoonSoo_Shin) #54032

Deprecations

  • [8433032948] - repl: doc-deprecate instantiating node:repl classes without new (Aviv Keller) #54842
  • [8c4c85cf31] - zlib: deprecate instantiating classes without new (Yagiz Nizipli) #54708

Commits

Read more