Verification: —

TypeScript is in Maintenance Mode: What the Go Rewrite Means for Production Systems

TypeScript 6.0 is the last JavaScript-based release. The compiler is being rewritten in Go, the JS codebase is in maintenance mode, and most open PRs will be auto-closed. What this means for production systems, tool authors, and the TypeScript contribution model.

Contents

    TypeScript 6.0 is the last release built on JavaScript. The compiler is being rewritten in Go (Project Corsa), the JavaScript codebase is now in maintenance mode, and most open PRs against it will be automatically closed. For teams running TypeScript in production, this is the most significant infrastructure shift since the language’s creation.

    This post breaks down what maintenance mode actually means, what changes for contributors, and what production teams should plan for.

    The Announcement

    On issue #62963, RyanCavanaugh (TypeScript team, Microsoft) stated:

    “TypeScript 6.0 serves as a bridge release before TypeScript 7.0, and will be the last scheduled release based on the JavaScript codebase.”

    “The native rewrite in Go represents an unavoidable discontinuity in development, and the logistical challenge of maintaining two codebases means we have to make some difficult decisions about work that occurred prior to the 7.0 transition. In particular, this means most PRs currently open against the JavaScript codebase won’t be merged.”

    The pinned issue has 22 🚀 reactions — the community understands the rationale, even if the transition is painful for contributors with open PRs.

    What “Maintenance Mode” Actually Means

    The TypeScript team published explicit PR merge criteria. Only changes meeting one of these criteria will be accepted into the JS codebase:

    CriteriaExamples
    Intentional 6.0 breaks / deprecationsMigration tooling, deprecation warnings
    Critical regressions from recent releasesWorked in 5.6, broken in 5.8+, significant user impact
    6.0 / 7.0 behavior alignmentCompatibility fixes between JS and Go compilers
    Crashes in 5.9+ that also repro in 7.0Portable fixes with no behavioral side effects
    Non-disruptive lib.d.ts changesType corrections, documentation additions

    Everything else — new features, general bug fixes, refactors, performance improvements — will be auto-closed. Post-6.0 patch criteria are even narrower: security issues, language service crashes, and serious regressions only.

    Test-only PRs are also rejected. The team is managing sweeping baseline changes (e.g., the incoming strict: true PR) where even new tests cause merge conflicts.

    Project Corsa: The Go Rewrite

    The Go-based compiler is called tsgo. Key characteristics:

    Performance benchmarks from early adopters show typechecking time dropping by 75% in real-world codebases Microsoft Share Update on TypeScript 7 — InfoQ.

    Why Go

    Anders Hejlsberg chose Go for specific technical reasons Microsoft Share Update on TypeScript 7 — InfoQ:

    • Automatic garbage collection (matches the functional style of the existing TS compiler)
    • Most “native-first” language available
    • The existing TypeScript compiler uses a highly functional style with minimal classes — Go’s function and data structure approach is a natural fit vs. object-oriented alternatives

    What Breaks: The Strada API Gap

    The most significant discontinuity for tool authors is the Strada API (the legacy TSServer protocol). The native language service uses Language Server Protocol (LSP) with a substantially rewritten implementation Microsoft Gets ‘Real’ on Native TypeScript Remake — Visual Studio:

    FeatureStatus
    Core type-checking✅ Stable
    Editor features (completions, definitions, etc.)✅ Stable
    Incremental compilation✅ Supported
    Watch mode⚠ Exists but may be less efficient
    JavaScript emit❌ Not fully ported
    Downlevel compilation (pre-ES2021)❌ Only back to ES2021
    Decorator emit❌ Not supported
    Strada API (TSServer)❌ Not supported
    JSDoc (@enum, @constructor)❌ Intentionally dropped

    Existing linters, formatters, and extensions that depend on the Strada API will not work with the native toolset yet. A replacement API (codenamed Corsa) is under development Microsoft Gets ‘Real’ on Native TypeScript Remake — Visual Studio.

    What Production Teams Should Do Now

    1. Test the Native Preview

    # CLI type-checking
    npm install -g @typescript/native-preview
    
    # VS Code extension (daily updated)
    # Install: TypeScript Nightly Preview from Marketplace

    2. Audit Tooling Dependencies

    Check whether your toolchain depends on the Strada API:

    • Custom TSServer clients
    • Language service plugins
    • Build tools that consume the TypeScript compiler API directly
    • Linters that hook into TSServer

    These will need migration paths when TypeScript 7.0 ships.

    3. Plan for Strict Mode by Default

    TypeScript 7.0 enables strict: true by default Microsoft Share Update on TypeScript 7 — InfoQ. Projects that don’t explicitly set strict in tsconfig.json may see new type errors. The TypeScript 6.0 bridge release introduces deprecation warnings to surface these early.

    4. Update tsconfig.json Defaults

    Several config defaults change in 7.0 Microsoft Gets ‘Real’ on Native TypeScript Remake — Visual Studio:

    {
      "compilerOptions": {
    -   "target": "ES5",
    +   "target": "ES2015",
    -   "baseUrl": "./src",
    -   "moduleResolution": "node10",
    +   "moduleResolution": "bundler"
      }
    }

    Microsoft provides a ts5to6 tool to auto-update baseUrl and rootDir in tsconfig.json Microsoft Gets ‘Real’ on Native TypeScript Remake — Visual Studio.

    The Contribution Model Shift

    For contributors, the message is clear: the JavaScript TypeScript repo is effectively closed. The team explicitly directs contributors to the Go codebase (microsoft/typescript-go) for new work Transition to 6.0 Maintenance Mode · Issue #62963.

    This is a significant shift. TypeScript has historically been one of the most welcoming large-scale open-source projects for community contributions. The JS codebase has thousands of merged community PRs. The Go rewrite resets that contribution graph.

    The silver lining: the Go codebase is where all new development happens, and the team has expressed interest in community contributions there once the 7.0 launch dust settles.

    Competitive Context

    TypeScript 7’s native implementation puts it in the same performance tier as other high-performance JS tooling built on native compilers:

    ToolLanguageClaim
    tsgo (TypeScript 7)Go7–10× faster builds Microsoft Share Update on TypeScript 7 — InfoQ
    esbuildGoBundling, not type-checking
    SWCRustTranspilation, not type-checking
    oxcRustLinter, compiler, transpiler

    TypeScript 7 is unique in offering full type-checking with native performance while maintaining complete backward compatibility with the existing TypeScript language and ecosystem.

    Bottom Line

    TypeScript isn’t dying — it’s being rebuilt. The Go rewrite delivers the performance that large codebases have needed for years. But the transition creates real friction: a closed contribution model on the JS codebase, a broken Strada API for tool authors, and new defaults that may surface latent type errors.

    Production teams should start testing tsgo now, audit their tooling dependencies, and plan for strict mode by default. The native preview is stable enough for daily use Microsoft Gets ‘Real’ on Native TypeScript Remake — Visual Studio — the question isn’t whether to migrate, but when.


    Sources:

    References