Skip to content

chore(deps): update node.js to v20

Renovate Bot requested to merge renovate/node-20.x into develop

This MR contains the following updates:

Package Type Update Change
node image major 18.16.0 -> 20.8.0
node final major 18.16.0-alpine3.16 -> 20.2.0-alpine3.16

Release Notes

nodejs/node

v20.8.0: 2023-09-28, Version 20.8.0 (Current), @​ruyadorno

Compare Source

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
Commits

v20.7.0: 2023-09-18, Version 20.7.0 (Current), @​UlisesGascon

Compare Source

Notable Changes
Commits

v20.6.1: 2023-09-08, Version 20.6.1 (Current), @​ruyadorno and @​RafaelGSS

Compare Source

Commit

v20.6.0: 2023-09-04, Version 20.6.0 (Current), @​juanarbol prepared by @​UlisesGascon

Compare Source

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
Commits

v20.5.1: 2023-08-09, Version 20.5.1 (Current), @​RafaelGSS

Compare Source

This is a security release.

Notable Changes

The following CVEs are fixed in this release:

More detailed information on each of the vulnerabilities can be found in August 2023 Security Releases blog post.

Commits

v20.5.0: 2023-07-18, Version 20.5.0 (Current), @​juanarbol

Compare Source

Notable Changes
Commits

v20.4.0: 2023-07-05, Version 20.4.0 (Current), @​RafaelGSS

Compare Source

Notable Changes
Mock Timers

The new feature allows developers to write more reliable and predictable tests for time-dependent functionality. It includes MockTimers with the ability to mock setTimeout, setInterval from globals, node:timers, and node:timers/promises.

The feature provides a simple API to advance time, enable specific timers, and release all timers.

import assert from 'node:assert';
import { test } from 'node:test';

test('mocks setTimeout to be executed synchronously without having to actually wait for it', (context) => {
  const fn = context.mock.fn();
  // Optionally choose what to mock
  context.mock.timers.enable(['setTimeout']);
  const nineSecs = 9000;
  setTimeout(fn, nineSecs);

  const threeSeconds = 3000;
  context.mock.timers.tick(threeSeconds);
  context.mock.timers.tick(threeSeconds);
  context.mock.timers.tick(threeSeconds);

  assert.strictEqual(fn.mock.callCount(), 1);
});

This feature was contributed by Erick Wendel in #​47775.

Support to the explicit resource management proposal

Node is adding support to the explicit resource management proposal to its resources allowing users of TypeScript/babel to use using/await using with V8 support for everyone else on the way.

This feature was contributed by Moshe Atlow and Benjamin Gruenbaum in #​48518.

Other notable changes
Commits

v20.3.1: 2023-06-20, Version 20.3.1 (Current), @​RafaelGSS

Compare Source

This is a security release.

Notable Changes

The following CVEs are fixed in this release:

More detailed information on each of the vulnerabilities can be found in June 2023 Security Releases blog post.

Commits

v20.3.0: 2023-06-08, Version 20.3.0 (Current), @​targos

Compare Source

Notable Changes
Commits

v20.2.0: 2023-05-16, Version 20.2.0 (Current), @​targos

Compare Source

Notable Changes
  • [c092df9094] - doc: add ovflowd to collaborators (Claudio Wunder) #​47844
  • [4197a9a5a0] - (SEMVER-MINOR) http: prevent writing to the body when not allowed by HTTP spec (Gerrard Lindsay) #​47732
  • [c4596b9ce7] - (SEMVER-MINOR) sea: add option to disable the experimental SEA warning (Darshan Sen) #​47588
  • [17befe008c] - (SEMVER-MINOR) test_runner: add skip, todo, and only shorthands to test (Chemi Atlow) #​47909
  • [a0634d7f89] - (SEMVER-MINOR) url: add value argument to URLSearchParams has and delete methods (Sankalp Shubham) #​47885
Commits

v20.1.0: 2023-05-03, Version 20.1.0 (Current), @​targos

Compare Source

Notable Changes
  • [5e99598639] - assert: deprecate CallTracker (Moshe Atlow) #​47740
  • [2d97c89c6f] - crypto: update root certificates to NSS 3.89 (Node.js GitHub Bot) #​47659
  • [ce8820e292] - (SEMVER-MINOR) dns: expose getDefaultResultOrder (btea) #​46973
  • [9d30f469aa] - doc: add KhafraDev to collaborators (Matthew Aitken) #​47510
  • [439ea47a77] - (SEMVER-MINOR) fs: add recursive option to readdir and opendir (Ethan Arrowood) #​41439
  • [a54e898dc8] - (SEMVER-MINOR) fs: add support for mode flag to specify the copy behavior of the cp methods (Tetsuharu Ohzeki) #​47084
  • [4fa773964b] - (SEMVER-MINOR) http: add highWaterMark option http.createServer (HinataKah0) #​47405
  • [2b411f4b42] - (SEMVER-MINOR) stream: preserve object mode in compose (Raz Luvaton) #​47413
  • [5327483f31] - (SEMVER-MINOR) test_runner: add testNamePatterns to run API (Chemi Atlow) #​47628
  • [bdd02a467d] - (SEMVER-MINOR) test_runner: execute before hook on test (Chemi Atlow) #​47586
  • [0e70c187bc] - (SEMVER-MINOR) test_runner: support combining coverage reports (Colin Ihrig) #​47686
  • [75c1d1b66e] - (SEMVER-MINOR) wasi: make returnOnExit true by default (Michael Dawson) #​47390
Commits

v20.0.0: 2023-04-18, Version 20.0.0 (Current), @​RafaelGSS

Compare Source

