---
title: "Node version numbers now match the calendar year"
description: "Starting with Node 27, the major version number tracks the calendar year it ships in. The number alone tells you when a line shipped and when it reaches end of life."
canonical_url: "https://stijnvanhulle.be/blog/node-release-schedule-change"
---

> Index of every page on this site: [llms.txt](https://stijnvanhulle.be/llms.txt)

Node.js [changed its release schedule](https://nodejs.org/en/blog/announcements/evolving-the-nodejs-release-schedule) for the first time in about ten years. The part that touches daily work most is the version number: starting with Node 27, the major version matches the calendar year it ships in.

## What changes

Node moves from two major releases a year to one, every April, promoted to LTS that October. The major number is the year minus 2000, so Node 27 ships in 2027 and Node 28 in 2028.

Each line opens as an alpha six months early. Node 27 lands as `27.0.0-alpha.1` in October 2026, takes its semver-major changes there, ships as `27.0.0` in April 2027, and goes LTS that October. Node 26 is the last release numbered the old way.

<div className="doc-viz" dataAnimate="true">

Release schedule from Node 27

<div className="rel-row">
<div className="rel-name">

Node <b>

27

</b>
</div>

<div className="rel-track">
<div className="rel-bar" style="--l:10.71%;--w:50%;--i:0">
<div className="rel-seg,rel-alpha">

alpha

</div>

<div className="rel-seg,rel-cur">

Current

</div>

<div className="rel-seg,rel-lts">

LTS · 30 months

</div>
</div>
</div>
</div>

<div className="rel-row">
<div className="rel-name">

Node <b>

28

</b>
</div>

<div className="rel-track">
<div className="rel-bar" style="--l:25%;--w:50%;--i:1">
<div className="rel-seg,rel-alpha">

alpha

</div>

<div className="rel-seg,rel-cur">

Current

</div>

<div className="rel-seg,rel-lts">

LTS · 30 months

</div>
</div>
</div>
</div>

<div className="rel-row">
<div className="rel-name">

Node <b>

29

</b>
</div>

<div className="rel-track">
<div className="rel-bar" style="--l:39.29%;--w:50%;--i:2">
<div className="rel-seg,rel-alpha">

alpha

</div>

<div className="rel-seg,rel-cur">

Current

</div>

<div className="rel-seg,rel-lts">

LTS · 30 months

</div>
</div>
</div>
</div>

<div className="rel-axis">
<div>



</div>

<div className="rel-years">
<span>

2026

</span>

<span>

2027

</span>

<span>

2028

</span>

<span>

2029

</span>

<span>

2030

</span>

<span>

2031

</span>

<span>

2032

</span>

<span>

2033

</span>
</div>
</div>

One line a year, and the major number is the year it ships. Six months as Current, then 30 months of LTS: 36 months from release to end of life.

</div>

## The number is the year

Quick: what year did Node 18 ship? I can never remember, and most people cannot either. Today, the major version is just a counter, so it says little about a runtime's age. [Ubuntu](https://ubuntu.com) solved this years ago: `24.04` reads as April 2024 at a glance, and Node will now do the same.

A small piece of luck makes the switch clean. Today's major, 26, already matches the year, 2026. Moving to exactly one release a year keeps them locked together from here: 27 in 2027, 28 in 2028.

The number also carries the support window. Node 27 is a 2027 line, so it reaches end of life in April 2030: six months as Current from April 2027, then 30 months of LTS, 36 months in total. Read the year off the major, add that fixed window, and you have the dates without a calendar.

That sounds cosmetic until you write the upgrade ticket. "We're three majors behind" used to be vague, because odd-numbered lines like 21 and 23 never reached LTS and most teams skipped them, so a gap in major numbers did not map to time. Now three majors behind is three years behind, and everyone reads the number the same way.

## The number shows up everywhere

The version number lands in every `engines` range, every CI matrix, and every "which Node are we on" conversation. Once it carries the year, each of those reads as a date instead of an arbitrary count. No cross-referencing a release calendar to work out what a number means.

It is a small, boring change, which is exactly what I want from a versioning scheme. You no longer need to track the schedule to know what a major version means.

## References

- [Evolving the Node.js release schedule](https://nodejs.org/en/blog/announcements/evolving-the-nodejs-release-schedule)
- [Node.js previous releases and the support calendar](https://nodejs.org/en/about/previous-releases)

## Sitemap

See the full [sitemap](https://stijnvanhulle.be/sitemap.md) for all pages.
