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; usewriteHead().- The legacy
_stream_readable,_stream_writable,_stream_duplex,_stream_transform,_stream_passthroughand_stream_wrapmodules are removed. Import fromnode:streaminstead. - The
--experimental-transform-typesflag is removed. module.register()is now runtime-deprecated and prints a warning.NODE_MODULE_VERSIONis 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.