We're excited to announce the release of Node.js 20! Highlights include the new Node.js Permission Model, a synchronous import.meta.resolve, a stable test_runner, updates of the V8 JavaScript engine to 11.3, Ada to 2.0, and more!

As a reminder, Node.js 20 will enter long-term support (LTS) in October, but until then, it will be the "Current" release for the next six months. We encourage you to explore the new features and benefits offered by this latest release and evaluate their potential impact on your applications.

Notable Changes
Permission Model

Node.js now has an experimental feature called the Permission Model. It allows developers to restrict access to specific resources during program execution, such as file system operations, child process spawning, and worker thread creation. The API exists behind a flag --experimental-permission which when enabled will restrict access to all available permissions. By using this feature, developers can prevent their applications from accessing or modifying sensitive data or running potentially harmful code. More information about the Permission Model can be found in the Node.js documentation.

The Permission Model was a contribution by Rafael Gonzaga in #​44004.

Custom ESM loader hooks run on dedicated thread

ESM hooks supplied via loaders (--experimental-loader=foo.mjs) now run in a dedicated thread, isolated from the main thread. This provides a separate scope for loaders and ensures no cross-contamination between loaders and application code.

Synchronous import.meta.resolve()

In alignment with browser behavior, this function now returns synchronously. Despite this, user loader resolve hooks can still be defined as async functions (or as sync functions, if the author prefers). Even when there are async resolve hooks loaded, import.meta.resolve will still return synchronously for application code.

Contributed by Anna Henningsen, Antoine du Hamel, Geoffrey Booth, Guy Bedford, Jacob Smith, and Michaël Zasso in #​44710

V8 11.3

The V8 engine is updated to version 11.3, which is part of Chromium 113. This version includes three new features to the JavaScript API:

The V8 update was a contribution by Michaël Zasso in #​47251.

Stable Test Runner

The recent update to Node.js, version 20, includes an important change to the test_runner module. The module has been marked as stable after a recent update. Previously, the test_runner module was experimental, but this change marks it as a stable module that is ready for production use.

Contributed by Colin Ihrig in #​46983

Ada 2.0

Node.js v20 comes with the latest version of the URL parser, Ada. This update brings significant performance improvements to URL parsing, including enhancements to the url.domainToASCII and url.domainToUnicode functions in node:url.

Ada 2.0 has been integrated into the Node.js codebase, ensuring that all parts of the application can benefit from the improved performance. Additionally, Ada 2.0 features a significant performance boost over its predecessor, Ada 1.0.4, while also eliminating the need for the ICU requirement for URL hostname parsing.

Contributed by Yagiz Nizipli and Daniel Lemire in #​47339

Preparing single executable apps now requires injecting a Blob

Building a single executable app now requires injecting a blob prepared by Node.js from a JSON config instead of injecting the raw JS file. This opens up the possibility of embedding multiple co-existing resources into the SEA (Single Executable Apps).

Contributed by Joyee Cheung in #​47125

Web Crypto API

Web Crypto API functions' arguments are now coerced and validated as per their WebIDL definitions like in other Web Crypto API implementations. This further improves interoperability with other implementations of Web Crypto API.

This change was made by Filip Skokan in #​46067.

Official support for ARM64 Windows

Node.js now includes binaries for ARM64 Windows, allowing for native execution on the platform. The MSI, zip/7z packages, and executable are available from the Node.js download site along with all other platforms. The CI system was updated and all changes are now fully tested on ARM64 Windows, to prevent regressions and ensure compatibility.

ARM64 Windows was upgraded to tier 2 support by Stefan Stojanovic in #​47233.

WASI version must now be specified

When new WASI() is called, the version option is now required and has no default value. Any code that relied on the default for the version will need to be updated to request a specific version.

This change was made by Michael Dawson in #​47391.

Deprecations and Removals
  • [3bed5f11e0] - (SEMVER-MAJOR) url: runtime-deprecate url.parse() with invalid ports (Rich Trott) #​45526

url.parse() accepts URLs with ports that are not numbers. This behavior might result in host name spoofing with unexpected input. These URLs will throw an error in future versions of Node.js, as the WHATWG URL API does already. Starting with Node.js 20, these URLS cause url.parse() to emit a warning.

