Temporal
Every JavaScript codebase has a date library in it somewhere. moment, date-fns, luxon, dayjs. Usually because Date sucks, and we needed a pile of workarounds for a 30-year-old mistake.
Temporal reached Stage 4 on March 13, 2026. That means it is part of ECMAScript now. 🎉
The problem with Date was never just formatting. It was the whole model. Mutable objects. Weird parsing. Local time vs UTC surprises. The bug in this example is the classic one: pass a Date into a helper, mutate it, and now "today" quietly became tomorrow.
Temporal fixes the shape of the problem. Values are immutable. A PlainDate is just a date. Add a day, get a new value back, move on. This write-up from Piccalilli covers the deeper API design if you want the full tour.
The real punchline is bundle cleanup. Go look at your dependency graph and ask how much of it exists just to survive Date. Temporal turns that whole category into platform code. One less import. Probably your heaviest one.
Support is real enough to act on. Firefox ships it. Chromium-based browsers are there. If your browser matrix still has gaps, ship @js-temporal/polyfill now and delete that too when you can.
Old world
Date mutates the input
Call a setter in some helper and the original value is gone.
Mar 17, 2026click Run Date bugMar 17, 2026not checkedThis is why Date helpers become landmines.
New hotness
Temporal returns a new value
Same date math, no mutation, no reference trap, no surprise.
2026-03-17click Run Temporal2026-03-17not checkedThis is the whole mood shift.
Dependency cleanup, eventually:
npm uninstall momentnpm uninstall date-fnsnpm uninstall luxonnpm uninstall dayjs