From 99941b4abcf54f8937de2cbf337b01a58571c27d Mon Sep 17 00:00:00 2001 From: RafaelGSS Date: Tue, 18 Apr 2023 13:07:55 -0300 Subject: [PATCH 1/2] Blog: v20.0.0 release post Refs: https://github.com/nodejs/node/pull/47381 --- pages/en/blog/release/v20.0.0.md | 337 +++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 pages/en/blog/release/v20.0.0.md diff --git a/pages/en/blog/release/v20.0.0.md b/pages/en/blog/release/v20.0.0.md new file mode 100644 index 000000000000..79d5e3fc7f65 --- /dev/null +++ b/pages/en/blog/release/v20.0.0.md @@ -0,0 +1,337 @@ +--- +date: 2023-04-18T16:07:46.722Z +category: release +title: Node v20.0.0 (Current) +layout: blog-post.hbs +author: Rafael Gonzaga +--- + +### 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](https://nodejs.org/api/permissions.html#process-based-permissions). + +The Permission Model was a contribution by Rafael Gonzaga in [#44004](https://github.com/nodejs/node/pull/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](https://github.com/nodejs/node/pull/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: + +* [String.prototype.isWellFormed and toWellFormed](https://chromestatus.com/feature/5200195346759680) +* [Methods that change Array and TypedArray by copy](https://chromestatus.com/feature/5068609911521280) +* [Resizable ArrayBuffer and growable SharedArrayBuffer](https://chromestatus.com/feature/4668361878274048) +* [RegExp v flag with set notation + properties of strings](https://chromestatus.com/feature/5144156542861312) +* [WebAssembly Tail Call](https://chromestatus.com/feature/5423405012615168) + +The V8 update was a contribution by Michaël Zasso in [#47251](https://github.com/nodejs/node/pull/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](https://github.com/nodejs/node/pull/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](https://github.com/nodejs/node/pull/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](https://github.com/nodejs/node/pull/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](https://github.com/nodejs/node/pull/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](https://github.com/nodejs/node/pull/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](https://github.com/nodejs/node/pull/47391). + +#### Deprecations and Removals + +* \[[`3bed5f11e0`](https://github.com/nodejs/node/commit/3bed5f11e0)] - **(SEMVER-MAJOR)** **url**: runtime-deprecate url.parse() with invalid ports (Rich Trott) [#45526](https://github.com/nodejs/node/pull/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`](https://github.com/nodejs/node/commit/9fafb0a090)] - **(SEMVER-MAJOR)** **async\_hooks**: deprecate the AsyncResource.bind asyncResource property (James M Snell) [#46432](https://github.com/nodejs/node/pull/46432) +* \[[`1948d37595`](https://github.com/nodejs/node/commit/1948d37595)] - **(SEMVER-MAJOR)** **buffer**: check INSPECT\_MAX\_BYTES with validateNumber (Umuoy) [#46599](https://github.com/nodejs/node/pull/46599) +* \[[`7bc0e6a4e7`](https://github.com/nodejs/node/commit/7bc0e6a4e7)] - **(SEMVER-MAJOR)** **buffer**: graduate File from experimental and expose as global (Khafra) [#47153](https://github.com/nodejs/node/pull/47153) +* \[[`671ffd7825`](https://github.com/nodejs/node/commit/671ffd7825)] - **(SEMVER-MAJOR)** **buffer**: use min/max of `validateNumber` (Deokjin Kim) [#45796](https://github.com/nodejs/node/pull/45796) +* \[[`ab1614d280`](https://github.com/nodejs/node/commit/ab1614d280)] - **(SEMVER-MAJOR)** **build**: reset embedder string to "-node.0" (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`c1bcdbcf79`](https://github.com/nodejs/node/commit/c1bcdbcf79)] - **(SEMVER-MAJOR)** **build**: warn for gcc versions earlier than 10.1 (Richard Lau) [#46806](https://github.com/nodejs/node/pull/46806) +* \[[`649f68fc1e`](https://github.com/nodejs/node/commit/649f68fc1e)] - **(SEMVER-MAJOR)** **build**: reset embedder string to "-node.0" (Yagiz Nizipli) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`9374700d7a`](https://github.com/nodejs/node/commit/9374700d7a)] - **(SEMVER-MAJOR)** **crypto**: remove DEFAULT\_ENCODING (Tobias Nießen) [#47182](https://github.com/nodejs/node/pull/47182) +* \[[`1640aeb680`](https://github.com/nodejs/node/commit/1640aeb680)] - **(SEMVER-MAJOR)** **crypto**: remove obsolete SSL\_OP\_\* constants (Tobias Nießen) [#47073](https://github.com/nodejs/node/pull/47073) +* \[[`c2e4b1fa9a`](https://github.com/nodejs/node/commit/c2e4b1fa9a)] - **(SEMVER-MAJOR)** **crypto**: remove ALPN\_ENABLED (Tobias Nießen) [#47028](https://github.com/nodejs/node/pull/47028) +* \[[`3ef38c4bd7`](https://github.com/nodejs/node/commit/3ef38c4bd7)] - **(SEMVER-MAJOR)** **crypto**: use WebIDL converters in WebCryptoAPI (Filip Skokan) [#46067](https://github.com/nodejs/node/pull/46067) +* \[[`08af023b1f`](https://github.com/nodejs/node/commit/08af023b1f)] - **(SEMVER-MAJOR)** **crypto**: runtime deprecate replaced rsa-pss keygen parameters (Filip Skokan) [#45653](https://github.com/nodejs/node/pull/45653) +* \[[`7eb0ac3cb6`](https://github.com/nodejs/node/commit/7eb0ac3cb6)] - **(SEMVER-MAJOR)** **deps**: patch V8 to support compilation on win-arm64 (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`a7c129f286`](https://github.com/nodejs/node/commit/a7c129f286)] - **(SEMVER-MAJOR)** **deps**: silence irrelevant V8 warning (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`6f5655a18e`](https://github.com/nodejs/node/commit/6f5655a18e)] - **(SEMVER-MAJOR)** **deps**: always define V8\_EXPORT\_PRIVATE as no-op (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`f226350fcb`](https://github.com/nodejs/node/commit/f226350fcb)] - **(SEMVER-MAJOR)** **deps**: update V8 to 11.3.244.4 (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`d6dae7420e`](https://github.com/nodejs/node/commit/d6dae7420e)] - **(SEMVER-MAJOR)** **deps**: V8: cherry-pick f1c888e7093e (Michaël Zasso) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`56c436533e`](https://github.com/nodejs/node/commit/56c436533e)] - **(SEMVER-MAJOR)** **deps**: fix V8 build on Windows with MSVC (Michaël Zasso) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`51ab98c71b`](https://github.com/nodejs/node/commit/51ab98c71b)] - **(SEMVER-MAJOR)** **deps**: silence irrelevant V8 warning (Michaël Zasso) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`9f84d3eea8`](https://github.com/nodejs/node/commit/9f84d3eea8)] - **(SEMVER-MAJOR)** **deps**: V8: fix v8-cppgc.h for MSVC (Jiawen Geng) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`f2318cd4b5`](https://github.com/nodejs/node/commit/f2318cd4b5)] - **(SEMVER-MAJOR)** **deps**: fix V8 build issue with inline methods (Jiawen Geng) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`16e03e7968`](https://github.com/nodejs/node/commit/16e03e7968)] - **(SEMVER-MAJOR)** **deps**: update V8 to 10.9.194.4 (Yagiz Nizipli) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`6473f5e7f7`](https://github.com/nodejs/node/commit/6473f5e7f7)] - **(SEMVER-MAJOR)** **doc**: update toolchains used for Node.js 20 releases (Richard Lau) [#47352](https://github.com/nodejs/node/pull/47352) +* \[[`cc18fd9608`](https://github.com/nodejs/node/commit/cc18fd9608)] - **(SEMVER-MAJOR)** **events**: refactor to use `validateNumber` (Deokjin Kim) [#45770](https://github.com/nodejs/node/pull/45770) +* \[[`ff92b40ffc`](https://github.com/nodejs/node/commit/ff92b40ffc)] - **(SEMVER-MAJOR)** **http**: close the connection after sending a body without declared length (Tim Perry) [#46333](https://github.com/nodejs/node/pull/46333) +* \[[`2a29df6464`](https://github.com/nodejs/node/commit/2a29df6464)] - **(SEMVER-MAJOR)** **http**: keep HTTP/1.1 conns alive even if the Connection header is removed (Tim Perry) [#46331](https://github.com/nodejs/node/pull/46331) +* \[[`391dc74a10`](https://github.com/nodejs/node/commit/391dc74a10)] - **(SEMVER-MAJOR)** **http**: throw error if options of http.Server is array (Deokjin Kim) [#46283](https://github.com/nodejs/node/pull/46283) +* \[[`ed3604cd64`](https://github.com/nodejs/node/commit/ed3604cd64)] - **(SEMVER-MAJOR)** **http**: server check Host header, to meet RFC 7230 5.4 requirement (wwwzbwcom) [#45597](https://github.com/nodejs/node/pull/45597) +* \[[`88d71dc301`](https://github.com/nodejs/node/commit/88d71dc301)] - **(SEMVER-MAJOR)** **lib**: refactor to use min/max of `validateNumber` (Deokjin Kim) [#45772](https://github.com/nodejs/node/pull/45772) +* \[[`e4d641f02a`](https://github.com/nodejs/node/commit/e4d641f02a)] - **(SEMVER-MAJOR)** **lib**: refactor to use validators in http2 (Debadree Chatterjee) [#46174](https://github.com/nodejs/node/pull/46174) +* \[[`0f3e531096`](https://github.com/nodejs/node/commit/0f3e531096)] - **(SEMVER-MAJOR)** **lib**: performance improvement on readline async iterator (Thiago Oliveira Santos) [#41276](https://github.com/nodejs/node/pull/41276) +* \[[`5b5898ac86`](https://github.com/nodejs/node/commit/5b5898ac86)] - **(SEMVER-MAJOR)** **lib,src**: update exit codes as per todos (Debadree Chatterjee) [#45841](https://github.com/nodejs/node/pull/45841) +* \[[`55321bafd1`](https://github.com/nodejs/node/commit/55321bafd1)] - **(SEMVER-MAJOR)** **net**: enable autoSelectFamily by default (Paolo Insogna) [#46790](https://github.com/nodejs/node/pull/46790) +* \[[`2d0d99733b`](https://github.com/nodejs/node/commit/2d0d99733b)] - **(SEMVER-MAJOR)** **process**: remove `process.exit()`, `process.exitCode` coercion to integer (Daeyeon Jeong) [#43716](https://github.com/nodejs/node/pull/43716) +* \[[`dc06df31b6`](https://github.com/nodejs/node/commit/dc06df31b6)] - **(SEMVER-MAJOR)** **readline**: refactor to use `validateNumber` (Deokjin Kim) [#45801](https://github.com/nodejs/node/pull/45801) +* \[[`295b2f3ff4`](https://github.com/nodejs/node/commit/295b2f3ff4)] - **(SEMVER-MAJOR)** **src**: update NODE\_MODULE\_VERSION to 115 (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`3803b028dd`](https://github.com/nodejs/node/commit/3803b028dd)] - **(SEMVER-MAJOR)** **src**: share common code paths for SEA and embedder script (Anna Henningsen) [#46825](https://github.com/nodejs/node/pull/46825) +* \[[`e8bddac3e9`](https://github.com/nodejs/node/commit/e8bddac3e9)] - **(SEMVER-MAJOR)** **src**: apply ABI-breaking API simplifications (Anna Henningsen) [#46705](https://github.com/nodejs/node/pull/46705) +* \[[`f84de0ad4c`](https://github.com/nodejs/node/commit/f84de0ad4c)] - **(SEMVER-MAJOR)** **src**: use uint32\_t for process initialization flags enum (Anna Henningsen) [#46427](https://github.com/nodejs/node/pull/46427) +* \[[`a6242772ec`](https://github.com/nodejs/node/commit/a6242772ec)] - **(SEMVER-MAJOR)** **src**: fix ArrayBuffer::Detach deprecation (Michaël Zasso) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`dd5c39a808`](https://github.com/nodejs/node/commit/dd5c39a808)] - **(SEMVER-MAJOR)** **src**: update NODE\_MODULE\_VERSION to 112 (Yagiz Nizipli) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`63eca7fec0`](https://github.com/nodejs/node/commit/63eca7fec0)] - **(SEMVER-MAJOR)** **stream**: validate readable defaultEncoding (Marco Ippolito) [#46430](https://github.com/nodejs/node/pull/46430) +* \[[`9e7093f416`](https://github.com/nodejs/node/commit/9e7093f416)] - **(SEMVER-MAJOR)** **stream**: validate writable defaultEncoding (Marco Ippolito) [#46322](https://github.com/nodejs/node/pull/46322) +* \[[`fb91ee4f26`](https://github.com/nodejs/node/commit/fb91ee4f26)] - **(SEMVER-MAJOR)** **test**: make trace-gc-flag tests less strict (Yagiz Nizipli) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`eca618071e`](https://github.com/nodejs/node/commit/eca618071e)] - **(SEMVER-MAJOR)** **test**: adapt test-v8-stats for V8 update (Michaël Zasso) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`c03354d3e0`](https://github.com/nodejs/node/commit/c03354d3e0)] - **(SEMVER-MAJOR)** **test**: test case for multiple res.writeHead and res.getHeader (Marco Ippolito) [#45508](https://github.com/nodejs/node/pull/45508) +* \[[`c733cc0c7f`](https://github.com/nodejs/node/commit/c733cc0c7f)] - **(SEMVER-MAJOR)** **test\_runner**: mark module as stable (Colin Ihrig) [#46983](https://github.com/nodejs/node/pull/46983) +* \[[`7ce223273d`](https://github.com/nodejs/node/commit/7ce223273d)] - **(SEMVER-MAJOR)** **tools**: update V8 gypfiles for 11.1 (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`ca4bd3023e`](https://github.com/nodejs/node/commit/ca4bd3023e)] - **(SEMVER-MAJOR)** **tools**: update V8 gypfiles for 11.0 (Michaël Zasso) [#47251](https://github.com/nodejs/node/pull/47251) +* \[[`58b06a269a`](https://github.com/nodejs/node/commit/58b06a269a)] - **(SEMVER-MAJOR)** **tools**: update V8 gypfiles (Michaël Zasso) [#45579](https://github.com/nodejs/node/pull/45579) +* \[[`027841c964`](https://github.com/nodejs/node/commit/027841c964)] - **(SEMVER-MAJOR)** **url**: use private properties for brand check (Yagiz Nizipli) [#46904](https://github.com/nodejs/node/pull/46904) +* \[[`3bed5f11e0`](https://github.com/nodejs/node/commit/3bed5f11e0)] - **(SEMVER-MAJOR)** **url**: runtime-deprecate url.parse() with invalid ports (Rich Trott) [#45526](https://github.com/nodejs/node/pull/45526) +* \[[`7c76fddf25`](https://github.com/nodejs/node/commit/7c76fddf25)] - **(SEMVER-MAJOR)** **util,doc**: mark parseArgs() as stable (Colin Ihrig) [#46718](https://github.com/nodejs/node/pull/46718) +* \[[`4b52727976`](https://github.com/nodejs/node/commit/4b52727976)] - **(SEMVER-MAJOR)** **wasi**: make version non-optional (Michael Dawson) [#47391](https://github.com/nodejs/node/pull/47391) + +### Semver-Minor Commits + +* \[[`d4b440bfac`](https://github.com/nodejs/node/commit/d4b440bfac)] - **(SEMVER-MINOR)** **fs**: implement byob mode for readableWebStream() (Debadree Chatterjee) [#46933](https://github.com/nodejs/node/pull/46933) +* \[[`00c222593e`](https://github.com/nodejs/node/commit/00c222593e)] - **(SEMVER-MINOR)** **src,process**: add permission model (Rafael Gonzaga) [#44004](https://github.com/nodejs/node/pull/44004) +* \[[`978b57d750`](https://github.com/nodejs/node/commit/978b57d750)] - **(SEMVER-MINOR)** **wasi**: no longer require flag to enable wasi (Michael Dawson) [#47286](https://github.com/nodejs/node/pull/47286) + +### Semver-Patch Commits + +* \[[`e50c6b9a22`](https://github.com/nodejs/node/commit/e50c6b9a22)] - **bootstrap**: do not expand process.argv\[1] for snapshot entry points (Joyee Cheung) [#47466](https://github.com/nodejs/node/pull/47466) +* \[[`c81e1143e4`](https://github.com/nodejs/node/commit/c81e1143e4)] - **bootstrap**: store internal loaders in C++ via a binding (Joyee Cheung) [#47215](https://github.com/nodejs/node/pull/47215) +* \[[`8e673bdb84`](https://github.com/nodejs/node/commit/8e673bdb84)] - **build**: add node-core-utils to setup (Jiawen Geng) [#47442](https://github.com/nodejs/node/pull/47442) +* \[[`5b561d72a6`](https://github.com/nodejs/node/commit/5b561d72a6)] - **build**: sync cares source change (Jiawen Geng) [#47359](https://github.com/nodejs/node/pull/47359) +* \[[`8e6ee53e4e`](https://github.com/nodejs/node/commit/8e6ee53e4e)] - **build**: remove non-exist build file (Jiawen Geng) [#47361](https://github.com/nodejs/node/pull/47361) +* \[[`9a4d21d1d9`](https://github.com/nodejs/node/commit/9a4d21d1d9)] - **build, deps, tools**: avoid excessive LTO (Konstantin Demin) [#47313](https://github.com/nodejs/node/pull/47313) +* \[[`48c01485cd`](https://github.com/nodejs/node/commit/48c01485cd)] - **crypto**: replace THROW with CHECK for scrypt keylen (Tobias Nießen) [#47407](https://github.com/nodejs/node/pull/47407) +* \[[`4c1a27716b`](https://github.com/nodejs/node/commit/4c1a27716b)] - **crypto**: re-add padding for AES-KW wrapped JWKs (Filip Skokan) [#46563](https://github.com/nodejs/node/pull/46563) +* \[[`b66eb15d12`](https://github.com/nodejs/node/commit/b66eb15d12)] - **deps**: update simdutf to 3.2.7 (Node.js GitHub Bot) [#47473](https://github.com/nodejs/node/pull/47473) +* \[[`3fc11477ba`](https://github.com/nodejs/node/commit/3fc11477ba)] - **deps**: update corepack to 0.17.2 (Node.js GitHub Bot) [#47474](https://github.com/nodejs/node/pull/47474) +* \[[`c1776531ab`](https://github.com/nodejs/node/commit/c1776531ab)] - **deps**: upgrade npm to 9.6.4 (npm team) [#47432](https://github.com/nodejs/node/pull/47432) +* \[[`e7ca09f310`](https://github.com/nodejs/node/commit/e7ca09f310)] - **deps**: update zlib to upstream 5edb52d4 (Luigi Pinca) [#47151](https://github.com/nodejs/node/pull/47151) +* \[[`88387ccd12`](https://github.com/nodejs/node/commit/88387ccd12)] - **deps**: update ada to 2.0.0 (Node.js GitHub Bot) [#47339](https://github.com/nodejs/node/pull/47339) +* \[[`9f468cc37e`](https://github.com/nodejs/node/commit/9f468cc37e)] - **deps**: cherry-pick Windows ARM64 fix for openssl (Richard Lau) [#46570](https://github.com/nodejs/node/pull/46570) +* \[[`eeab210b1b`](https://github.com/nodejs/node/commit/eeab210b1b)] - **deps**: update archs files for quictls/openssl-3.0.8+quic (RafaelGSS) [#46570](https://github.com/nodejs/node/pull/46570) +* \[[`d93d7716c7`](https://github.com/nodejs/node/commit/d93d7716c7)] - **deps**: upgrade openssl sources to quictls/openssl-3.0.8+quic (RafaelGSS) [#46571](https://github.com/nodejs/node/pull/46571) +* \[[`0f69ec4dd7`](https://github.com/nodejs/node/commit/0f69ec4dd7)] - **deps**: patch V8 to 10.9.194.9 (Michaël Zasso) [#45995](https://github.com/nodejs/node/pull/45995) +* \[[`5890d09644`](https://github.com/nodejs/node/commit/5890d09644)] - **deps**: patch V8 to 10.9.194.6 (Michaël Zasso) [#45748](https://github.com/nodejs/node/pull/45748) +* \[[`c02a7e7e93`](https://github.com/nodejs/node/commit/c02a7e7e93)] - **diagnostics\_channel**: fix ref counting bug when reaching zero subscribers (Stephen Belanger) [#47520](https://github.com/nodejs/node/pull/47520) +* \[[`c7ad5bb37d`](https://github.com/nodejs/node/commit/c7ad5bb37d)] - **doc**: info on handling unintended breaking changes (Michael Dawson) [#47426](https://github.com/nodejs/node/pull/47426) +* \[[`7d2d40ed0d`](https://github.com/nodejs/node/commit/7d2d40ed0d)] - **doc**: add performance initiative (Yagiz Nizipli) [#47424](https://github.com/nodejs/node/pull/47424) +* \[[`d56c0f7318`](https://github.com/nodejs/node/commit/d56c0f7318)] - **doc**: do not create a backup file (Luigi Pinca) [#47151](https://github.com/nodejs/node/pull/47151) +* \[[`412d27b65b`](https://github.com/nodejs/node/commit/412d27b65b)] - **doc**: add MoLow to the TSC (Colin Ihrig) [#47436](https://github.com/nodejs/node/pull/47436) +* \[[`f131cca0c0`](https://github.com/nodejs/node/commit/f131cca0c0)] - **doc**: reserve 116 for Electron 25 (Keeley Hammond) [#47375](https://github.com/nodejs/node/pull/47375) +* \[[`1022c6f424`](https://github.com/nodejs/node/commit/1022c6f424)] - **doc**: add experimental stages (Geoffrey Booth) [#46100](https://github.com/nodejs/node/pull/46100) +* \[[`42d3d74717`](https://github.com/nodejs/node/commit/42d3d74717)] - **doc**: clarify release notes for Node.js 16.19.0 (Richard Lau) [#45846](https://github.com/nodejs/node/pull/45846) +* \[[`533c6512da`](https://github.com/nodejs/node/commit/533c6512da)] - **doc**: clarify release notes for Node.js 14.21.2 (Richard Lau) [#45846](https://github.com/nodejs/node/pull/45846) +* \[[`97165fc1a6`](https://github.com/nodejs/node/commit/97165fc1a6)] - **doc**: fix doc metadata for Node.js 16.19.0 (Richard Lau) [#45863](https://github.com/nodejs/node/pull/45863) +* \[[`a266b8b702`](https://github.com/nodejs/node/commit/a266b8b702)] - **doc**: add registry number for Electron 23 & 24 (Keeley Hammond) [#45661](https://github.com/nodejs/node/pull/45661) +* \[[`2613a9ced9`](https://github.com/nodejs/node/commit/2613a9ced9)] - **esm**: move hook execution to separate thread (Jacob Smith) [#44710](https://github.com/nodejs/node/pull/44710) +* \[[`841f6b3abf`](https://github.com/nodejs/node/commit/841f6b3abf)] - **esm**: increase test coverage of edge cases (Antoine du Hamel) [#47033](https://github.com/nodejs/node/pull/47033) +* \[[`0d575fe61a`](https://github.com/nodejs/node/commit/0d575fe61a)] - **gyp**: put filenames in variables (Cheng Zhao) [#46965](https://github.com/nodejs/node/pull/46965) +* \[[`41b186722c`](https://github.com/nodejs/node/commit/41b186722c)] - **lib**: distinguish webidl interfaces with the extended property "Exposed" (Chengzhong Wu) [#46809](https://github.com/nodejs/node/pull/46809) +* \[[`9b7db62276`](https://github.com/nodejs/node/commit/9b7db62276)] - **lib**: makeRequireFunction patch when experimental policy (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) +* \[[`d43b532789`](https://github.com/nodejs/node/commit/d43b532789)] - **lib**: refactor to use `validateBuffer` (Deokjin Kim) [#46489](https://github.com/nodejs/node/pull/46489) +* \[[`9a76a2521b`](https://github.com/nodejs/node/commit/9a76a2521b)] - **meta**: ping security-wg team on permission model changes (Rafael Gonzaga) [#47483](https://github.com/nodejs/node/pull/47483) +* \[[`a4dadde1ba`](https://github.com/nodejs/node/commit/a4dadde1ba)] - **meta**: ping startup and realm team on src/node\_realm\* changes (Joyee Cheung) [#47448](https://github.com/nodejs/node/pull/47448) +* \[[`631c3ef3de`](https://github.com/nodejs/node/commit/631c3ef3de)] - **module**: do less CJS module loader initialization at run time (Joyee Cheung) [#47194](https://github.com/nodejs/node/pull/47194) +* \[[`8bcf0a42f7`](https://github.com/nodejs/node/commit/8bcf0a42f7)] - **permission**: fix chmod,chown improve fs coverage (Rafael Gonzaga) [#47529](https://github.com/nodejs/node/pull/47529) +* \[[`54d17ff4b5`](https://github.com/nodejs/node/commit/54d17ff4b5)] - **permission**: support fs.mkdtemp (Rafael Gonzaga) [#47470](https://github.com/nodejs/node/pull/47470) +* \[[`b441b5dc65`](https://github.com/nodejs/node/commit/b441b5dc65)] - **permission**: drop process.permission.deny (Rafael Gonzaga) [#47335](https://github.com/nodejs/node/pull/47335) +* \[[`aa30e16716`](https://github.com/nodejs/node/commit/aa30e16716)] - **permission**: fix some vulnerabilities in fs (Tobias Nießen) [#47091](https://github.com/nodejs/node/pull/47091) +* \[[`1726da9300`](https://github.com/nodejs/node/commit/1726da9300)] - **permission**: add path separator to loader check (Rafael Gonzaga) [#47030](https://github.com/nodejs/node/pull/47030) +* \[[`b164038c86`](https://github.com/nodejs/node/commit/b164038c86)] - **permission**: fix spawnSync permission check (RafaelGSS) [#46975](https://github.com/nodejs/node/pull/46975) +* \[[`af91400886`](https://github.com/nodejs/node/commit/af91400886)] - **policy**: makeRequireFunction on mainModule.require (RafaelGSS) [nodejs-private/node-private#358](https://github.com/nodejs-private/node-private/pull/358) +* \[[`f8b4e26aee`](https://github.com/nodejs/node/commit/f8b4e26aee)] - **quic**: add more QUIC impl (James M Snell) [#47348](https://github.com/nodejs/node/pull/47348) +* \[[`d65ae9f678`](https://github.com/nodejs/node/commit/d65ae9f678)] - **quic**: add additional quic implementation utilities (James M Snell) [#47289](https://github.com/nodejs/node/pull/47289) +* \[[`9b104be502`](https://github.com/nodejs/node/commit/9b104be502)] - **quic**: do not dereference shared\_ptr after move (Tobias Nießen) [#47294](https://github.com/nodejs/node/pull/47294) +* \[[`09a4bb152f`](https://github.com/nodejs/node/commit/09a4bb152f)] - **quic**: add multiple internal utilities (James M Snell) [#47263](https://github.com/nodejs/node/pull/47263) +* \[[`2bde0059ca`](https://github.com/nodejs/node/commit/2bde0059ca)] - **sea**: use JSON configuration and blob content for SEA (Joyee Cheung) [#47125](https://github.com/nodejs/node/pull/47125) +* \[[`78c7475493`](https://github.com/nodejs/node/commit/78c7475493)] - **src**: allow simdutf::convert\_\* functions to return zero (Daniel Lemire) [#47471](https://github.com/nodejs/node/pull/47471) +* \[[`5250947a53`](https://github.com/nodejs/node/commit/5250947a53)] - **src**: track ShadowRealm native objects correctly in the heap snapshot (Joyee Cheung) [#47389](https://github.com/nodejs/node/pull/47389) +* \[[`8059764621`](https://github.com/nodejs/node/commit/8059764621)] - **src**: use the internal field to determine if an object is a BaseObject (Joyee Cheung) [#47217](https://github.com/nodejs/node/pull/47217) +* \[[`698508afa8`](https://github.com/nodejs/node/commit/698508afa8)] - **src**: bootstrap prepare stack trace callback in shadow realm (Chengzhong Wu) [#47107](https://github.com/nodejs/node/pull/47107) +* \[[`e6b4d30a2f`](https://github.com/nodejs/node/commit/e6b4d30a2f)] - **src**: bootstrap Web \[Exposed=\*] APIs in the shadow realm (Chengzhong Wu) [#46809](https://github.com/nodejs/node/pull/46809) +* \[[`3646a66044`](https://github.com/nodejs/node/commit/3646a66044)] - **src**: fix AliasedBuffer memory attribution in heap snapshots (Joyee Cheung) [#46817](https://github.com/nodejs/node/pull/46817) +* \[[`8b2126f63f`](https://github.com/nodejs/node/commit/8b2126f63f)] - **src**: move AliasedBuffer implementation to -inl.h (Joyee Cheung) [#46817](https://github.com/nodejs/node/pull/46817) +* \[[`3abbc3829a`](https://github.com/nodejs/node/commit/3abbc3829a)] - **src**: fix useless call in permission.cc (Tobias Nießen) [#46833](https://github.com/nodejs/node/pull/46833) +* \[[`7b1e153530`](https://github.com/nodejs/node/commit/7b1e153530)] - **src**: simplify exit code accesses (Daeyeon Jeong) [#45125](https://github.com/nodejs/node/pull/45125) +* \[[`7359b92a41`](https://github.com/nodejs/node/commit/7359b92a41)] - **test**: remove unnecessary status check on test-release-npm (RafaelGSS) [#47516](https://github.com/nodejs/node/pull/47516) +* \[[`a5a5d2fb7e`](https://github.com/nodejs/node/commit/a5a5d2fb7e)] - **test**: mark test/parallel/test-file-write-stream4 as flaky (Yagiz Nizipli) [#47423](https://github.com/nodejs/node/pull/47423) +* \[[`81ad73a205`](https://github.com/nodejs/node/commit/81ad73a205)] - **test**: remove unused callback variables (angellovc) [#47167](https://github.com/nodejs/node/pull/47167) +* \[[`757a586ead`](https://github.com/nodejs/node/commit/757a586ead)] - **test**: migrate test runner message tests to snapshot (Moshe Atlow) [#47392](https://github.com/nodejs/node/pull/47392) +* \[[`86f890539f`](https://github.com/nodejs/node/commit/86f890539f)] - **test**: remove stale entry from known\_issues.status (Richard Lau) [#47454](https://github.com/nodejs/node/pull/47454) +* \[[`1f3773d0c1`](https://github.com/nodejs/node/commit/1f3773d0c1)] - **test**: move more inspector sequential tests to parallel (Joyee Cheung) [#47412](https://github.com/nodejs/node/pull/47412) +* \[[`617b8d44c6`](https://github.com/nodejs/node/commit/617b8d44c6)] - **test**: use random port in test-inspector-enabled (Joyee Cheung) [#47412](https://github.com/nodejs/node/pull/47412) +* \[[`ade0170c4f`](https://github.com/nodejs/node/commit/ade0170c4f)] - **test**: use random port in test-inspector-debug-brk-flag (Joyee Cheung) [#47412](https://github.com/nodejs/node/pull/47412) +* \[[`1a78632cd3`](https://github.com/nodejs/node/commit/1a78632cd3)] - **test**: use random port in NodeInstance.startViaSignal() (Joyee Cheung) [#47412](https://github.com/nodejs/node/pull/47412) +* \[[`23f66b137e`](https://github.com/nodejs/node/commit/23f66b137e)] - **test**: move test-shadow-realm-gc.js to known\_issues (Joyee Cheung) [#47355](https://github.com/nodejs/node/pull/47355) +* \[[`9dfd0394c5`](https://github.com/nodejs/node/commit/9dfd0394c5)] - **test**: remove useless WPT init scripts (Khafra) [#47221](https://github.com/nodejs/node/pull/47221) +* \[[`1cfe058778`](https://github.com/nodejs/node/commit/1cfe058778)] - **test**: fix test-permission-deny-fs-wildcard (win32) (Tobias Nießen) [#47095](https://github.com/nodejs/node/pull/47095) +* \[[`b8ef1b476e`](https://github.com/nodejs/node/commit/b8ef1b476e)] - **test**: add coverage for custom loader hooks with permission model (Antoine du Hamel) [#46977](https://github.com/nodejs/node/pull/46977) +* \[[`4a7c3e9c50`](https://github.com/nodejs/node/commit/4a7c3e9c50)] - **test**: fix file path in permission symlink test (Livia Medeiros) [#46859](https://github.com/nodejs/node/pull/46859) +* \[[`10005de6a8`](https://github.com/nodejs/node/commit/10005de6a8)] - **tools**: make `js2c.py` usable for other build systems (Cheng Zhao) [#46930](https://github.com/nodejs/node/pull/46930) +* \[[`1e2f9aca72`](https://github.com/nodejs/node/commit/1e2f9aca72)] - **tools**: move update-acorn.sh to dep\_updaters and create maintaining md (Marco Ippolito) [#47382](https://github.com/nodejs/node/pull/47382) +* \[[`174662a463`](https://github.com/nodejs/node/commit/174662a463)] - **tools**: update eslint to 8.38.0 (Node.js GitHub Bot) [#47475](https://github.com/nodejs/node/pull/47475) +* \[[`a58ca61f35`](https://github.com/nodejs/node/commit/a58ca61f35)] - **tools**: update eslint to 8.38.0 (Node.js GitHub Bot) [#47475](https://github.com/nodejs/node/pull/47475) +* \[[`37d12730ab`](https://github.com/nodejs/node/commit/37d12730ab)] - **tools**: automate cjs-module-lexer dependency update (Marco Ippolito) [#47446](https://github.com/nodejs/node/pull/47446) +* \[[`4fbfa3c9f2`](https://github.com/nodejs/node/commit/4fbfa3c9f2)] - **tools**: fix notify-on-push Slack messages (Antoine du Hamel) [#47453](https://github.com/nodejs/node/pull/47453) +* \[[`b1f2ff1242`](https://github.com/nodejs/node/commit/b1f2ff1242)] - **tools**: update lint-md-dependencies to @rollup/plugin-node-resolve\@15.0.2 (Node.js GitHub Bot) [#47431](https://github.com/nodejs/node/pull/47431) +* \[[`26b2584b84`](https://github.com/nodejs/node/commit/26b2584b84)] - **tools**: add root certificate update script (Richard Lau) [#47425](https://github.com/nodejs/node/pull/47425) +* \[[`553b052648`](https://github.com/nodejs/node/commit/553b052648)] - **tools**: remove targets for individual test suites in `Makefile` (Antoine du Hamel) [#46892](https://github.com/nodejs/node/pull/46892) +* \[[`747ff43e5b`](https://github.com/nodejs/node/commit/747ff43e5b)] - **url**: more sophisticated brand check for URLSearchParams (Timothy Gu) [#47414](https://github.com/nodejs/node/pull/47414) +* \[[`e727eb066f`](https://github.com/nodejs/node/commit/e727eb066f)] - **url**: do not use object as hashmap (Timothy Gu) [#47415](https://github.com/nodejs/node/pull/47415) +* \[[`81c7875eb7`](https://github.com/nodejs/node/commit/81c7875eb7)] - **url**: drop ICU requirement for parsing hostnames (Yagiz Nizipli) [#47339](https://github.com/nodejs/node/pull/47339) +* \[[`a4895df94a`](https://github.com/nodejs/node/commit/a4895df94a)] - **url**: use ada::url\_aggregator for parsing urls (Yagiz Nizipli) [#47339](https://github.com/nodejs/node/pull/47339) + +Windows 32-bit Installer: https://nodejs.org/dist/v20.0.0/node-v20.0.0-x86.msi \ +Windows 64-bit Installer: https://nodejs.org/dist/v20.0.0/node-v20.0.0-x64.msi \ +Windows ARM 64-bit Installer: https://nodejs.org/dist/v20.0.0/node-v20.0.0-arm64.msi \ +Windows 32-bit Binary: https://nodejs.org/dist/v20.0.0/win-x86/node.exe \ +Windows 64-bit Binary: https://nodejs.org/dist/v20.0.0/win-x64/node.exe \ +Windows ARM 64-bit Binary: https://nodejs.org/dist/v20.0.0/win-arm64/node.exe \ +macOS 64-bit Installer: https://nodejs.org/dist/v20.0.0/node-v20.0.0.pkg \ +macOS Apple Silicon 64-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-darwin-arm64.tar.gz \ +macOS Intel 64-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-darwin-x64.tar.gz \ +Linux 64-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-linux-x64.tar.xz \ +Linux PPC LE 64-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-linux-ppc64le.tar.xz \ +Linux s390x 64-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-linux-s390x.tar.xz \ +AIX 64-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-aix-ppc64.tar.gz \ +ARMv7 32-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-linux-armv7l.tar.xz \ +ARMv8 64-bit Binary: https://nodejs.org/dist/v20.0.0/node-v20.0.0-linux-arm64.tar.xz \ +Source Code: https://nodejs.org/dist/v20.0.0/node-v20.0.0.tar.gz \ +Other release files: https://nodejs.org/dist/v20.0.0/ \ +Documentation: https://nodejs.org/docs/v20.0.0/api/ + +### SHASUMS + +``` +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +5fdc8901c70116d29ed462e234d11485521027dc554962c2d47fe367b61409ed node-v20.0.0-aix-ppc64.tar.gz +8c07d44eef03d98fdfbaee4f263126f940675da52a3b83781b800ecdcde70518 node-v20.0.0-arm64.msi +ee27eea6694a5d8c834b11a12fb85a5dae01a91178be12920a6da12d8c299c43 node-v20.0.0-darwin-arm64.tar.gz +91ef39295f99b1aa7d33332f76268b02fc337da6a9013d981bfbac63e41c3889 node-v20.0.0-darwin-arm64.tar.xz +a26019f8dc6f0b261b1eebabeedb00f478460c36950a99b5c7e161af005e400e node-v20.0.0-darwin-x64.tar.gz +73e86ed2966dda777820fd02eaed7bb188199e0824c7821fc404ab9ecdc5877d node-v20.0.0-darwin-x64.tar.xz +92085685c5280f78ae217f064b0fbb703e67647202ea2ddce48ea353abb6c899 node-v20.0.0-headers.tar.gz +18994f31f1a68111a36f68e615eb52868c55f8e8230e75a6ea1ec23fe97c5679 node-v20.0.0-headers.tar.xz +6eeaf1e93baf82ca95e02590eec65e3187e756ddce6c23bbec1c09d49ebbff2a node-v20.0.0-linux-arm64.tar.gz +34f345e09a4cb13e87672b89cbbefa803be8b91fa6b9f17d73645dfc83778ea9 node-v20.0.0-linux-arm64.tar.xz +3f325a308a4038d5cfbe4064b91383c72e5790f8102cad75071c0a1e17a50c07 node-v20.0.0-linux-armv7l.tar.gz +3c95be4f2627defa65822289d38cff6866b8c73940548525bffe2904cb249218 node-v20.0.0-linux-armv7l.tar.xz +dcaa1bef43687267f78014d76081b7a504aa5bc99cd60bee53586853d460b7c9 node-v20.0.0-linux-ppc64le.tar.gz +23182ad924365caf9225bbedd1f770afcc9301bdccbd244fe485fff0483324a3 node-v20.0.0-linux-ppc64le.tar.xz +5f01a3cf3e1c67587d6c2c1684445d0c04d7305a6152276fa4bfa889e92529b4 node-v20.0.0-linux-s390x.tar.gz +c44aac8a080b1fc057296c0eb3501957a4ea79658b676708a38b01a3acc3f07d node-v20.0.0-linux-s390x.tar.xz +95439a0a836fc858565c7b6a7b1e55d1741901e6f205485e496abbefe973cfce node-v20.0.0-linux-x64.tar.gz +9e512f1f1cadb3a5e37a10aa2d5e632f93aaf9f37165803e2ed981009970a3d7 node-v20.0.0-linux-x64.tar.xz +8b7309315ef71a97d8fc08ba4f5915e85e988377119df76121f04b5e93b2dc96 node-v20.0.0.pkg +c1ee3c5355a5d25426e2fd3508c603e5e7661217194219bc846a12b99b40df15 node-v20.0.0.tar.gz +7450e7579568f7d1cb398185cfce472da2837b2aa36c59620b22ce4b977b5cb5 node-v20.0.0.tar.xz +d3a68cd41eeb773e20a3033e5b1502844fd392818cb64a6cd5febf3193136ad6 node-v20.0.0-win-arm64.7z +c56eb535361233cf3c9ac0fd296c9a8050050bae77343b1f50f0077f6f7a5657 node-v20.0.0-win-arm64.zip +e78b9cdc58b0d9ab6c980180b574b38d91d5939d18b55b8772897e63d9ce4b9c node-v20.0.0-win-x64.7z +a76e2221cdd68467add78f0e7d24f2a968c2521f3fcd6f6964fc722bc9a9a9b4 node-v20.0.0-win-x64.zip +a147b247e19e1324d8f7edef6c1ae4e24e5bdad9867843a2b4b491a0f3d73dd5 node-v20.0.0-win-x86.7z +25382f5cf4cc6ee61f822975fe83e7036bbc25fb9b5acc1f480300dd0c4a1aa4 node-v20.0.0-win-x86.zip +02161c98de3722c10963f7d8bbc1544b43d6af59d091e4b403637b5173010301 node-v20.0.0-x64.msi +abe7ae577393ec031c060255c3667da063ce22a483118047b9d8958139dbe5ed node-v20.0.0-x86.msi +6d69026bfca17c06c392ee1d9577167a80d377faec9f8e153d130a60bda33650 win-arm64/node.exe +821e03fac3b1c6e431758b67d24baac34506fcb6d25fa3b097a21d38be3bcff9 win-arm64/node.lib +f428769f74da4594c7a80de92333f9bbe6d9bd1d564a1c2f1d9069585fc475ad win-arm64/node_pdb.7z +4e92098bb246061e5a4517692d1637536adf2137e764bb96b90b92101d630a91 win-arm64/node_pdb.zip +964d157e4ea07b6df6ce0eb81cc5e866e91dbda78583571ae60de08f132301e5 win-x64/node.exe +bcf7f829c51f67e1f882c83c4627423adedb94d1434a9eb981035ca32261ed5b win-x64/node.lib +6379b8e6607cc499fd542a74b4ac216d1b32290aa969b1162fd38ee4593078b0 win-x64/node_pdb.7z +6eaa6dab25c727b47e9815c88a91186083ade989399bb0c83214202b41416280 win-x64/node_pdb.zip +3952cd4af8b4684727b78cc99c9eda60a30602f2341c6e15be4c415d49c69686 win-x86/node.exe +88789614b10d5457e9a2ffb6db43477cda1f8cedcdfc68c0b51dfbd6cee94cde win-x86/node.lib +0702fb3ee97383c725177ee1443238f0575c6a32128734813767c6c8dcd3eddd win-x86/node_pdb.7z +8c4be69e2d0d01c0aa6dab0ab7788720c8b88072f76bef6f0c202c681315d6db win-x86/node_pdb.zip +-----BEGIN PGP SIGNATURE----- + +iQGzBAEBCAAdFiEEiQwI24V5Fi/uDfnbi+q0389VXvQFAmQ+wAsACgkQi+q0389V +XvQP9wv+JCYuMOoyJ8k0jy7A1VKa8Hs+GUWJahXfnqUHBmfS1Ek4loxhdbU25VP+ +XvxBr8XeCHaBCizy8O/lq8vBjwK9OqEuIwn/cNl1Sh9ttXreUIYaw1ngK+mNYwzA +mc0G5HxQmTYr2EHrZPLWiJ3etWOqM88N524oqpQpRqo/nto0aEesCuf+UGEz4ZKN +fRud41HxoToH2tFdbflbpg+XiMzNOxCwt+efTokrCVeg5a55yATPILFD/xagmaw6 +B6BcZuHg5Jkhnb8g27WT8jr6YnZuZwTvzrcUYsbSjBZZOWopaU2ZWzHczvPAg7Fw +9G+UZhW+dJg4LVRIf/gt6LGXRPNP4GPPnw8yckRotmvTPPQ0qvp+iKsxIaPqqpc/ +3EOD/x2Bnp9M45prP/9VTdWM36xuJnA8EfaTydDdVUwsxONky5iG9g5d/crzrcFT +U9yI1UqflUkNz4IoAw8jkd8bCW0buvF1jSruCO0onHmUxmi5jzWfs56/Yu6tHNM2 +bzGVwFyI +=60Kv +-----END PGP SIGNATURE----- + +``` From 2d03659e2ea4c09b437469f457ef7951941a38b1 Mon Sep 17 00:00:00 2001 From: RafaelGSS Date: Tue, 18 Apr 2023 13:10:18 -0300 Subject: [PATCH 2/2] announce: Node.js 20 release announcement --- .../announcements/v20-release-announce.md | 201 ++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 pages/en/blog/announcements/v20-release-announce.md diff --git a/pages/en/blog/announcements/v20-release-announce.md b/pages/en/blog/announcements/v20-release-announce.md new file mode 100644 index 000000000000..2239e893d786 --- /dev/null +++ b/pages/en/blog/announcements/v20-release-announce.md @@ -0,0 +1,201 @@ +--- +title: Node.js 20 is now available! +date: 2022-04-18T15:45:00.000Z +status: publish +category: announcements +slug: nodejs-20-release-announcement +layout: blog-post.hbs +author: The Node.js Project +--- + +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! + +The project continues to make progress across a number of areas, with many new features and fixes flowing into existing LTS releases. For that reason, the changes outlined in the [changelog][CHANGELOG] for Node.js 20 only represent a small subset of the features and work since the last major release. This blog post will add some additional context on the larger body of work in relation to those changes. + +You can read more about our release policy at https://github.com/nodejs/release. + +To download Node.js 20.0.0, visit: https://nodejs.org/en/download/current/. You can find the release post at https://nodejs.org/en/blog/release/v20.0.0, which contains the full list of commits included in this release. + +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 + +The Node.js Permission Model is an experimental mechanism for restricting access to specific resources during execution. + +In this first release containing the Permission Model, the features come with the following abilities: + +* Restrict access to the file system (read and write) + * Use [`--allow-fs-read`][] and [`--allow-fs-write`][] +* Restrict access to `child_process` + * Use [`--allow-child-process`][] +* Restrict access to `worker_threads` + * Use [`--allow-worker`][] +* Restrict access to native addons (same as `--no-addons` flag) + +> The available permissions are documented by the [`--experimental-permission`][] +flag. + +When starting Node.js with `--experimental-permission`, the ability to access the file system, spawn processes, and use `node:worker_threads` will be restricted. + +Developers using Node.js now have more control over file system access with the introduction of the `--allow-fs-read` and `--allow-fs-write` flags. These experimental features allow for more granular control over which parts of the file system can be accessed by Node.js processes. + +To enable these flags, developers can use the `--experimental-permission` flag along with the desired permissions. For example, running the following command allows for both read and write access to the entire file system: + +```console +$ node --experimental-permission --allow-fs-read=* --allow-fs-write=* index.js +``` + +Developers can also specify specific paths for file system access by passing in comma-separated values to the flags. For example, the following command allows for write access to the `/tmp/` folder: + +```console +$ node --experimental-permission --allow-fs-write=/tmp/ --allow-fs-read=/home/index.js index.js +``` + +Wildcard patterns can also be used to allow for access to multiple files or folders at once. For example, the following command allows for read access to all files and folders in the `/home/` directory that start with `test`: + +```console +$ node --experimental-permission --allow-fs-read=/home/test* index.js +``` + +When the Permission Model is enabled, the new `permission` property of the `process` object can be used to check if a certain permission has been granted at runtime. + +```js +process.permission.has('fs.write'); // true +process.permission.has('fs.write', '/home/nodejs/protected-folder'); // true +``` + +It is important to note that these features are still experimental and may change in future releases of Node.js + +Furthermore can be found in [Permission Model documentation](https://nodejs.org/api/permissions.html#process-based-permissions). + +The Permission Model was a contribution by Rafael Gonzaga in [#44004](https://github.com/nodejs/node/pull/44004). + +### Custom ESM loader hooks nearing stable + +Custom ES module lifecycle 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. + +In alignment with browser behavior, `import.meta.resolve()` now returns synchronously; note that `resolve` hooks in user loaders can remain async if the loader author desires, and `import.meta.resolve` will still return synchronously in application code. + +These changes were the last outstanding items before marking ESM loaders as stable. Once some time has gone by without significant bugs reported by the community, we intend to mark the loaders flag, `import.meta.resolve` and the `resolve` and `load` hooks as stable. This should enable more widespread adoption of ESM, as important constituencies such as instrumentation vendors will have a stable API on which to build analytics and reporting libraries. + +Contributed by Anna Henningsen, Antoine du Hamel, Geoffrey Booth, Guy Bedford, Jacob Smith, and Michaël Zasso in [#44710](https://github.com/nodejs/node/pull/44710). + +### V8 11.3 + +As per usual a new version of the V8 engine is included in Node.js (updated to version 11.3, which is part of Chromium 113) brining improved performance and new language features including: + +* [String.prototype.isWellFormed and toWellFormed](https://chromestatus.com/feature/5200195346759680) +* [Methods that change Array and TypedArray by copy](https://chromestatus.com/feature/5068609911521280) +* [Resizable ArrayBuffer and growable SharedArrayBuffer](https://chromestatus.com/feature/4668361878274048) +* [RegExp v flag with set notation + properties of strings](https://chromestatus.com/feature/5144156542861312) +* [WebAssembly Tail Call](https://chromestatus.com/feature/5423405012615168) + +The V8 update was a contribution by Michaël Zasso in [#47251](https://github.com/nodejs/node/pull/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. +The stable test runner includes the building blocks for authoring and running tests, including: + + * `describe`, `it`/`test` and hooks to structure test files + * mocking + * watch mode + * `node --test` for running multiple test files in parallel + +The test runner also includes some parts that are not yet stable, including reporters and code coverage + +This is a simple example of using the test runner: + +```mjs +import { test, mock } from 'node:test'; +import assert from 'node:assert'; +import fs from 'node:fs'; + +mock.method(fs, 'readFile', async () => "Hello World"); +test('synchronous passing test', async (t) => { + // This test passes because it does not throw an exception. + assert.strictEqual(await fs.readFile('a.txt'), "Hello World"); +}); +``` + +Contributed by Colin Ihrig in [#46983](https://github.com/nodejs/node/pull/46983) + +### Performance + +With the newly formed Node.js Performance team, there has been a renewed focus on performance since the last Major release. Node.js 20 includes many improvements to the fundamental parts of the runtime including `URL`, `fetch()`, and `EventTarget`. + +The cost of initializing `EventTarget` has been cut by half, providing faster access to all subsystems using it. Additionally, V8 Fast API calls have been leveraged to improve performance in APIs such as `URL.canParse()` and timers. + +Node.js 20 includes specific changes, such as the updated version 2.0 of Ada, a fast and spec-compliant URL parser written in C++. + +Looking forward to new ways to improve performance we are currently working on reducing the cost of being specification compliant by refactoring to get rid of brand validations checks on streams, `URL`, `URLSearchParams`, and String Decoder. This helps support our general goal of being specificaiton compliant where it makes sense. + +If you have a passion for performance and Node.js, we are actively looking for contributors for our [performance team](https://github.com/nodejs/performance). + +### Preparing single executable apps now requires injecting a Blob + +The project has been working on support for Single Executable Applications (SEA) over the last year with initial support landing recently. The team continues to refine the approach as the feature is still Experimental. In Node.js 20, 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. + +Example: + +**sea-config.json** +```json +{ + "main": "hello.js", + "output": "sea-prep.blob" +} +``` + +This writes the blob to the `sea-prep.blob` file. +```sh +$ node --experimental-sea-config sea-config.json +``` + +This blob can now be injected into the binary. + +This change was made to allow the the possibility of embedding multiple co-existing resources into the SEA (Single Executable Apps) which opens up new use cases. + +Contributed by Joyee Cheung in [#47125](https://github.com/nodejs/node/pull/47125) + +### Web Crypto API + +The project works toward interoperability with other JavaScript environments. As an example of that in Node.js 20, the 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](https://github.com/nodejs/node/pull/46067). + +### Official support for ARM64 Windows + +Node.js has broard platform and architecture support and people seem to want it to run everywhere. We are happy to share that 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](https://github.com/nodejs/node/pull/47233). + +### Progress on Web Assembly System Interface (WASI) + +The project continues to work on the WASI implemenation within Node.js. Some notable progress is that although it is experimental a command line option is no longer required to enable WASI. This should make it easier to consume. As the [team](https://github.com/nodejs/uvwasi) working on WASI looks forward to `preview1` a few changes were also made to plan for the future. That included adding a `version` +option when `new WASI()` is called. In the 20.x release the `version` is required and has no default value. This is important to that as new versions are supported applications don't default to what may be an obsolete version. This does mean, however, that any code that relied on the default for the version will need to be updated to request a specific version. + +If you have a interest in using WASI in Node.js or [uvwasi](https://github.com/nodejs/uvwasi) which is used outside of Node.js itself, the team would love additional contributors. + +## Call to action! + +Try out the new Node.js 20 release! We’re always happy to hear your feedback. Testing your applications and modules with Node.js 20 helps to ensure the future compatibility of your project with the latest Node.js changes and features. + +Also of note is that Node.js 14 will go End-of-Life in April 2023, so we advise you to start planning to upgrade to Node.js 18 (LTS) or Node.js 20 (soon to be LTS). + +Please, consider that Node.js 16 (LTS) will go End-of-Life in September 2023, which was brought forward from April 2024 to coincide with the end of support of OpenSSL 1.1.1. You can read more details about that decision at https://nodejs.org/en/blog/announcements/nodejs16-eol/. + +Looking to the future, the [Next-10](https://github.com/nodejs/next-10) team is running a survey to gather info from the ecosystem. Help shape the future of Node.js by participating. Submit your feedback [here](https://linuxfoundation.surveymonkey.com/r/XJ35LYF). + +[`--allow-child-process`]: https://nodejs.org/api/cli.html#--allow-child-process +[`--allow-fs-read`]: https://nodejs.org/api/cli.html#--allow-fs-read +[`--allow-fs-write`]: https://nodejs.org/api/cli.html#--allow-fs-write +[`--allow-worker`]: https://nodejs.org/api/cli.html#--allow-worker +[`--experimental-permission`]: https://nodejs.org/api/cli.html#--experimental-permission +[`permission.has()`]: https://nodejs.org/api/process.html#processpermissionhasscope-reference +[CHANGELOG]: https://github.com/nodejs/node/releases/tag/v20.0.0