Last Call

AI on duty

Get the digest

Runtime · archived

Node.js

Node.js 20 "Iron", the LTS line, reached end of life on April 30, 2026. The 20.x branch now receives no further releases of any kind, including security fixes, so applications and container images pinned to `node:20` no longer get patched.

Departed
departure passed

left 30 Apr 2026

Official source Node.js Release schedule — nodejs/Release (official release working group) ↗ (github.com)

Quick answers

Is it true that Node.js 20 (Iron LTS) reached end of life on April 30, 2026?
Yes — and the date has already passed (30 Apr 2026). Every Node.js release line gets about 30 months of support: roughly six months as "Current", then Active LTS, then a Maintenance window, after which it hits end of life and is dropped entirely.
When did it take effect?
30 Apr 2026 (already passed). Verified against the vendor's own announcement.
What should I use instead?
Move to a supported Node.js LTS line — 22 "Jod" or 24 "Krypton" — as soon as possible; every day on Node.js 20 past its end-of-life date is a day on an internet-facing runtime that will never be patched again.

What this means for you

Every Node.js release line gets about 30 months of support: roughly six months as "Current", then Active LTS, then a Maintenance window, after which it hits end of life and is dropped entirely. Per the official Node.js release schedule, the 20.x "Iron" line entered Maintenance on October 22, 2024 and reached **end of life on April 30, 2026**. After that date the Node.js project ships no more 20.x releases — not even for critical security vulnerabilities — so anything still on Node.js 20 keeps running but accumulates unpatched CVEs in the runtime, its bundled V8 engine, and npm. Node.js 20 is one of the most widely deployed lines: it backs a large share of production services and the official `node:20` Docker images, including the common `node:20-alpine`, `node:20-bookworm`, and `node:20-slim` tags used across application builds and CI. It does not affect Node.js 22 "Jod" (LTS, end of life April 30, 2027) or Node.js 24 "Krypton" (current, end of life April 30, 2028), which remain supported on their own schedules.

Where to go

Move to a supported Node.js LTS line — 22 "Jod" or 24 "Krypton" — as soon as possible; every day on Node.js 20 past its end-of-life date is a day on an internet-facing runtime that will never be patched again. Most application code runs on 22 and 24 unchanged, but review the changelogs for removed APIs and behavior changes, bump your `engines` field and any `.nvmrc` / CI matrix, and run your test suite against the target runtime. For Dockerized apps, change the base image from `node:20` (and `node:20-alpine` / `node:20-slim` / `node:20-bookworm`) to the matching `node:22` or `node:24` tag and rebuild. Check that native addons and any dependencies with prebuilt binaries publish builds for the target Node.js version before you cut over.

  • Node.js 22 "Jod" — Active LTS; end of life April 30, 2027
  • Node.js 24 "Krypton" — the current release, entering LTS; end of life April 30, 2028
  • A commercial extended-support offering (e.g. HeroDevs Never-Ending Support) only as a stopgap if an upgrade genuinely cannot be completed in time

Node.js 20 “Iron” — the LTS line that has anchored a huge amount of production JavaScript since 2023 — reached its end of life on April 30, 2026, per the official Node.js release schedule.

What end of life means for a Node.js line

Each Node.js release gets roughly 30 months of life: about six months as “Current”, promotion to Active LTS for production use, then a Maintenance window of critical fixes only, and finally end of life, when the line is dropped. Node.js 20 entered Maintenance on October 22, 2024 and hit end of life on April 30, 2026. Past that date the project publishes no more 20.x releases at all — including fixes for critical security vulnerabilities in Node itself, the bundled V8 engine, and the shipped npm. Your code keeps running, but the runtime becomes a patch dead end.

Who this affects

Node.js 20 is one of the most widely deployed lines. It runs a large share of backend services, serverless functions, and build tooling, and it backs the official node:20 Docker images — including the very common node:20-alpine, node:20-slim, and node:20-bookworm tags used in application containers and CI. Anything internet-facing still on Node.js 20 is the highest-priority case to move. Node.js 22 “Jod” (end of life April 30, 2027) and 24 “Krypton” (end of life April 30, 2028) are unaffected.

What to do

As soon as possible:

  1. Inventory where Node.js 20 runs — engines fields, .nvmrc files, node:20* base images in Dockerfiles and compose files, CI runner versions, and managed-platform runtime settings.
  2. Upgrade to Node.js 22 or 24. Most code runs unchanged; check the changelogs for removed APIs and behavior changes.
  3. Rebuild and test — run your test suite on the target runtime and confirm native addons and any prebuilt-binary dependencies publish builds for that Node.js version.

Running an internet-facing Node.js version past its end-of-life date means shipping a runtime that will never receive another security patch. Treat the upgrade as security maintenance, not a nice-to-have.

This entry tracks the official Node.js release schedule; if the project changes the 20.x dates, the entry will be updated with a changelog note.

Entry changelog

  • — last reviewed.
  • — Entry created from the official Node.js release schedule (nodejs/Release), which lists the 20.x "Iron" line as entering Maintenance on 2024-10-22 and reaching end of life on 2026-04-30. After that date the 20.x branch receives no further releases, including security fixes. Machine-detectable in a code repository via the `node:20` container base image tag (covering `node:20`, `node:20.x`, and the `node:20-alpine` / `node:20-slim` / `node:20-bookworm` variants), so an image detect fingerprint was added and validated against the public dataset to confirm it does not collide with `node:22`.

Related on the calendar

Put this countdown in your README

Building on Node.js? Drop this badge into a project’s README or docs — it shows the days left and refreshes on its own every night from this page. Last Call countdown for Node.js 20 "Iron", the LTS line, reached end of life on April 30, 2026. The 20.x branch now receives no further releases of any kind, including security fixes, so applications and container images pinned to `node:20` no longer get patched.

[![Last Call countdown](https://lastcall.dev/badge/nodejs-20-iron-end-of-life.svg)](https://lastcall.dev/entries/nodejs-20-iron-end-of-life)

Spot an error or a changed date? Tell us and it’s corrected the same night.