On 28 October 2026 the Node.js project released v26.13.0 and moved the 26.x line into Long Term Support under the codename Lithium. It will receive fixes until the end of April 2029. The release contains no code changes from 26.12.1; only the metadata changed. For anyone running Node.js in production, the date matters for another reason: Node.js 24 moved into maintenance a week earlier, and Node.js 22 has six months of support left. This article covers what is new in 26, what tends to break during the upgrade, and how to plan the move.
Where Each Version Stands
Node.js versions go through three stages. Current is the first six months, when new features still arrive. Active LTS lasts about a year and receives bug fixes and security fixes. Maintenance gets only critical bug fixes and security fixes until end of life. The dates below come from the official schedule published by the Node.js Release Working Group.
| Version | Status on 30 October 2026 | End of life |
|---|---|---|
| 26.x (Lithium) | Active LTS since 28 October 2026, maintenance from 20 October 2027 | 30 April 2029 |
| 24.x (Krypton) | Maintenance since 20 October 2026 | 30 April 2028 |
| 22.x (Jod) | Maintenance | 30 April 2027 |
| 20.x and older | End of life since 30 April 2026 | No more fixes |
In practice: applications on 24 are safe for now but should start planning; applications on 22 have one more security release cycle or two before they are on their own; anything still on 20 already missed the October 2026 security release, which fixed a Brotli bug that can lead to remote code execution.
What Node.js 26 Brings
Teams moving from 24 to 26 skip a version, so they get the changes from both Node.js 25 and 26 at once. These are the ones most likely to matter for application code:
- Temporal is enabled by default. Temporal is the new date and time API meant to replace Date, with proper time zone and calendar support. Code such as Temporal.Now.zonedDateTimeISO('Asia/Jakarta') works without a flag or a polyfill, which is useful for scheduling, billing periods, and anything else that breaks around time zone conversions.
- V8 14.6, up from 13.6 in Node.js 24. Besides general performance work, it adds Map.prototype.getOrInsert() and getOrInsertComputed() for the common "read or create" pattern, and Iterator.concat() to join iterators. Node.js 25 had already brought faster JSON.stringify and built-in base64 and hex conversion on Uint8Array.
- Undici 8 as the engine behind fetch(). Most code will not notice, but tests that depend on exact fetch error messages or behaviour should be rerun.
- TypeScript type stripping is stable. Node.js can run .ts files directly as long as they only use syntax that can be erased, which covers most application code. This also became stable in 24.12, so it is not exclusive to 26.
- Web Storage is available without a flag since Node.js 25. In 26, localStorage stays undefined unless a storage file is given with --localstorage-file, so libraries that check for localStorage to detect a browser keep working.
- The Permission Model gained --allow-net, so a process started with --permission can be blocked from making network connections unless allowed explicitly.
- npm 11 is bundled. Node.js 26.13.0 ships npm 11.20.0, compared with 10.9 on Node.js 22.
What Can Break
Two major versions of clean-up landed between 24 and 26. Most applications upgrade without trouble, but old dependencies and Docker images are where problems usually show up.
| Change | Who is affected | What to do |
|---|---|---|
| Native addons need a rebuild (NODE_MODULE_VERSION 147, was 137 on 24) | Packages with compiled code, such as bcrypt, sharp, better-sqlite3, canvas, or node-rdkafka | Reinstall dependencies on Node.js 26 instead of copying node_modules, and update packages that have no prebuilt binary for 26 |
| The legacy _stream_readable, _stream_writable, and other _stream_* modules are removed | Old packages, often deep in the dependency tree, that still import them | Run the test suite on 26 and update or replace the package that fails to load |
| http writeHeader() is removed, and fs.F_OK, fs.R_OK, fs.W_OK, and fs.X_OK are gone | Old code and unmaintained middleware | Use writeHead() and fs.constants.F_OK and the like |
| --experimental-transform-types is removed | Projects that run TypeScript with enums or namespaces directly through Node.js | Keep using tsx or a build step, or rewrite enums as plain objects |
| module.register() prints a runtime deprecation warning | Custom loaders and tools that hook into module loading | Update the tool, or move your own hooks to module.registerHooks() |
| Corepack is no longer bundled with Node.js | Dockerfiles and CI jobs that run corepack enable to get pnpm or Yarn | Install Corepack or the package manager explicitly, for example npm install -g corepack |
| Official Linux binaries link against libatomic | Minimal servers and images that install Node.js from the official tarball | Install libatomic1 (Debian, Ubuntu) or libatomic (RHEL family) before running node |
A quick way to find most of these before the upgrade is to run the application and its tests on the current version with --trace-deprecation and read the warnings. Anything deprecated in 24 is a candidate for removal in 26.
Should You Upgrade Now?
- New projects: start on 26. It is supported until April 2029, a year longer than 24.
- Running on 24: no rush. Node.js 24 still gets security fixes until April 2028. Plan the move for the next few months, after your main dependencies and hosting platform officially support 26.
- Running on 22: start now and go straight to 26 rather than stopping at 24. Support ends on 30 April 2027, and two upgrades cost more than one.
- Running on 20 or older: treat it as urgent. These versions no longer receive security fixes, and the October 2026 vulnerabilities remain open on them.
Check hosting support before setting a date. The official Docker images already have node:26 tags. Managed platforms move at their own pace: AWS Lambda, for example, opened a nodejs26.x runtime in public preview in August 2026, and preview runtimes are not covered by its SLA. Read your provider's runtime list rather than assuming.
Upgrade Steps
- 1List where the Node.js version is defined: the FROM line in each Dockerfile, .nvmrc or .node-version, the engines field in package.json, the CI configuration, and the runtime setting on your hosting platform. Run node -v on every server that installs Node.js directly.
- 2Add Node.js 26 to the CI matrix next to your current version and run the full test suite on both for at least a sprint.
- 3Fix the failures: update packages that use removed APIs, rebuild native modules, and clear the deprecation warnings that appear with --trace-deprecation.
- 4Update the Dockerfile, for example to node:26-bookworm-slim or node:26-alpine. If the build used corepack enable, install the package manager explicitly. Rebuild from a clean layer so no node_modules from the old version are reused.
- 5Deploy to staging and watch memory use, response times, and error rates under realistic traffic for a few days. Major V8 upgrades sometimes change memory behaviour, so compare against the previous baseline.
- 6Roll out to production one service at a time, then update .nvmrc, the engines field, and the CI matrix so that 26 becomes the default and new code cannot drift back.
The Release Schedule Changes After 26
Node.js 26 is the last version under the old model of two major releases a year, where only even numbers became LTS. From Node.js 27, there is one major release a year: an alpha channel from October, a Current release in April, and LTS in October. Every version becomes LTS, and version numbers follow the year, so 27 is the 2027 release and 28 the 2028 release. The alpha channel for 27 opened at the end of October 2026.
For teams this makes planning simpler: one upgrade a year, always to the version that became LTS that October, with about 30 months of support each. A good habit is to schedule the Node.js upgrade every November, once the new LTS has a few weeks of fixes and hosting platforms have caught up. If you would like help reviewing or upgrading your Node.js services, our managed service team can take it on.
Key takeaways
- Node.js 26.13.0 "Lithium" became LTS on 28 October 2026 and is supported until 30 April 2029.
- Node.js 24 moved to maintenance on 20 October 2026 and ends in April 2028. Node.js 22 ends on 30 April 2027, and Node.js 20 is already end of life.
- Node.js 26 enables Temporal by default and ships V8 14.6, Undici 8, and npm 11.
- Upgrade problems usually come from native addons, removed legacy APIs in old dependencies, Corepack no longer being bundled, and libatomic on minimal Linux images.
- Start new projects on 26, move from 22 straight to 26, and plan the move from 24 once your dependencies and hosting support it.
- From Node.js 27 there is one major release a year and every version becomes LTS.


