Node.js 26 ships unflagged Temporal and Undici 8, LTS migration starts October 2026
Contents
Node.js 26.0.0 landed on May 5, 2026.
Not a feature rush — more of a housekeeping major. Temporal API is now enabled by default, V8 and Undici got bumped, and a handful of legacy APIs were removed.
It’s a Current release, not LTS. LTS promotion is scheduled for October 2026.
Node.js 20 hit EOL on April 30, 2026.
If you’re still on an old version, jumping straight to 26 is less practical than moving to 24 LTS or 22 LTS first.
I wrote about Node.js security release delays and target versions earlier — EOL lines stop receiving security fixes.
Temporal is unflagged
The biggest headline is the Temporal API shipping without a flag.
Temporal is a Date replacement designed to separate date, time, time zone, and duration into distinct types.
Date works fine until you mix local time zones, UTC, string parsing, and month-end arithmetic in the same function.
Temporal fixes this by giving each concept its own type — Temporal.PlainDate for calendar dates, Temporal.ZonedDateTime for timezone-aware moments.
const releaseDate = Temporal.PlainDate.from("2026-05-05");
const ltsDate = releaseDate.add({ months: 5 });
console.log(releaseDate.toString());
console.log(ltsDate.toString());
For server-side batch jobs, CLIs, and scheduling/billing/log processing that runs only on Node.js, this is immediately useful.
If you share code with the frontend, browser Temporal support is a separate question.
Browser Temporal support
Node.js 26 ships it unflagged, but the browser story is different.
As of May 2026, Chrome 144+, Edge 144+, and Firefox 139+ support Temporal.
Can I Use puts overall coverage at roughly 69%. The gap is almost entirely Safari.
Safari hasn’t shipped Temporal even in Technology Preview.
Since all iOS browsers use WebKit internally, no Safari support means no iPhone or iPad support.
Given mobile browser share in many markets, dropping Safari is rarely an option.
Temporal reached TC39 Stage 4 and is being integrated into ECMA-262.
The spec is finalized — it’s an Apple implementation timeline question now.
Two polyfills exist.
The TC39 champions’ @js-temporal/polyfill is full-spec but ~56 KB minified+gzipped.
FullCalendar’s temporal-polyfill covers the main APIs at ~20 KB.
Compared to date-fns, which tree-shakes down to a few KB per function, both are heavy.
A globalThis.Temporal check lets you conditionally load the polyfill, skipping it for Chrome/Firefox/Edge users.
Safari users still pay the full bundle cost.
For frontend use, the decision comes down to polyfill size versus how soon Safari ships native support.
V8 14.6 and Undici 8
Node.js 26 bundles V8 14.6.202.33.
The release notes highlight Map.prototype.getOrInsert() (Upsert proposal) and Iterator.concat() (Iterator sequencing).
These don’t require immediate code changes.
They expand the range of available built-in APIs and V8 optimizations, and may affect native addon compatibility.
Compared to Node.js 24, which shipped V8 13.6, npm 11, and global URLPattern, version 26 feels more like a runtime plumbing update.
On the HTTP client side, Undici is now at 8.0.2.
Node.js fetch runs on top of Undici, so this affects outbound HTTP behavior, streaming, and connection management.
If your API server or crawler makes heavy use of fetch, test communication patterns in staging, not just unit tests in CI.
Removed APIs and deprecation warnings
Being a major release, Node.js 26 drops several legacy APIs.
http.Server.prototype.writeHeader() is removed — use writeHead().
Legacy _stream_readable, _stream_writable, _stream_duplex, and other _stream_* modules are also gone.
Your application code might not use these directly, but older dependencies might.
The fastest way to find breakage is to run your test suite on Node.js 26 and check warnings and failures.
nvm install 26
nvm use 26
npm test
nvm (Node Version Manager) switches Node.js versions per user.
It keeps versioned binaries under ~/.nvm/ and nvm use switches the active version within a shell session.
If you don’t have it, grab the install script from the nvm repository and add the setup lines to .bashrc or .zshrc.
If you use Volta, watch for mismatches between the Node binary and global CLI tools.
As I noted in Volta’s maintenance end and migration notes, Volta’s shim intercepts PATH, so verify with which node and node -v before testing on Node.js 26.
Node.js 26 is the last old-schedule generation
Node.js 26 ships as Current and enters LTS in October 2026.
Starting with Node.js 27, the release cadence changes from two major releases per year to one.
The old rule that odd-numbered versions never become LTS breaks with Node.js 27.
Picking up Node.js 26 now makes sense for library authors who want early Temporal or V8 14.6 validation, teams that want CI coverage for runtime differences ahead of LTS, and developers already tracking Current.
For a typical production web app, staying on 24 LTS while adding 26 to CI, then deciding after the October LTS cut, is the practical path.
It used to be IE support that gated web technology adoption. Now Safari fills that role.
Node.js doesn’t run in the browser, but the “it’s not supported everywhere so slap a polyfill on it” pattern is the same dynamic IE and jQuery had.