TypeScript 6.0: what actually changed, what will break after the upgrade, and whether you should move now
A practical breakdown of TypeScript 6.0 after its March 2026 release: new defaults, internal changes, why builds often got faster, where migration hurts most, how to move from TypeScript 5 without surprises, and what is already visible about TypeScript 7 and Microsoft's native direction.

start here
TypeScript 6.0 makes the most sense when you stop reading it as a bag of minor features and start reading it as the release where the team finally pushes harder on old defaults. That is why some projects simply get faster, while others suddenly discover how much of their setup relied on silent assumptions.
types now defaulting to an empty array. In the release notes, the team says some projects saw 20-50% faster build times from that alone. [2]In March 2026, Microsoft shipped TypeScript 6.0. In practice, this is not a release built around one giant headline feature. It is a release about new baseline rules. The team changed defaults, cut away part of the old configuration baggage, and pushed the ecosystem toward a more modern starting point. [1][2]
That tone is easy to hear in the official announcement. It is not trying to sell the release as something magical. Instead, it openly says what teams will need to touch first: types, rootDir, and old assumptions about compiler defaults. That may be uncomfortable, but this is usually what a mature infrastructure release looks like. [1]
One more thing matters here. TypeScript 6 does not stand on its own. You really have to read it next to the TypeScript 7 direction. Back in 2025, the team had already explained that 6.x would be the JavaScript branch with transitional deprecations, while 7.x would carry the native direction with tsgo, a new architecture, and much faster checking. [3][4]
The most interesting part of TypeScript 6 is not the surface API. It is the way the team revisited defaults and the internal cost of checking large repositories.
types no longer pulls in everything
This is the most useful change for real monorepos. TypeScript used to crawl whatever it found in node_modules/@types. In 6.0, the default types value became [], which directly cuts compiler waste. The team says some projects saw 20-50% build-time improvements. [2]
rootDir stops behaving like magic
Modern JavaScript no longer looks like the edge case
strict is now on by default. module now defaults to esnext. target now tracks the latest stable ECMAScript, currently es2025. In other words, TypeScript 6 stops pretending the older defaults are still the typical environment. [1]
Less legacy, fewer ambiguous modes
TypeScript 6.0 is not only about painful config work. There are also real language and platform additions that will quietly become the new normal.
• Support for import attributes. This matters for platform-aware tooling and modern ESM pipelines. [2]
• Support for
export defer. It is not an everyday feature yet, but it matters for the long arc of module semantics. [2]• New
--module node20. Another signal that TypeScript is aligning itself more closely with real Node behavior, not just abstract compatibility mixtures. [2]• New typings for
Temporal. This looks small until you are in a real date and time domain and need reliable platform types. [2]•
lib.dom.iterableandlib.dom.asynciterableare effectively included indom. A small but healthy step toward a less fussy tsconfig. [2]
For most teams, the release does not hurt because of the language. It hurts because of accumulated configuration debt. These are the places where TypeScript 6 most often exposes real project issues. [1][2][4]
Your build starts placing files in odd paths like dist/src/... instead of the layout you expected. That is usually the signal that you need to define rootDir explicitly. [1]
A project that lived for years without strict suddenly starts yelling about everything. That is not a bug. In 6.0, strict became the default, so you either accept the higher bar or explicitly opt back out. [1]
Some teams will mistake the performance improvements for magic and miss the point. To really win, you need to clean tsconfig so the compiler simply does less unnecessary work. [2]
Summary
The best way to survive the 6.0 upgrade is not heroics. It is a short migration sprint that audits types, rootDir, strict, and legacy options before rollout.
This order usually works better than just upgrading the version and waiting to see what explodes.
Freeze the current build and type-check baseline in CI
You need a reference point. Without it, you cannot separate release fallout from old project debt.
Make a clear decision about strict
In production, an explicit choice is much better than a silent repo-wide change in how code gets checked. [1]
Roll the upgrade through one large package or one app entrypoint first
That gives you real control over regressions and reveals where the true config debt lives.
TypeScript 6 is not equally attractive for every team. The real answer depends on how modern your config already is and how much large-repo compiler cost matters to you.
Upgrade now
A modern Node or bundler stack, ESM or close to it, explicit environment types, minimal legacy config, and a real reason to cut compiler noise while preparing the team for 7.0.
Upgrade after a short cleanup sprint
A monorepo where tsconfig grew for years, but the team can spend a few days cleaning up types, rootDir, baseUrl, and module settings.
Stabilize the base first
An older project with no strict, lots of global types, outdated resolution modes, and fragile build pipelines. Here, upgrading without prep is likely to create chaos.
| Comparison point | TypeScript 5.x | TypeScript 6.0 |
|---|---|---|
types | Often crawls everything under @types by default | Defaults to [], so important globals should be listed explicitly |
strict | false by default | true by default |
rootDir | Often inferred from the source tree | Defaults to the tsconfig.json directory |
module | Older defaults coexisted for longer | Default moves toward esnext and modern ESM |
| Legacy posture | More compatibility modes kept alive | More deprecations as preparation for 7.0 |
Community threads help reveal where people expect pain and where they expect the biggest practical payoff.
If you look at 6.0 only as another compiler release, it is easy to miss the larger story. TypeScript 6 also exists to prepare the ecosystem for 7.0. The team has been explicit about that since the native port announcement. [3]
In the December 2025 progress update on TypeScript 7, the team wrote that tsgo was already reliable for type-checking, that --build, project references, and --incremental were getting close to serious parity, and that some full builds were showing roughly 10x speedups compared with the 6.0 branch. [4]
But this is not a fairytale either. In the same update, the team is honest about API differences and about the fact that some 6.0 deprecations will turn into harder constraints in 7.0. So the clean way to read TypeScript 6 is as a transition window where teams can modernize config before the native era becomes the default expectation. [4]
TypeScript 6.0 was not released to make everyone comfortable. It was released so the compiler could stop dragging old habits forward forever. In that sense, it is a very honest release.
If your project is already modern and disciplined, moving to 6.0 now is reasonable. You get a more predictable tsconfig, less wasted work around global types, and a cleaner path toward whatever TypeScript 7 becomes in your stack.
If your repo has spent years leaning on implicit defaults, TypeScript 6 will simply show that without sugarcoating it. That is useful too. It is much better to discover config debt on 6.0 than to meet the same debt later when the team wants to seriously adopt tsgo and the native line.
No. But if your stack is already modern and you were going to clean up tsconfig anyway, there is not much reason to postpone it. If the repo is heavily tied to old defaults, the migration is better done as a short technical project rather than a casual dependency bump.
For many teams, it is the new behavior of `types`. That is often where the build-speed win comes from, but it also forces teams to be more explicit about which global type environments the project truly depends on.
Yes, with a normal migration approach. This is not a release to upgrade into blindly. Check `types`, `rootDir`, `strict`, module modes, and CI first.
The team has already shown serious progress on the native `tsgo` line: type-checking, `--build`, project references, and `--incremental` are moving toward strong parity, and some benchmarks are already near 10x faster. But 7.0 still comes with API differences and ecosystem-compatibility work.
Related Articles
AI SEO / GEO in 2026: Your Next Customers Aren’t Humans — They’re Agents
Search is shifting from clicks to answers. Bots and AI agents crawl, cite, recommend, and increasingly buy. Learn what AI SEO / GEO means, why classic SEO is no longer enough, and how PAS7 Studio helps brands win visibility in the agentic web.
The most powerful Apple chip yet? M5 Pro and M5 Max are breaking records
A data-backed March 2026 analysis of Apple M5 Pro and M5 Max. We break down why these chips can credibly be called Apple's most powerful pro laptop silicon, how they compare with M4 Pro, M4 Max, M1 Pro, M1 Max, and how they stack up against Intel and AMD laptop rivals.
Artemis II and the Code That Carries Humans to the Moon
This article unpacks NASA's Artemis II mission, launched on April 1, 2026, and explains what it really says about modern engineering: flight software, backup logic, simulation, telemetry, human control, and the careful role AI can play in space systems.
Automatic Tagging & Search for Saved Links
Integrate with GDrive/S3/Notion for automatic tagging and fast search via search APIs
Professional development for your business
We create modern web solutions and bots for businesses. Learn how we can help you achieve your goals.