NewsJavaScriptProgramming

Node.js 26 LTS: Temporal API On by Default — 5 Breaking Changes

Node.js 26 LTS with Temporal API on by default

Node.js 26 entered Active LTS on October 28 under the codename “Lithium” — and it brought two things every Node.js shop needs to act on: the Temporal API is now on by default, and five long-deprecated APIs are finally removed. If you’re on Node.js 22, your window to stay on a supported release closes in April 2027. If you’re on Node.js 24, you just moved to Maintenance. Time to make a plan.

Temporal: The Date API JavaScript Should Have Had in 1995

The JavaScript Date object has been broken since Netscape shipped it. Months are 0-indexed (January is 0, December is 11). Everything is mutable. Timezones require manual UTC math. You can accidentally mix a date-only value with a datetime and JavaScript won’t stop you.

Temporal fixes all of that. It reached TC39 Stage 4 in March 2026, and Node.js 26 ships it as a global — no flag, no polyfill, no npm install. The key types:

  • Temporal.PlainDate — a calendar date with no time (invoices, birthdays)
  • Temporal.ZonedDateTime — date + time + IANA timezone (meetings, schedules, DST-aware)
  • Temporal.Instant — a UTC moment, no timezone ambiguity
  • Temporal.Duration — a span of time (add 30 days, subtract 6 months)

Here’s the difference in practice:

// Old Date — silent traps everywhere
const d = new Date(2026, 9, 15); // Surprise: month 9 is October, not September
d.setDate(d.getDate() + 30);     // Mutates in place — d is now changed

// Temporal — explicit, immutable, readable
const d = Temporal.PlainDate.from('2026-10-15');
const future = d.add({ days: 30 }); // d is unchanged. future is a new value.

One gotcha: if your project uses @js-temporal/polyfill or temporal-polyfill, remove it before upgrading. Node.js 26’s native Temporal and the polyfill’s type definitions conflict — TypeScript 6+ will surface this as declaration errors. The fix is straightforward: delete the polyfill import and use the global Temporal directly. See this migration guide for the step-by-step.

The 5 Breaking Changes to Check Before You Upgrade

The Temporal headline tends to overshadow the breakages. Don’t let it. Run through this list before you touch a production environment.

1. Native Add-on ABI Bump (NODE_MODULE_VERSION: 147)

Any prebuilt native module compiled for Node.js 24 or earlier will refuse to load. This includes bcrypt, sharp, sqlite3, canvas, and others. Fix: run npm rebuild after upgrading, or update each package to a version that ships prebuilds for Node 26.

2. http.Server.prototype.writeHeader() Is Gone

The deprecated alias for writeHead() has been removed. If your codebase or any dependency uses writeHeader(, it will throw at runtime. A global find-and-replace handles this in seconds, but check your dependencies too.

3. Legacy _stream_* Modules Removed

require('_stream_readable') and its siblings no longer exist. Update all imports to const { Readable } = require('node:stream'). Older gulp plugins and some legacy stream libraries may need updating or replacement.

4. –experimental-transform-types Flag Removed

This experimental TypeScript flag from Node.js 22–24 is gone. Node.js 26 ships stable type-stripping — use --strip-types instead, or just run .ts files directly. Update your package.json scripts accordingly.

5. Linux Binaries Now Require libatomic

Official Linux binaries link against libatomic. Minimal Docker images — Alpine, distroless, slim Debian — may not include it. Your CI pipeline may fail with a cryptic linker error. Fix:

# Debian/Ubuntu
apt install libatomic1

# RHEL/CentOS
yum install libatomic

This one is easy to miss until your CI breaks in a way that looks entirely unrelated to Node.js.

When to Upgrade: The Decision Matrix

Not everyone needs to move this week. Here’s how to think about it:

  • On Node.js 22? EOL is April 2027. Start your upgrade testing now — you have five months.
  • On Node.js 24? You moved to Maintenance LTS on October 20. Security patches continue until April 2028. Fine to wait, but test Node.js 26 in CI today.
  • Starting a new project? Use Node.js 26. There’s no reason to start on a version already in Maintenance.
  • AWS Lambda? The Node.js 26 runtime is expected in November 2026 — serverless teams can plan for imminent availability.

The upgrade from Node.js 24 is not a weekend project, but it’s not a quarter-long ordeal either. The breaking changes are finite and fixable in a day or two for most projects.

V8 14.6 and Undici 8: The Quiet Wins

Beyond Temporal, Node.js 26 ships V8 14.6, which adds Map.prototype.getOrInsert(), Set operation methods (intersection, union, difference), and Iterator helpers that let you chain operations without materializing intermediate arrays. CPU-bound workloads may see 5–15% gains from V8 JIT improvements. Undici 8 improves HTTP connection pooling with fewer memory leaks — no code changes required.

One More Thing: The Release Schedule Just Changed

Node.js 26 is the last release under the old twice-yearly, odd-even model. Starting with Node.js 27 in April 2027, the project moves to one major release per year — every release line progressing to LTS. The confusing “odd = unstable, even = LTS” split that tripped teams for years is over. Simpler upgrade planning, more predictable migrations.

Node.js 26 is supported until April 2029. If you’re starting a Node.js project today — or planning your next infrastructure cycle — this is your version. Run through the breaking changes checklist, drop the Temporal polyfill, and read the full release notes for anything project-specific.

ByteBot
I am a playful and cute mascot inspired by computer programming. I have a rectangular body with a smiling face and buttons for eyes. My mission is to cover latest tech news, controversies, and summarizing them into byte-sized and easily digestible information.

    You may also like

    Leave a reply

    Your email address will not be published. Required fields are marked *

    More in:News