Semver-Major Commits
  • [9fafb0a090] - (SEMVER-MAJOR) async_hooks: deprecate the AsyncResource.bind asyncResource property (James M Snell) #​46432
  • [1948d37595] - (SEMVER-MAJOR) buffer: check INSPECT_MAX_BYTES with validateNumber (Umuoy) #​46599
  • [7bc0e6a4e7] - (SEMVER-MAJOR) buffer: graduate File from experimental and expose as global (Khafra) #​47153
  • [671ffd7825] - (SEMVER-MAJOR) buffer: use min/max of validateNumber (Deokjin Kim) #​45796
  • [ab1614d280] - (SEMVER-MAJOR) build: reset embedder string to "-node.0" (Michaël Zasso) #​47251
  • [c1bcdbcf79] - (SEMVER-MAJOR) build: warn for gcc versions earlier than 10.1 (Richard Lau) #​46806
  • [649f68fc1e] - (SEMVER-MAJOR) build: reset embedder string to "-node.0" (Yagiz Nizipli) #​45579
  • [9374700d7a] - (SEMVER-MAJOR) crypto: remove DEFAULT_ENCODING (Tobias Nießen) #​47182
  • [1640aeb680] - (SEMVER-MAJOR) crypto: remove obsolete SSL_OP_* constants (Tobias Nießen) #​47073
  • [c2e4b1fa9a] - (SEMVER-MAJOR) crypto: remove ALPN_ENABLED (Tobias Nießen) #​47028
  • [3ef38c4bd7] - (SEMVER-MAJOR) crypto: use WebIDL converters in WebCryptoAPI (Filip Skokan) #​46067
  • [08af023b1f] - (SEMVER-MAJOR) crypto: runtime deprecate replaced rsa-pss keygen parameters (Filip Skokan) #​45653
  • [7eb0ac3cb6] - (SEMVER-MAJOR) deps: patch V8 to support compilation on win-arm64 (Michaël Zasso) #​47251
  • [a7c129f286] - (SEMVER-MAJOR) deps: silence irrelevant V8 warning (Michaël Zasso) #​47251
  • [6f5655a18e] - (SEMVER-MAJOR) deps: always define V8_EXPORT_MRIVATE as no-op (Michaël Zasso) #​47251
  • [f226350fcb] - (SEMVER-MAJOR) deps: update V8 to 11.3.244.4 (Michaël Zasso) #​47251
  • [d6dae7420e] - (SEMVER-MAJOR) deps: V8: cherry-pick f1c888e (Michaël Zasso) #​45579
  • [56c436533e] - (SEMVER-MAJOR) deps: fix V8 build on Windows with MSVC (Michaël Zasso) #​45579
  • [51ab98c71b] - (SEMVER-MAJOR) deps: silence irrelevant V8 warning (Michaël Zasso) #​45579
  • [9f84d3eea8] - (SEMVER-MAJOR) deps: V8: fix v8-cppgc.h for MSVC (Jiawen Geng) #​45579
  • [f2318cd4b5] - (SEMVER-MAJOR) deps: fix V8 build issue with inline methods (Jiawen Geng) #​45579
  • [16e03e7968] - (SEMVER-MAJOR) deps: update V8 to 10.9.194.4 (Yagiz Nizipli) #​45579
  • [6473f5e7f7] - (SEMVER-MAJOR) doc: update toolchains used for Node.js 20 releases (Richard Lau) #​47352
  • [cc18fd9608] - (SEMVER-MAJOR) events: refactor to use validateNumber (Deokjin Kim) #​45770
  • [ff92b40ffc] - (SEMVER-MAJOR) http: close the connection after sending a body without declared length (Tim Perry) #​46333
  • [2a29df6464] - (SEMVER-MAJOR) http: keep HTTP/1.1 conns alive even if the Connection header is removed (Tim Perry) #​46331
  • [391dc74a10] - (SEMVER-MAJOR) http: throw error if options of http.Server is array (Deokjin Kim) #​46283
  • [ed3604cd64] - (SEMVER-MAJOR) http: server check Host header, to meet RFC 7230 5.4 requirement (wwwzbwcom) #​45597
  • [88d71dc301] - (SEMVER-MAJOR) lib: refactor to use min/max of validateNumber (Deokjin Kim) #​45772
  • [e4d641f02a] - (SEMVER-MAJOR) lib: refactor to use validators in http2 (Debadree Chatterjee) #​46174
  • [0f3e531096] - (SEMVER-MAJOR) lib: performance improvement on readline async iterator (Thiago Oliveira Santos) #​41276
  • [5b5898ac86] - (SEMVER-MAJOR) lib,src: update exit codes as per todos (Debadree Chatterjee) #​45841
  • [55321bafd1] - (SEMVER-MAJOR) net: enable autoSelectFamily by default (Paolo Insogna) #​46790
  • [2d0d99733b] - (SEMVER-MAJOR) process: remove process.exit(), process.exitCode coercion to integer (Daeyeon Jeong) #​43716
  • [dc06df31b6] - (SEMVER-MAJOR) readline: refactor to use validateNumber (Deokjin Kim) #​45801
  • [295b2f3ff4] - (SEMVER-MAJOR) src: update NODE_MODULE_VERSION to 115 (Michaël Zasso) #​47251
  • [3803b028dd] - (SEMVER-MAJOR) src: share common code paths for SEA and embedder script (Anna Henningsen) #​46825
  • [e8bddac3e9] - (SEMVER-MAJOR) src: apply ABI-breaking API simplifications (Anna Henningsen) #​46705
  • [f84de0ad4c] - (SEMVER-MAJOR) src: use uint32_t for process initialization flags enum (Anna Henningsen) #​46427
  • [a6242772ec] - (SEMVER-MAJOR) src: fix ArrayBuffer::Detach deprecation (Michaël Zasso) #​45579
  • [dd5c39a808] - (SEMVER-MAJOR) src: update NODE_MODULE_VERSION to 112 (Yagiz Nizipli) #​45579
  • [63eca7fec0] - (SEMVER-MAJOR) stream: validate readable defaultEncoding (Marco Ippolito) #​46430
  • [9e7093f416] - (SEMVER-MAJOR) stream: validate writable defaultEncoding (Marco Ippolito) #​46322
  • [fb91ee4f26] - (SEMVER-MAJOR) test: make trace-gc-flag tests less strict (Yagiz Nizipli) #​45579
  • [eca618071e] - (SEMVER-MAJOR) test: adapt test-v8-stats for V8 update (Michaël Zasso) #​45579
  • [c03354d3e0] - (SEMVER-MAJOR) test: test case for multiple res.writeHead and res.getHeader (Marco Ippolito) #​45508
  • [c733cc0c7f] - (SEMVER-MAJOR) test_runner: mark module as stable (Colin Ihrig) #​46983
  • [7ce223273d] - (SEMVER-MAJOR) tools: update V8 gypfiles for 11.1 (Michaël Zasso) #​47251
  • [ca4bd3023e] - (SEMVER-MAJOR) tools: update V8 gypfiles for 11.0 (Michaël Zasso) #​47251
  • [58b06a269a] - (SEMVER-MAJOR) tools: update V8 gypfiles (Michaël Zasso) #​45579
  • [027841c964] - (SEMVER-MAJOR) url: use private properties for brand check (Yagiz Nizipli) #​46904
  • [3bed5f11e0] - (SEMVER-MAJOR) url: runtime-deprecate url.parse() with invalid ports (Rich Trott) #​45526
  • [7c76fddf25] - (SEMVER-MAJOR) util,doc: mark parseArgs() as stable (Colin Ihrig) #​46718
  • [4b52727976] - (SEMVER-MAJOR) wasi: make version non-optional (Michael Dawson) #​47391
