The TypeScript 6.0 release candidate is out. It feels unusual; bittersweet almost. For those who don’t know, I love this language and I make time to keep up with it. This release is “special” because it is last release from the current TypeScript codebase. TypeScript 7.0 will be the Go rewrite. Yes, the one that will make tsc 10x faster.
Here are the parts I really love about this release.
The Temporal API Finally Lands
I have been waiting for Temporal support to feel “official” in day-to-day TypeScript work.
TypeScript 6.0 now ships built-in types for Temporal under esnext libs, which means I can finally stop juggling third-party libs every time I need some basic and sane date/time handling.
If you haven’t seen/worked with this API before, here’s the quick pitch:
Temporal.Now.plainDateISO().add({ days: 7, months: 1 }).toString()
// > '2026-04-14'
const start = Temporal.PlainDate.from("2026-01-01")
const end = Temporal.PlainDate.from("2026-09-15")
start.until(end, { largestUnit: "month" })
// [Temporal.Duration] { days: 14, months: 8, sign: 1, ... }
new Temporal.ZonedDateTime(Temporal.Now.instant().epochNanoseconds, "America/New_York")
// [ZonedDateTime] { offset, timeZoneId, add(), substract(), ... }
Temporal.PlainDate.from("2026-02-29")
// RangeError: Temporal error: Parsed day value not in a valid range.
Honestly, this alone makes the release interesting for me.
Upsert Methods Support
The new Map/WeakMap upsert methods (getOrInsert and getOrInsertComputed) are long overdue. They’ve reached Stage 4 of the ECMA Script standard, but because they didn’t have TS support, I haven’t been seeing them in practice. Finally, it’s here:
const featureFlag = flagsMap.getOrInsert('myFeature', false)
// or to avoid computation
const cliOptions = globalStore.getOrInsertComputed('cliOptions', setupCliDefaults)
Cleaner, less error-prone, less boilerplate. But an important note is that getOrInsertComputed’s second argument has to be sync. You could easily make your own wrapper for AsyncMap though.
Strict by Default — the Correct Default
strict now defaults to true.
🎉 🎉 🎉
Finally! For mature teams, this mostly matches how projects are already configured. For newer projects, it nudges people into safer defaults from day one. Most boilerplates/templates have been doing that for a while now.
If this causes pain for any codebase you are working on, I really do think that is “good pain.”
The Bittersweet Part
The next stop is TypeScript 7.0 on the new Go codebase. I am excited for what comes next. If TypeScript 7.0 delivers on the promised speedups, we are talking about a very different day-to-day experience for big repos: faster checks, faster feedback loops, and less “wait for tsc” tax. Multi-agentic workflows are going to benefit as well (less time waiting of the CLI tool call to finish).
But that’s still a ways off. Summer 2026 is the target release date, but it is subject to change.
In the meantime, I’ll be convincing my team to migrate everything to the Temporal API.
Happy type-checking,
—Filip