What's new in this version:
- Initially, Node.js 18 will replace Node.js 17 as our ‘Current’ release line. As per the release schedule, Node.js 18 will be the ‘Current’ release for the next 6 months and then promoted to Long-term Support (LTS) in October 2022. Once promoted to long-term support the release will be designated the codename ‘Hydrogen’. Node.js 18 will be supported until April 2025.
Deprecations and Removals:
- (SEMVER-MAJOR) fs: runtime deprecate string coercion in fs.write, fs.writeFileSync
- (SEMVER-MAJOR) dns: remove dns.lookup and dnsPromises.lookup options type coercion
- (SEMVER-MAJOR) process: runtime deprecate multipleResolves
- (SEMVER-MAJOR) stream: remove thenable support
- (SEMVER-MAJOR) tls: move tls.parseCertString to end-of-life
- An experimental fetch API is available on the global scope by default. The implementation is based upon undici, an HTTP/1.1 client written for Node.js by contributors to the project.
- Through this addition, the following globals are made available: fetch, FormData, Headers, Request, Response
- Disable this API with the --no-experimental-fetch command-line flag
- server.headersTimeout which limits the amount of time the parser will wait to receive the complete HTTP headers is now set to 60000 (60 seconds) by default.
- server.requestTimeout which sets the timeout value in milliseconds for receiving the entire request from the client is now set to 300000 (5 minutes) by default.
- If these timeouts expire, the server responds with status 408 without forwarding the request to the request listener and then closes the connection.
- Both timeouts must be set to a non-zero value to protect against potential Denial-of-Service attacks in case the server is deployed without a reverse proxy in front.
Test Runner module (experimental):
- import test from 'node:test';
- This module is only available under the node: scheme
Toolchain and Compiler Upgrades:
- Prebuilt binaries for Linux are now built on Red Hat Enterprise Linux (RHEL) 8 and are compatible with Linux distributions based on glibc 2.28 or later, for example, Debian 10, RHEL 8, Ubuntu 20.04.
- Prebuilt binaries for macOS now require macOS 10.15 or later
- For AIX the minimum supported architecture has been raised from Power 7 to Power 8
- Prebuilt binaries for 32-bit Windows will initially not be available due to issues building the V8 dependency in Node.js. We hope to restore 32-bit Windows binaries for Node.js 18 with a future V8 update.
- Node.js does not support running on operating systems that are no longer supported by their vendor. For operating systems where their vendor has planned to end support earlier than April 2025, such as Windows 8.1 (January 2023) and Windows Server 2012 R2 (October 2023), support for Node.js 18 will end at the earlier date.
- Full details about the supported toolchains and compilers are documented in the Node.js BUILDING.md file
The V8 engine is updated to version 10.1, which is part of Chromium 101. Compared to the version included in Node.js 17.9.0, the following new features are included:
- The findLast and findLastIndex array methods
- Improvements to the Intl.Locale API
- The Intl.supportedValuesOf function
- Improved performance of class fields and private class methods (the initialization of them is now as fast as ordinary property stores)
- The data format returned by the serialization API (v8.serialize(value)) has changed, and cannot be deserialized by earlier versions of Node.js. On the other hand, it is still possible to deserialize the previous format, as the API is backwards-compatible.
Web Streams API (experimental):
- Node.js now exposes the experimental implementation of the Web Streams API on the global scope. This means the following APIs are now globally available:
- ReadableStream, ReadableStreamDefaultReader, ReadableStreamBYOBReader, ReadableStreamBYOBRequest, ReadableByteStreamController, ReadableStreamDefaultController, TransformStream, TransformStreamDefaultController, WritableStream, WritableStreamDefaultWriter, WritableStreamDefaultController, ByteLengthQueuingStrategy, CountQueuingStrategy, TextEncoderStream, TextDecoderStream, CompressionStream, DecompressionStream.
Other Notable Changes:
- (SEMVER-MAJOR) buffer: expose Blob as a global
- (SEMVER-MAJOR) child_process: improve argument validation
- doc: add RafaelGSS to collaborators
- (SEMVER-MAJOR) http: make TCP noDelay enabled by default
- (SEMVER-MAJOR) net: make server.address() return an integer for family
- (SEMVER-MAJOR) worker: expose BroadcastChannel as a global
- (SEMVER-MAJOR) worker: graduate BroadcastChannel to supported