Semver-Minor Commits
  • [d4b440bfac] - (SEMVER-MINOR) fs: implement byob mode for readableWebStream() (Debadree Chatterjee) #​46933
  • [00c222593e] - (SEMVER-MINOR) src,process: add permission model (Rafael Gonzaga) #​44004
  • [978b57d750] - (SEMVER-MINOR) wasi: no longer require flag to enable wasi (Michael Dawson) #​47286
Semver-Patch Commits

v19.9.0: 2023-04-10, Version 19.9.0 (Current), @​RafaelGSS

Compare Source

Notable Changes
Tracing Channel in diagnostic_channel

TracingChannel adds a new, high-performance channel to publish tracing data about the timing and purpose of function executions.

Contributed by Stephen Belanger in #​44943

New URL.canParse API

A new API was added to the URL. URL.canParse checks if an input with an optional base value can be parsed correctly according to WHATWG URL specification.

const isValid = URL.canParse('/foo', 'https://example.org/'); // true
const isNotValid = URL.canParse('/foo'); // false

Contributed by Khafra in #​47179

Other notable changes

events:

  • (SEMVER-MINOR) add getMaxListeners method (Khafra) #​47039 msi:
  • (SEMVER-MINOR) migrate to WiX4 (Stefan Stojanovic) #​45943 node-api:
  • (SEMVER-MINOR) deprecate napi_module_register (Vladimir Morozov) #​46319 stream:
  • (SEMVER-MINOR) add setter & getter for default highWaterMark (Robert Nagy) #​46929 test_runner:
  • (SEMVER-MINOR) expose reporter for use in run api (Chemi Atlow) #​47238
Commits

v19.8.1: 2023-03-15, Version 19.8.1 (Current), @​targos

Compare Source

Notable Changes

This release contains a single revert of a change that was introduced in v19.8.0 and introduced application crashes.

Fixes: #​47096

Commits
  • [f7c8aa4cf1] - Revert "vm: fix leak in vm.compileFunction when importModuleDynamically is used" (Michaël Zasso) #​47101

v19.7.0: 2023-02-21, Version 19.7.0 (Current), @​MylesBorins

Compare Source

Notable Changes
  • [60a612607e] - deps: upgrade npm to 9.5.0 (npm team) #​46673
  • [7d6c27eab1] - deps: add ada as a dependency (Yagiz Nizipli) #​46410
  • [a79a8bf85a] - doc: add debadree25 to collaborators (Debadree Chatterjee) #​46716
  • [0c2c322ee6] - doc: add deokjinkim to collaborators (Deokjin Kim) #​46444
  • [9b23309f53] - doc,lib,src,test: rename --test-coverage (Colin Ihrig) #​46017
  • [8590eb4830] - (SEMVER-MINOR) lib: add aborted() utility function (Debadree Chatterjee) #​46494
  • [164bfe82cc] - (SEMVER-MINOR) src: add initial support for single executable applications (Darshan Sen) #​45038
  • [f3908411fd] - (SEMVER-MINOR) src: allow optional Isolate termination in node::Stop() (Shelley Vohr) #​46583
  • [c34bac2fed] - (SEMVER-MINOR) src: allow blobs in addition to FILE*s in embedder snapshot API (Anna Henningsen) #​46491
  • [683a1f8f3e] - (SEMVER-MINOR) src: allow snapshotting from the embedder API (Anna Henningsen) #​45888
  • [658d2f4710] - (SEMVER-MINOR) src: make build_snapshot a per-Isolate option, rather than a global one (Anna Henningsen) #​45888
  • [6801d3753c] - (SEMVER-MINOR) src: add snapshot support for embedder API (Anna Henningsen) #​45888
  • [e77d538d32] - (SEMVER-MINOR) src: allow embedder control of code generation policy (Shelley Vohr) #​46368
  • [633d3f292d] - (SEMVER-MINOR) stream: add abort signal for ReadableStream and WritableStream (Debadree Chatterjee) #​46273
  • [6119289251] - test_runner: add initial code coverage support (Colin Ihrig) #​46017
  • [a51fe3c663] - url: replace url-parser with ada (Yagiz Nizipli) #​46410
Commits

v19.6.1: 2023-02-16, Version 19.6.1 (Current), @​RafaelGSS

Compare Source

This is a security release.

Notable Changes

The following CVEs are fixed in this release:

  • CVE-2023-23919: OpenSSL errors not cleared in error stack (Medium)
  • CVE-2023-23918: Experimental Policies bypass via process.mainModule.require(High)
  • CVE-2023-23920: Insecure loading of ICU data through ICU_DATA environment variable (Low)

More detailed information on each of the vulnerabilities can be found in February 2023 Security Releases blog post.

This security release includes OpenSSL security updates as outlined in the recent OpenSSL security advisory and undici security update.

Commits

v19.6.0: 2023-02-02, Version 19.6.0 (Current), @​ruyadorno

Compare Source

Notable changes
ESM: Leverage loaders when resolving subsequent loaders

Loaders now apply to subsequent loaders, for example: --experimental-loader ts-node --experimental-loader loader-written-in-typescript.

Upgrade npm to 9.4.0

Added --install-strategy=linked option for installations similar to pnpm.

Other notable changes
Commits

