TypeScript 6.0 reached general availability on March 23, 2026. This release closes a chapter: it's the last version of the TypeScript compiler built on JavaScript. The Go-native rewrite — TypeScript 7.0 (Project Corsa) — already shipped in January 2026.
Two TypeScript Tracks Are Running Simultaneously
This is the situation as of March 2026:
- TypeScript 6.0 (GA March 23, 2026): Final JavaScript-based implementation
- TypeScript 7.0 (GA January 15, 2026): Go-native compiler, 10x faster builds
TypeScript 7.0 came out before 6.0 reached GA. That's intentional — 6.0 serves as a migration checkpoint, completing the deprecation cycle and default-value changes that prepare codebases for the Go-native track.
The Performance Gap Is Real
Microsoft published benchmarks for the Go-native compiler:
| Codebase | TypeScript 6.x | TypeScript 7.0 | Improvement |
|---|---|---|---|
| VSCode (1.5M lines) | 89s | 8.74s | 10.2x |
| Memory usage | — | — | ~3x reduction |
For large codebases in CI, this difference compounds: faster builds mean shorter pipeline times, lower compute costs, and tighter feedback loops for developers.
What Changed in TypeScript 6.0
Breaking Default Values
The most impactful change is default values shifting:
// tsconfig.json — new defaults in TypeScript 6.0
{
"compilerOptions": {
"strict": true, // was: false
"module": "esnext", // was: commonjs
"target": "ES2025" // was: ES3
}
}If your project doesn't explicitly set these values in tsconfig.json, behavior may change after upgrading. Audit your config before upgrading.
ES2025 Built-in Types
TypeScript 6.0 adds lib types for stage-4 proposals:
// Temporal API — built-in types now available
const now = Temporal.Now.plainDateTimeISO();
const tomorrow = now.add({ days: 1 });
// Map upsert methods (stage-4 "upsert" proposal)
const cache = new Map<string, number>();
cache.getOrInsert("hits", 0);
cache.getOrInsertComputed("computed", () => expensiveCalculation());Subpath Imports
Node.js #/ subpath imports are now supported under nodenext and bundler module resolution:
// Supported in TypeScript 6.0 with nodenext or bundler
import { logger } from '#/utils/logger';
// package.json
{
"imports": {
"#/utils/*": "./src/utils/*.ts"
}
}Less Context-Sensitivity on This-Less Functions
A long-standing inconsistency between arrow functions and method syntax in generic inference has been resolved. This reduces unexpected type errors in higher-order function patterns.
Migration Path
Immediate:
# 1. Upgrade
npm install typescript@6 --save-dev
# 2. Check for type errors before committing
npx tsc --noEmit
# 3. Explicitly set values that changed to avoid surprisesExplicitly declare strict, module, and target in your tsconfig.json. Don't rely on defaults — they changed.
Medium-term:
Evaluate TypeScript 7.0 for your project. For new projects, there's a clear argument for starting on 7.0 directly. For existing projects, upgrade to 6.0 first, resolve errors, then move to 7.0.
Our Take
The JavaScript-based TypeScript compiler served for over a decade. TypeScript 6.0 GA is the formal closing of that era. For teams where compile time is a real bottleneck — large monorepos, slow CI pipelines — TypeScript 7.0's 10x improvement justifies the migration effort. For smaller projects, the path through 6.0 first is lower risk.
The Go-native rewrite also signals a maturity shift: TypeScript is now infrastructure, not just a developer tool. That's reflected in how seriously Microsoft is investing in compiler performance.