Temporal: The 9-year journey to fix time in JavaScript
Overall reception and adoption timeline
- Many are enthusiastic; several have used the polyfill in production and report it as “well thought-through” and a big improvement over
Date. - Others are cautious, noting they’ll wait for broad runtime support (Node LTS, Deno, Bun, browsers) before fully adopting.
- Several expect a multi‑year adoption curve similar to Java’s Joda-Time → JSR 310 transition.
Comparisons to other ecosystems
- Strong parallels drawn with Java’s Joda‑Time /
java.timeand .NET’s Noda; Temporal is seen as conceptually similar (immutability, clear types likeZonedDateTime). - Some expect Rust to gravitate toward the Temporal model via
temporal_rs, possibly influencing or competing withchrono/jiff.
Browser and runtime support
- Chrome and Deno already ship Temporal; Safari and Firefox lag somewhat, though Safari has work in progress and tech preview support.
- There’s a heated debate: one side blames Safari for “holding the web back”; another argues Chrome moves too fast and that slower, more cautious implementation (Safari/Firefox) is healthy for standards.
- Polyfills are widely mentioned as a stopgap, especially for Safari and older corporate browsers.
API design, ergonomics, and philosophy
- Praised for explicitness: distinct types (
Instant,ZonedDateTime,PlainDate,Duration) make DST and scheduling bugs less likely. - Criticized for verbosity and complexity: e.g.
Temporal.Now.zonedDateTimeISO()vsnew Date(), nanosecond precision by default, PascalCase methods. - Some argue verbosity is intentional to force developers to be explicit about what kind of “now” they want.
- Immutability is highlighted as a major improvement over
Date’s mutability footguns.
Serialization and JSON
- Temporal objects serialize cleanly to ISO strings, but JSON round‑trips lose prototypes, requiring explicit reconstruction (
Temporal.from, JSON revivers, or helper libraries). - Some dislike that this breaks the “plain data over the wire” pattern; others note this is inherent to JSON’s limited types, not unique to Temporal.
Time modeling debates
- Many advocate the long‑standing “store UTC, convert for display” rule; others note this is insufficient for scheduling and for preserving original time zones/offsets.
- Temporal’s “Plain” types (date, time, datetime without time zone) and explicit time‑zone handling are seen as valuable for complex scheduling and cross‑zone events.
- Several comments reiterate how deceptive and difficult real‑world time handling is (DST, calendar systems, leap seconds, religious and political changes).
Implementation details and performance
- The shared Rust implementation (
temporal_rs) used across engines is seen as a notable shift: better interop, but with the risk of shared bugs. - A few report poor performance in early experiments and hope optimization work will follow.
- Temporal’s reliance on
Intlfor formatting raises concerns about language coverage in Chrome and the need for polyfills.