v19.5.0: 2023-01-24, Version 19.5.0 (Current), @​RafaelGSS

Compare Source

Notable Changes
  • http:
    • (SEMVER-MINOR) join authorization headers (Marco Ippolito) #​45982
  • lib::
    • add webstreams to Duplex.from() (Debadree Chatterjee) #​46190
  • stream:
    • implement finished() for ReadableStream and WritableStream (Debadree Chatterjee) #​46205
Commits

v19.4.0: 2023-01-06, Version 19.4.0 (Current), @​RafaelGSS

Compare Source

Notable Changes
  • buffer:
    • (SEMVER-MINOR) add buffer.isUtf8 for utf8 validation (Yagiz Nizipli) #​45947
  • http:
    • (SEMVER-MINOR) improved timeout defaults handling (Paolo Insogna) #​45778
  • net:
    • add autoSelectFamily global getter and setter (Paolo Insogna) #​45777
  • os:
    • (SEMVER-MINOR) add availableParallelism() (Colin Ihrig) #​45895
  • util:
    • add fast path for text-decoder fatal flag (Yagiz Nizipli) #​45803
Commits

v19.3.0: 2022-12-14, Version 19.3.0 (Current), @​targos

Compare Source

Notable Changes
Updated npm to 9.2.0

Based on the list of guidelines we've established on integrating npm and node, here is a grouped list of the breaking changes with the reasoning as to why they fit within the guidelines linked above. Note that all the breaking changes were made in 9.0.0. All subsequent minor and patch releases after [email protected] do not contain any breaking changes.

Engines

Explanation: the node engines supported by npm@9 make it safe to allow npm@9 as the default in any LTS version of 14 or 16, as well as anything later than or including 18.0.0

  • npm is now compatible with the following semver range for node: ^14.17.0 || ^16.13.0 || >=18.0.0
Filesystem

Explanation: when run as root previous versions of npm attempted to manage file ownership automatically on the user's behalf. this behavior was problematic in many cases and has been removed in favor of allowing users to manage their own filesystem permissions

  • npm will no longer attempt to modify ownership of files it creates.
Auth

Explanation: any errors thrown from users having unsupported auth configurations will show npm config fix in the remediation instructions, which will allow the user to automatically have their auth config fixed.

  • The presence of auth related settings that are not scoped to a specific registry found in a config file is no longer supported and will throw errors.
Login

Explanation: the default auth-type has changed and users can opt back into the old behavior with npm config set auth-type=legacy. login and adduser have also been seperated making each command more closely match it's name instead of being aliases for each other.

  • Legacy auth types sso, saml & legacy have been consolidated into "legacy".
  • auth-type defaults to "web"
  • login and adduser are now separate commands that send different data to the registry.
  • auth-type config values web and legacy only try their respective methods, npm no longer tries them all and waits to see which one doesn't fail.
Tarball Packing

Explanation: previously using multiple ignore/allow lists when packing was an undefined behavior, and now the order of operations is strictly defined when packing a tarball making it easier to follow and should only affect users relying on the previously undefined behavior.

  • npm pack now follows a strict order of operations when applying ignore rules. If a files array is present in the package.json, then rules in .gitignore and .npmignore files from the root will be ignored.
Display/Debug/Timing Info

Explanation: these changes center around the display of information to the terminal including timing and debug log info. We do not anticipate these changes breaking any existing workflows.

  • Links generated from git urls will now use HEAD instead of master as the default ref.
  • timing has been removed as a value for --loglevel.
  • --timing will show timing information regardless of --loglevel, except when --silent.
  • When run with the --timing flag, npm now writes timing data to a file alongside the debug log data, respecting the logs-dir option and falling back to <CACHE>/_logs/ dir, instead of directly inside the cache directory.
  • The timing file data is no longer newline delimited JSON, and instead each run will create a uniquely named <ID>-timing.json file, with the <ID> portion being the same as the debug log.
  • npm now outputs some json errors on stdout. Previously npm would output all json formatted errors on stderr, making it difficult to parse as the stderr stream usually has logs already written to it.
Config/Command Deprecations or Removals

Explanation: install-links is the only config or command in the list that has an effect on package installs. We fixed a number of issues that came up during prereleases with this change. It will also only be applied to new package trees created without a package-lock.json file. Any install with an existing lock file will not be changed.

  • Deprecate boolean install flags in favor of --install-strategy.
  • npm config set will no longer accept deprecated or invalid config options.
  • install-links config defaults to "true".
  • node-version config has been removed.
  • npm-version config has been removed.
  • npm access subcommands have been renamed.
  • npm birthday has been removed.
  • npm set-script has been removed.
  • npm bin has been removed (use npx or npm exec to execute binaries).
Other notable changes
Commits

v19.2.0: 2022-11-29, Version 19.2.0 (Current), @​ruyadorno

Compare Source

Notable changes
Time zone update

Time zone data has been updated to 2022f. This includes changes to Daylight Savings Time (DST) for Fiji and Mexico. For more information, see https://mm.icann.org/pipermail/tz-announce/2022-October/000075.html.

Other notable changes
  • buffer
    • (SEMVER-MINOR) introduce File class (Khafra) #​45139
  • deps
    • update V8 to 10.8.168.20 (Michaël Zasso) #​45230
  • doc
    • deprecate use of invalid ports in url.parse (Antoine du Hamel) #​45576
  • util
    • add fast path for utf8 encoding (Yagiz Nizipli) #​45412
Commits

v19.1.0: 2022-11-14, Version 19.1.0 (Current), @​RafaelGSS

Compare Source

Notable changes
Support function mocking on Node.js test runner

The node:test module supports mocking during testing via a top-level mock object.

