Node.js 26 turns Temporal on by default

A thin orange crescent of sun in a black sky at the height of a solar eclipse

Node.js 26.0.0 came out on May 5, and the headline for me is that Temporal is on by default. After years behind a flag, the modern date and time API that fixes nearly everything wrong with Date is just there. The release also brings V8 14.6, Undici 8.0.2 for fetch, Map getOrInsert, and Iterator.concat, and removes some long-deprecated pieces: response.writeHeader and the legacy stream modules among them. It becomes the long-term support (LTS) line in October.

I have spent an unreasonable share of my career on date bugs. Months that start at zero. Local time where someone meant UTC. A date that moved by a day because of where the server happened to be. Every one of those is a Date problem that Temporal was designed to make impossible, with explicit types for a plain date, a plain time, a zoned moment, and a duration, none of which can be confused for each other.

My view is that this is a migration worth scheduling on purpose. Not a rewrite, and not a ban on Date, but a decision: new code uses Temporal, the date utilities everyone imports get rewritten on top of it, and the places where date bugs have actually bitten get converted first. Left to happen by accident, a codebase ends up with both, forever, which is worse than either.

Which date bug has cost your team the most, and would Temporal have prevented it?

Photo source: https://photos.robertstowe.com/eclipse