Skip to content

2 min read

Node.js 26 — Temporal is finally on by default

Node.js 26 enables the Temporal date and time API by default, updates V8 to 14.6, removes old stream and HTTP APIs, and becomes LTS in October.

  • nodejs
  • javascript
  • release

Node.js 26 came out on May 5 as the new Current release, and it becomes the next LTS line in October. The headline is a feature JavaScript developers have waited years for: the Temporal API is enabled by default.

Temporal: dates without the pain

Date has been JavaScript's weak spot since 1995: months that start at zero, objects you can change in place, and time zones limited to "local" or "UTC". Temporal replaces it with separate types for separate jobs: plain dates, plain times, exact instants, durations, and dates in a named time zone.

// A calendar date: no time, no time zone, no surprises
const deadline = Temporal.PlainDate.from('2026-10-31')
deadline.add({ months: 1 }).toString() // '2026-11-30'

// The same moment shown in two time zones
const call = Temporal.ZonedDateTime.from('2026-10-09T15:00[Europe/Bratislava]')
call.withTimeZone('America/New_York').toPlainTime().toString() // '09:00:00'

On Node 26 there is no flag or polyfill to add; Temporal is a global. If your code also runs in browsers, check support there before dropping your date library.

New JavaScript from V8 14.6

V8 moves to 14.6, which brings two small but useful additions:

// Upsert: read a key, or create it on first use
const byTag = new Map<string, string[]>()
byTag.getOrInsert('bun', []).push('bun-1-4')
byTag.getOrInsertComputed('vite', () => []).push('vite-8')

// Iterate several iterables as one
for (const id of Iterator.concat(drafts.keys(), published.keys())) {
  // …
}

getOrInsert and getOrInsertComputed also exist on WeakMap. The bundled HTTP client, Undici, moves to 8.0.2.

What breaks

This is a major release, so check these before upgrading:

  • http.Server.prototype.writeHeader() is gone; use writeHead().
  • The legacy _stream_readable, _stream_writable, _stream_duplex, _stream_transform, _stream_passthrough and _stream_wrap modules are removed. Import from node:stream instead.
  • The --experimental-transform-types flag is removed.
  • module.register() is now runtime-deprecated and prints a warning.
  • NODE_MODULE_VERSION is now 147, so native addons need a rebuild.

Bottom line

Node 26 becomes LTS this month, so it is the version to plan production upgrades around. Test on it now: search your code and dependencies for the removed APIs, rebuild native addons, and start writing new date code with Temporal instead of another Date wrapper.

Contact

Building something with this?

We help teams pick the right tools and ship. Tell us what you are working on.

What should it do, who is it for, and is there a deadline?

We use your details only to reply to your enquiry. See our privacy policy.