Node.js 16 → Node.js 20
Node 16 is end-of-life and receives no security patches, so moving to the active Node 20 LTS is urgent. You can go directly to 20 — skipping 18 — but the larger version gap means more removed APIs and OpenSSL 3 fallout to clear.
Last verified · Updated May 22, 2026
Node 16 is end-of-life — unpatched and a security liability — so this upgrade is urgent. Go directly to the Node 20 LTS; there is no need to stop at 18. The wider version gap means a larger ABI jump for native modules and more deprecated APIs to clear than an 18-to-20 move.
Should you upgrade directly?
Yes — go straight to Node 20. Stopping at Node 18 only parks you on a maintenance line with a 2025 EOL, so it adds work without adding runway. The cost of skipping 18 is that you absorb two majors' worth of removed APIs and the OpenSSL 1.1 to OpenSSL 3 change in one step, which is why this path is rated higher risk than 18-to-20.
Key differences
- Two LTS majors of removed deprecations to clear, not one.
- OpenSSL 1.1 (Node 16) to OpenSSL 3 (Node 20) — stricter crypto/TLS defaults.
- Built-in fetch and the stable node:test runner are available on 20.
- A much newer V8 with language and performance changes.
- Native modules must be rebuilt across a larger ABI gap.
Files and patterns to inspect
- engines.node in package.json and the committed .nvmrc / .node-version.
- The node-version matrix in .github/workflows/*.yml and the Docker base image.
- Dependencies with native bindings that need rebuilding across two majors.
- Crypto/TLS code that relied on OpenSSL 1.1 defaults.
- APIs deprecated across Node 16-20 that are now removed.
Pre-migration checklist
- Green test suite on Node 16 before starting
- Lockfile committed; dependencies audited for Node 20 engine support
- A dedicated upgrade branch
- Crypto/TLS paths inventoried for OpenSSL 3 review
Related paths
Official sources
Backs the breaking-change and migration-step claims.
Backs the breaking-change and migration-step claims.
Frequently asked questions
Should I stop at Node 18 on the way to 20?
No. Node 18 is already in maintenance with a 2025 EOL, so an intermediate stop adds migration work without extending your support window. Go directly to the active Node 20 LTS.