test('spies on an object method', (t) => {
  const number = {
    value: 5,
    add(a) {
      return this.value + a;
    },
  };
  t.mock.method(number, 'add');

  assert.strictEqual(number.add(3), 8);
  assert.strictEqual(number.add.mock.calls.length, 1);
});

Contributed by Colin Ihrig in #​45326

fs.watch recursive support on Linux

fs.watch supports recursive watch using the recursive: true option.

const watcher = fs.watch(testDirectory, { recursive: true });
watcher.on('change', function(event, filename) {
});

Contributed by Yagiz Nizipli in #​45098

Other notable changes
  • deps
    • update ICU to 72.1 (Michaël Zasso) #​45068
  • doc
    • add lukekarrys to collaborators (Luke Karrys) #​45180
    • add anonrig to collaborators (Yagiz Nizipli) #​45002
  • lib
    • drop fetch experimental warning (Matteo Collina) #​45287
  • util
    • (SEMVER-MINOR) add MIME utilities (Bradley Farias) #​21128
    • improve textdecoder decode performance (Yagiz Nizipli) #​45294
Commits

v19.0.1: 2022-11-04, Version 19.0.1 (Current), @​RafaelGSS

Compare Source

This is a security release.

Notable changes

The following CVEs are fixed in this release:

  • CVE-2022-3602: X.509 Email Address 4-byte Buffer Overflow (High)
  • CVE-2022-3786: X.509 Email Address Variable Length Buffer Overflow (High)
  • CVE-2022-43548: DNS rebinding in --inspect via invalid octal IP address (Medium)

More detailed information on each of the vulnerabilities can be found in November 2022 Security Releases blog post.

Commits

v19.0.0: 2022-10-18, Version 19.0.0 (Current), @​RafaelGSS and @​ruyadorno

Compare Source

Node.js 19 is here! Highlights include the update of the V8 JavaScript engine to 10.7, HTTP(s)/1.1 KeepAlive enabled by default, and ESM Resolution adjustments.

Node.js 19 will replace Node.js 18 as our ‘Current’ release line when Node.js 18 enters long-term support (LTS) later this month. As per the release schedule, Node.js 19 will be ‘Current' release for the next 6 months, until April 2023.

Notable Changes
Deprecations and Removals
  • [7dd2f41c73] - (SEMVER-MAJOR) module: runtime deprecate exports double slash maps (Guy Bedford) #​44495
  • [ada2d053ae] - (SEMVER-MAJOR) process: runtime deprecate coercion to integer in process.exit() (Daeyeon Jeong) #​44711
HTTP(S)/1.1 KeepAlive by default

Starting with this release, Node.js sets keepAlive to true by default. This means that any outgoing HTTP(s) connection will automatically use HTTP 1.1 Keep-Alive. The default waiting window is 5 seconds. Enable keep-alive will deliver better throughput as connections are reused by default.

Additionally, the agent is now able to parse the response Keep-Alive which the servers might send. This header instructs the client on how much to stay connected. On the other side, the Node.js HTTP server will now automatically disconnect idle clients (which are using HTTP Keep-Alive to reuse the connection) when close() is invoked).

Node.js HTTP(S)/1.1 requests may experience a better throughput/performance by default.

Contributed by Paolo Insogna in #​43522

DTrace/SystemTap/ETW Support were removed

The main reason is the lack of resources from the Node.js team. The complexity to keep the support up-to-date has proved not worth it without a clear plan to support those tools. Hence, an issue was raised in the Node.js repository to assess better support, for DTrace in specific.

Contributed by Ben Noordhuis in #​43651 and #​43652

V8 10.7

The V8 engine is updated to version 10.7, which is part of Chromium 107. This version include a new feature to the JavaScript API: Intl.NumberFormat.

Intl.NumberFormat v3 API is a new TC39 ECMA402 stage 3 proposal extend the pre-existing Intl.NumberFormat.

The V8 update was a contribution by Michaël Zasso in #​44741.

llhttp 8.1.0

llhttp has been updated to version 8.1.0. Collectively, this version brings many updates to the llhttp API, introducing new callbacks and allow all callback to be pausable.

Contributed by Paolo Insogna in #​44967

