Migration Hub

Angular Upgrade Guide

Every version. Every breaking change. Straight to the fix.

By Antonio Cárdenas — Google Developer Expert in Angular

Angular ships a major version every six months (May and November). Each major version introduces breaking changes that require both ng update schematics and manual code fixes. This hub links every migration guide, organized by version pair, so you can jump directly to what you need.

Golden rule: Never skip a major version. Always migrate one step at a time: 19 → 20 → 21 → 22.

Angular 20 → 21 Migration

Angular 21 kills Karma for good, makes zone.js opt-out in new projects, and introduces Signal Forms as an experimental API. Run ng generate @angular/core:karma-to-vitest before anything else.

Before You Upgrade: Checklist

  1. Check update.angular.io for your exact version pair
  2. Verify your Node.js version meets the requirement (Angular 20+ requires Node 20+)
  3. Update TypeScript first — Angular 20+ requires TypeScript 5.8+
  4. Commit all changes before running ng update — never run on a dirty tree
  5. Run ng update @angular/cli @angular/core — one major version at a time
  6. Run your test suite immediately after — breaking changes surface fastest here
  7. If using Karma, migrate to Vitest: ng generate @angular/core:karma-to-vitest

Frequently Asked Questions

How do I upgrade Angular to the latest version?

Run ng update @angular/cli @angular/core in your project root. Angular's update command handles dependency resolution and runs automatic migrations (schematics) that fix breaking changes in your code. Always check the Angular Update Guide at update.angular.io for version-specific steps and run the update one major version at a time — don't skip versions.

Can I skip major Angular versions when upgrading?

No. Angular's schematics run sequentially and depend on incremental migrations. Skipping from Angular 19 to Angular 21 directly will miss breaking-change migrations from v20, leaving your code in a broken state. Always upgrade one major version at a time: 19 → 20 → 21 → 22.

What are the biggest breaking changes from Angular 19 to 20?

The main Angular 20 breaking changes are: (1) afterRender() renamed to afterEveryRender() with no auto-migration; (2) TestBed.get() removed — use TestBed.inject(); (3) InjectFlags enum removed; (4) DOCUMENT token moved from @angular/common to @angular/core; (5) @angular-devkit/build-angular replaced by the new @angular/build package. Run ng update @angular/cli@20 @angular/core@20 for automatic migration.

What are the biggest breaking changes from Angular 20 to 21?

The main Angular 21 breaking changes are: (1) Karma is replaced by Vitest as the default test runner — run ng generate @angular/core:karma-to-vitest to migrate; (2) New apps exclude zone.js by default; (3) HttpClient is provided in the root injector by default. Migrate with ng update @angular/cli@21 @angular/core@21.

How long does an Angular migration take?

A standard Angular migration using ng update takes 15–60 minutes for most projects. Large enterprise apps with extensive Karma test suites or custom Webpack configurations may take 1–2 days, primarily due to migrating from Karma to Vitest. The schematics handle most of the boilerplate automatically.

Do I need to update TypeScript when upgrading Angular?

Yes. Each Angular major version requires a minimum TypeScript version. Angular 20 requires TypeScript 5.8+, Angular 21 requires TypeScript 5.8+, Angular 22 requires TypeScript 5.9+. Always update TypeScript before running ng update to avoid compilation errors during migration.

What is the Angular release schedule?

Angular follows a predictable 6-month major release cycle. Major versions are released in May and November each year. Angular 20 was released in May 2025, Angular 21 in November 2025, and Angular 22 in May 2026. Each major version is supported for 18 months (12 months active + 6 months LTS).

Written by

Antonio Cárdenas

Google Developer Expert in Angular · Verified GDE profile

I've migrated production Angular apps from v8 to v22. These guides are built from real migrations, not documentation re-reads.