Node.js 20

20 released 18 April 2023, latest 20.20.2.

Node.js 20 reached end of life on 30 April 2026.

What changed

Compared with Node.js 18, Node.js 20 brought a newer V8 JavaScript engine, the Ada 2.0 URL parser, and several platform-level runtime changes. The built-in node:test test runner became stable, making it a supported alternative to third-party test frameworks for many use cases. ECMAScript module loader hooks moved off the main thread, which can affect custom loaders that rely on timing, shared state, or assumptions about process execution. Node.js 20 also introduced an experimental permission model for restricting filesystem, child-process, worker-thread, native-addon, and network capabilities, plus experimental support for building single executable applications. These experimental features should not be treated as a compatibility guarantee across later Node.js lines.

What staying costs

Node.js 20 has reached end of life, so it no longer receives maintenance or security fixes from the Node.js project. A newly disclosed runtime, V8, OpenSSL, HTTP, TLS, or dependency-related issue may therefore require a migration rather than a patched Node.js 20 release. Staying on this line also increases operational risk as libraries, build tools, native modules, and hosted platforms shift their tested and supported runtime ranges to newer Node.js versions. Teams using custom ESM loaders, native addons, or experimental Node.js 20 features face additional upgrade risk because those areas can have behavior or API changes in newer lines.

What to do

Plan a move to a currently supported Node.js line and test the application against that target before changing production defaults. Update CI, container images, deployment buildpacks, developer toolchains, and version-manager configuration together so every environment uses the same supported runtime range. Run the full unit, integration, startup, and production-like workload tests, with particular attention to ESM resolution and custom loaders, URL handling, TLS and HTTP clients, child processes, native addons, and packages with Node.js engine constraints. Rebuild or upgrade native dependencies for the target runtime, review lockfile changes, and verify that observability, process-management, and deployment tooling support it. If the application enabled Node.js 20 permission-model or single-executable features, validate those implementations separately because they were experimental rather than long-term stable interfaces.

We can tell you what moving off Node.js 20 involves.

What it takes to move off Node.js 20 depends on what you built on it — the version you are on, how much depends on it, and how much of the work is mechanical. Leave your email with this version and we can tell you what that looks like for you.

Not sure yet? Get my plan