Other Notable Changes
Semver-Major Commits
  • [53f73d1cfe] - (SEMVER-MAJOR) build: enable V8's trap handler on Windows (Michaël Zasso) #​44741
  • [06aaf8a1c4] - (SEMVER-MAJOR) build: reset embedder string to "-node.0" (Michaël Zasso) #​44741
  • [aa3a572e6b] - (SEMVER-MAJOR) build: remove dtrace & etw support (Ben Noordhuis) #​43652
  • [38f1e2793c] - (SEMVER-MAJOR) build: remove systemtap support (Ben Noordhuis) #​43651
  • [2849283c4c] - (SEMVER-MAJOR) crypto: remove non-standard webcrypto.Crypto.prototype.CryptoKey (Antoine du Hamel) #​42083
  • [a1653ac715] - (SEMVER-MAJOR) crypto: do not allow to call setFips from the worker thread (Sergey Petushkov) #​43624
  • [fd36a8dadb] - (SEMVER-MAJOR) deps: update llhttp to 8.1.0 (Paolo Insogna) #​44967
  • [89ecdddaab] - (SEMVER-MAJOR) deps: bump minimum ICU version to 71 (Michaël Zasso) #​44741
  • [66fe446efd] - (SEMVER-MAJOR) deps: V8: cherry-pick 0cccb6f (Michaël Zasso) #​44741
  • [88ed027d57] - (SEMVER-MAJOR) deps: V8: cherry-pick 7ddb839 (Michaël Zasso) #​44741
  • [26c651c34e] - (SEMVER-MAJOR) deps: V8: cherry-pick 1b3a4f0 (Michaël Zasso) #​44741
  • [c8ff2dfd11] - (SEMVER-MAJOR) deps: V8: cherry-pick b161a08 (Michaël Zasso) #​44741
  • [7a8fa2d517] - (SEMVER-MAJOR) deps: fix V8 build on Windows with MSVC (Michaël Zasso) #​44741
  • [83b0aaa800] - (SEMVER-MAJOR) deps: fix V8 build on SmartOS (Michaël Zasso) #​44741
  • [7a952e8ea5] - (SEMVER-MAJOR) deps: silence irrelevant V8 warning (Michaël Zasso) #​44741
  • [6bd756d7c6] - (SEMVER-MAJOR) deps: update V8 to 10.7.193.13 (Michaël Zasso) #​44741
  • [03fb789fb9] - (SEMVER-MAJOR) events: add null check for the signal of EventTarget (Masashi Hirano) #​43153
  • [a4fa526ddc] - (SEMVER-MAJOR) fs: add directory autodetection to fsPromises.symlink() (Livia Medeiros) #​42894
  • [bb4891d8d4] - (SEMVER-MAJOR) fs: add validateBuffer to improve error (Hirotaka Tagawa / wafuwafu13) #​44769
  • [950a4411fa] - (SEMVER-MAJOR) fs: remove coercion to string in writing methods (Livia Medeiros) #​42796
  • [41a6d82968] - (SEMVER-MAJOR) fs: harden fs.readSync(buffer, options) typecheck (LiviaMedeiros) #​42772
  • [2275faac2b] - (SEMVER-MAJOR) fs: harden fs.read(params, callback) typecheck (LiviaMedeiros) #​42772
  • [29953a0b88] - (SEMVER-MAJOR) fs: harden filehandle.read(params) typecheck (LiviaMedeiros) #​42772
  • [4267b92604] - (SEMVER-MAJOR) http: use Keep-Alive by default in global agents (Paolo Insogna) #​43522
  • [0324529e0f] - (SEMVER-MAJOR) inspector: introduce inspector/promises API (Erick Wendel) #​44250
  • [80270994d6] - (SEMVER-MAJOR) lib: enable global CustomEvent by default (Daeyeon Jeong) #​44860
  • [f529f73bd7] - (SEMVER-MAJOR) lib: brand check event handler property receivers (Chengzhong Wu) #​44483
  • [6de2673a9f] - (SEMVER-MAJOR) lib: enable global WebCrypto by default (Antoine du Hamel) #​42083
  • [73ba8830d5] - (SEMVER-MAJOR) lib: use private field in AbortController (Joyee Cheung) #​43820
  • [7dd2f41c73] - (SEMVER-MAJOR) module: runtime deprecate exports double slash maps (Guy Bedford) #​44495
  • [22c39b1ddd] - (SEMVER-MAJOR) path: the dot will be added(path.format) if it is not specified in ext (theanarkh) #​44349
  • [587367d107] - (SEMVER-MAJOR) perf_hooks: expose webperf global scope interfaces (Chengzhong Wu) #​44483
  • [364c0e196c] - (SEMVER-MAJOR) perf_hooks: fix webperf idlharness (Chengzhong Wu) #​44483
  • [ada2d053ae] - (SEMVER-MAJOR) process: runtime deprecate coercion to integer in process.exit() (Daeyeon Jeong) #​44711
  • [e0ab8dd637] - (SEMVER-MAJOR) process: make process.config read only (Sergey Petushkov) #​43627
  • [481a959adb] - (SEMVER-MAJOR) readline: remove question method from InterfaceConstructor (Antoine du Hamel) #​44606
  • [c9602ce212] - (SEMVER-MAJOR) src: use new v8::OOMErrorCallback API (Michaël Zasso) #​44741
  • [19a70c11e4] - (SEMVER-MAJOR) src: override CreateJob instead of PostJob (Clemens Backes) #​44741
  • [fd52c62bee] - (SEMVER-MAJOR) src: use V8_ENABLE_SANDBOX macro (Michaël Zasso) #​44741
  • [c10988db44] - (SEMVER-MAJOR) src: use non-deprecated V8 inspector API (Michaël Zasso) #​44741
  • [3efe901dd6] - (SEMVER-MAJOR) src: update NODE_MODULE_VERSION to 111 (Michaël Zasso) #​44741
  • [77e585657f] - (SEMVER-MAJOR) src: turn embedder api overload into default argument (Alena Khineika) #​43629
  • [dabda03ea9] - (SEMVER-MAJOR) src: per-environment time origin value (Chengzhong Wu) #​43781
  • [2e49b99cc2] - (SEMVER-MAJOR) src,test: disable freezing V8 flags on initialization (Clemens Backes) #​44741
  • [2b32985c62] - (SEMVER-MAJOR) stream: use null for the error argument (Luigi Pinca) #​44312
  • [36805e8524] - (SEMVER-MAJOR) test: adapt test-repl for V8 update (Michaël Zasso) #​44741
  • [96ef25793d] - (SEMVER-MAJOR) test: adapt test-repl-pretty-*stack to V8 changes (Michaël Zasso) #​44741
  • [71c193e581] - (SEMVER-MAJOR) test: adapt to new JSON SyntaxError messages (Michaël Zasso) #​44741
  • [b5f1564880] - (SEMVER-MAJOR) test: rename always-opt flag to always-turbofan (Michaël Zasso) #​44741
  • [1acf0339dd] - (SEMVER-MAJOR) test: fix test-hash-seed for new V8 versions (Michaël Zasso) #​44741
  • [57ff476c33] - (SEMVER-MAJOR) test: remove duplicate test (Luigi Pinca) #​44051
  • [77def91bf9] - (SEMVER-MAJOR) tls,http2: send fatal alert on ALPN mismatch (Tobias Nießen) #​44031
  • [4860ad99b9] - (SEMVER-MAJOR) tools: update V8 gypfiles for 10.7 (Michaël Zasso) #​44741
