Node.js End-of-Life Dates —
Official EOL Schedule for Every Version
Node.js follows a predictable release schedule — but that doesn't mean teams keep up with it. Node.js 14 reached end of life in April 2023. Node.js 16 followed in September 2023. Node.js 18 hit end of support in April 2025. Right now, production servers running any of these versions receive zero security patches, zero CVE fixes, zero official support.
This page is the single authoritative reference for Node.js end-of-life dates across every major version — with EOL Risk Scores™, migration notes, and plain-English guidance on what to do if you're running past end of support.
Complete Node.js EOL Schedule
Node.js releases even-numbered versions as Long-Term Support (LTS). Odd-numbered versions are short-lived and never reach LTS. The table below covers every major LTS version and its official end-of-life date as published by the Node.js Release Working Group.
| Version | LTS Start | End of Life | Status | EOL Risk Score™ |
|---|---|---|---|---|
| Node.js 10 | Oct 2018 | Apr 30, 2021 | EOL | 95 |
| Node.js 12 | Oct 2019 | Apr 30, 2022 | EOL | 92 |
| Node.js 14 | Oct 2020 | Apr 30, 2023 | EOL | 90 |
| Node.js 16 | Oct 2021 | Sep 11, 2023 | EOL | 90 |
| Node.js 18 | Oct 2022 | Apr 30, 2025 | EOL | 85 |
| Node.js 20 | Oct 2023 | Apr 30, 2026 | EOL | 78 |
| Node.js 22 | Oct 2024 | Apr 30, 2027 | Active LTS | 50 |
| Node.js 24 | Oct 2025 | Apr 30, 2028 | Current | 20 |
Node.js 14 — End of Life April 30, 2023
Node.js 14 entered LTS in October 2020 and reached its official end-of-life date on April 30, 2023. It has now been unsupported for over three years.
Node.js 14 was the last version to ship with OpenSSL 1.1.1, which itself reached end of life in September 2023. That means teams still running Node.js 14 are operating with two compounding EOL risks: the runtime and its bundled cryptography library are both unsupported.
Why teams are still running Node.js 14
The most common reason is dependency lock-in. Node.js 14 was the last version to support certain native addons and older npm packages that haven't been updated. Teams that depend on node-sass, older versions of bcrypt, or native modules compiled against Node.js 14's V8 ABI often face non-trivial migration work.
Migrating from Node.js 14
- Target Node.js 22 directly — skip 16, 18, and 20 which are all EOL
- Run
npx @npmcli/arborist ls --allto audit native dependencies - Replace
node-sasswithsass(pure JS, no native compilation) - Check node.green for ES2022+ compatibility gaps in your codebase
- Test with
--pending-deprecationflag to surface breaking changes early
Node.js 16 — End of Life September 11, 2023
Node.js 16 was cut short by seven months. Originally scheduled to reach EOL in April 2024, the Node.js Release Working Group accelerated its end-of-life to September 11, 2023 because the OpenSSL 1.1.1 library it depended on was reaching its own EOL the same month. Running past that date would have meant shipping a runtime with an unpatched cryptography library.
If your team was caught off-guard by the early EOL, you weren't alone. Many pipelines that had Node.js 16 pinned assumed they had until mid-2024. The real deadline was six months earlier.
Node.js 18 — End of Life April 30, 2025
Node.js 18 reached end of life on April 30, 2025. It was in active LTS for two years and was widely adopted as the "safe" production version throughout 2023 and 2024. As of today it has been EOL for over a year.
Node.js 18 shipped with V8 10.2, native fetch() support, and the first stable node:test module. Many teams upgraded to 18 specifically for these features — and then stayed there. The upgrade from 18 to 22 is less disruptive than 14→18 was, but it still requires testing.
Key breaking changes moving from Node.js 18 to 22
url.parse()now emits a deprecation warning — migrate tonew URL()fs.rmdir(recursive)removed — usefs.rm(path, { recursive: true })- V8 updated to 12.4 — some native addons may need recompilation
--experimental-fetchflag no longer needed —fetchis stable
Node.js 20 — End of Life April 30, 2026
Node.js 20 reached end of life on April 30, 2026 — just weeks ago. Teams that were on Node.js 20 thinking they had more runway are now in the same position as Node.js 18 teams were a year ago: running a version that will never receive another security patch.
Node.js 20 introduced the stable Permission Model, native --env-file support, and V8 11.3. If you are currently on Node.js 20, the upgrade path to Node.js 22 is the shortest and lowest-risk jump in the current release cycle.
Node.js 22 — Current LTS, EOL April 30, 2027
Node.js 22 is the current Long-Term Support release. It entered LTS in October 2024 and is supported until April 30, 2027. This is where every production Node.js deployment should be today.
Node.js 22 ships with V8 12.4, a stable node:sqlite module, improved require(esm) support, and native --run for package.json scripts. It represents the most capable and longest-supported Node.js version currently available.
Node.js 24 is the current "Current" release, available for teams that want the latest features. It will enter LTS in October 2025 and is supported until April 2028. For most production deployments, Node.js 22 is the right choice today.
What the EOL Risk Score™ Means for Node.js
Every Node.js version page on endoflife.ai carries an EOL Risk Score™ — a 0–100 score measuring the actual security and operational risk of running that version in production. The score is calculated from four factors:
- EOL Recency (40pts) — how long since the version lost support. Node.js 14, three years past EOL, scores higher here than Node.js 20, which just hit EOL.
- Attack Surface (30pts) — Node.js is a high-attack-surface runtime. It processes HTTP requests, executes JavaScript, and handles file I/O. CVEs in EOL versions are never patched.
- CISA KEV Exposure (20pts) — whether known exploited vulnerabilities exist for this version in the CISA Known Exploited Vulnerabilities catalog.
- Extended Support Availability (10pts) — whether commercial extended support options exist, reducing the urgency slightly.
How to Migrate Safely
The fastest path from any EOL Node.js version to Node.js 22 follows the same pattern regardless of your starting point:
Step 1 — Audit your dependencies
Run npm outdated and npm audit before touching your Node.js version. Resolve dependency issues first — a clean dependency tree makes the runtime upgrade significantly easier.
Step 2 — Check for native addons
Native addons compiled against older Node.js ABIs (node-gyp, nan, napi) may need recompilation or replacement. Run npm ls --depth=0 and check each package against its Node.js 22 compatibility status.
Step 3 — Update your CI pipeline first
Change your CI runner to Node.js 22 before updating production. If your test suite passes on 22, production will follow cleanly. Use .nvmrc or .node-version to pin the version explicitly.
Step 4 — Use a feature flag deploy
Deploy Node.js 22 to a canary or staging environment carrying real traffic before full rollout. Monitor error rates, memory usage, and response times for 24 hours before promoting to production.
Step 5 — Update your lockfiles
After upgrading Node.js, regenerate package-lock.json or yarn.lock with the new engine. Some packages resolve differently across Node.js versions.