Semver-Minor Commits
  • [af0921d877] - (SEMVER-MINOR) esm: add --import flag (Moshe Atlow) #​43942
  • [0633e9a0b5] - (SEMVER-MINOR) lib: add diagnostics channel for process and worker (theanarkh) #​44045
  • [ca5be26b31] - (SEMVER-MINOR) src: add support for externally shared js builtins (Michael Dawson) #​44376
  • [e86a638305] - (SEMVER-MINOR) src: add initial shadow realm support (Chengzhong Wu) #​42869
  • [71ca6d7d6a] - (SEMVER-MINOR) util: add maxArrayLength option to Set and Map (Kohei Ueno) #​43576
Semver-Patch Commits

v18.18.0: 2023-09-18, Version 18.18.0 'Hydrogen' (LTS), @​ruyadorno

Compare Source

Notable Changes
Commits

v18.17.1: 2023-08-09, Version 18.17.1 'Hydrogen' (LTS), @​RafaelGSS

Compare Source

This is a security release.

Notable Changes

The following CVEs are fixed in this release:

More detailed information on each of the vulnerabilities can be found in August 2023 Security Releases blog post.

Commits

v18.17.0: 2023-07-18, Version 18.17.0 'Hydrogen' (LTS), @​danielleadams

Compare Source

Notable Changes
Ada 2.0

Node.js v18.17.0 comes with the latest version of the URL parser, Ada. This update brings significant performance improvements to URL parsing, including enhancements to the url.domainToASCII and url.domainToUnicode functions in node:url.

Ada 2.0 has been integrated into the Node.js codebase, ensuring that all parts of the application can benefit from the improved performance. Additionally, Ada 2.0 features a significant performance boost over its predecessor, Ada 1.0.4, while also eliminating the need for the ICU requirement for URL hostname parsing.

Contributed by Yagiz Nizipli and Daniel Lemire in #​47339

Web Crypto API

Web Crypto API functions' arguments are now coerced and validated as per their WebIDL definitions like in other Web Crypto API implementations. This further improves interoperability with other implementations of Web Crypto API.

Contributed by Filip Skokan in #​46067

  • crypto:
    • update root certificates to NSS 3.89 (Node.js GitHub Bot) #​47659
  • dns:
    • (SEMVER-MINOR) expose getDefaultResultOrder (btea) #​46973
  • doc:
    • add ovflowd to collaborators (Claudio Wunder) #​47844
    • add KhafraDev to collaborators (Matthew Aitken) #​47510
  • events:
    • (SEMVER-MINOR) add getMaxListeners method (Matthew Aitken) #​47039
  • fs:
    • (SEMVER-MINOR) add support for mode flag to specify the copy behavior (Tetsuharu Ohzeki) #​47084
    • (SEMVER-MINOR) add recursive option to readdir and opendir (Ethan Arrowood) #​41439
    • (SEMVER-MINOR) add support for mode flag to specify the copy behavior (Tetsuharu Ohzeki) #​47084
    • (SEMVER-MINOR) implement byob mode for readableWebStream() (Debadree Chatterjee) #​46933
  • http:
    • (SEMVER-MINOR) prevent writing to the body when not allowed by HTTP spec (Gerrard Lindsay) #​47732
    • (SEMVER-MINOR) remove internal error in assignSocket (Matteo Collina) #​47723
    • (SEMVER-MINOR) add highWaterMark opt in http.createServer (HinataKah0) #​47405
  • lib:
    • (SEMVER-MINOR) add webstreams to Duplex.from() (Debadree Chatterjee) #​46190
    • (SEMVER-MINOR) implement AbortSignal.any() (Chemi Atlow) #​47821
  • module:
    • change default resolver to not throw on unknown scheme (Gil Tayar) #​47824
  • node-api:
    • (SEMVER-MINOR) define version 9 (Chengzhong Wu) #​48151
    • (SEMVER-MINOR) deprecate napi_module_register (Vladimir Morozov) #​46319
  • stream:
    • (SEMVER-MINOR) preserve object mode in compose (Raz Luvaton) #​47413
    • (SEMVER-MINOR) add setter & getter for default highWaterMark (#​46929) (Robert Nagy) #​46929
  • test:
    • unflake test-vm-timeout-escape-nexttick (Santiago Gimeno) #​48078
  • test_runner:
    • (SEMVER-MINOR) add shorthands to test (Chemi Atlow) #​47909
    • (SEMVER-MINOR) support combining coverage reports (Colin Ihrig) #​47686
    • (SEMVER-MINOR) execute before hook on test (Chemi Atlow) #​47586
    • (SEMVER-MINOR) expose reporter for use in run api (Chemi Atlow) #​47238
  • tools:
    • update LICENSE and license-builder.sh (Santiago Gimeno) #​48078
  • url:
    • (SEMVER-MINOR) implement URL.canParse (Matthew Aitken) #​47179
  • wasi:
    • (SEMVER-MINOR) no longer require flag to enable wasi (Michael Dawson) #​47286
Commits

v18.16.1: 2023-06-20, Version 18.16.1 'Hydrogen' (LTS), @​RafaelGSS

Compare Source

This is a security release.

Notable Changes

The following CVEs are fixed in this release:

More detailed information on each of the vulnerabilities can be found in June 2023 Security Releases blog post.

Commits

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this MR and you won't be reminded about these updates again.


  • If you want to rebase/retry this MR, check this box

This MR has been generated by Renovate Bot.

Edited by Renovate Bot

Merge request reports

Loading