Skip to content
ToolShedby Wasim Shaikh

Angular Material Upgrade Planner

Pick a source and target Angular Material version (8–22) for an ordered upgrade plan — MDC migration, legacy removal, Material 3 theming, and ng update commands.

Choose your upgrade path

Angular Material 16 → Angular Material 220 of 27 done · 6 hops
1

Angular Material 16 → Angular Material 17

(4 steps)
Pre-flight

Angular Material’s major version must match the Angular core major version. Update them together in the same hop, upgrade one major at a time on a branch, and run the app/tests after each hop. Commit a clean tree first.

Tooling / Requirements

Angular Material 17 requires the same toolchain as Angular 17: Node 18.13+/20.9+ and TypeScript 5.2–5.4.

Update Command

Update Material alongside the Angular core and CLI so the Material migration schematics for this version run.

ng update @angular/core@17 @angular/cli@17 @angular/material@17
Breaking Change

The @angular/material/legacy-* packages are removed in Material 17. A schematic logs a fatal error and blocks the update if your app still imports legacy components — you must finish migrating to the MDC components first. (As a stopgap you can keep Material 16 on Angular 17 until v18.)

Sources: Angular Update Guide: v16 → v17 · Angular Material 17.0.0 release notes

2

Angular Material 17 → Angular Material 18

(4 steps)
Pre-flight

Angular Material’s major version must match the Angular core major version. Update them together in the same hop, upgrade one major at a time on a branch, and run the app/tests after each hop. Commit a clean tree first.

Tooling / Requirements

Angular Material 18 requires the same toolchain as Angular 18: Node 18.19+/20.11+/22 and TypeScript 5.4–5.5.

Update Command

Update Material alongside the Angular core and CLI so the Material migration schematics for this version run.

ng update @angular/core@18 @angular/cli@18 @angular/material@18
Migration / Adoption

Define themes with mat.define-theme(), which is based on Material 3 design tokens implemented as CSS custom properties. Configure color, typography, and density dimensions. M2 (mat.define-light-theme) is still supported, so migrate themes when ready.

$theme: mat.define-theme();

Sources: Angular Update Guide: v17 → v18 · Angular Material 18.0.0 release notes · Angular Material theming guide

3

Angular Material 18 → Angular Material 19

(4 steps)
Pre-flight

Angular Material’s major version must match the Angular core major version. Update them together in the same hop, upgrade one major at a time on a branch, and run the app/tests after each hop. Commit a clean tree first.

Tooling / Requirements

Angular Material 19 requires the same toolchain as Angular 19: Node 18.19+/20.11+/22 and TypeScript 5.5–5.8.

Update Command

Update Material alongside the Angular core and CLI so the Material migration schematics for this version run.

ng update @angular/core@19 @angular/cli@19 @angular/material@19
Migration / Adoption

Material 19 adds the mat.theme() mixin: pass a map of color, typography and density and it emits --mat-sys-* system CSS variables (e.g. --mat-sys-primary, using light-dark() for dark mode). Override individual tokens with mat.theme-overrides and the per-component overrides mixins.

@include mat.theme((color: mat.$violet-palette, typography: Roboto, density: 0));

Sources: Angular Update Guide: v18 → v19 · Angular Material 19.0.0 release notes · Angular Material theming guide

4

Angular Material 19 → Angular Material 20

(5 steps)
Pre-flight

Angular Material’s major version must match the Angular core major version. Update them together in the same hop, upgrade one major at a time on a branch, and run the app/tests after each hop. Commit a clean tree first.

Tooling / Requirements

Angular Material 20 requires the same toolchain as Angular 20: Node 20.19+/22.12+/24 and TypeScript 5.8.

Update Command

Update Material alongside the Angular core and CLI so the Material migration schematics for this version run.

ng update @angular/core@20 @angular/cli@20 @angular/material@20
Breaking Change

Component token CSS variables that started with --mdc- now start with --mat-, and some are reordered (e.g. --mat-tonal-button-* becomes --mat-button-tonal-*). ng update rewrites references in your styles; check any hand-written overrides it cannot see.

Migration / Adoption

Buttons gain a unified matButton selector with a new tonal appearance (matButton="tonal"), cards get appearance="filled", and dialogs accept a closePredicate to control when they can close.

<button matButton="tonal">Save</button>

Sources: Angular Update Guide: v19 → v20 · Angular Material 20.0.0 release notes · Angular Material theming guide · Announcing Angular v20 (Angular Blog)

5

Angular Material 20 → Angular Material 21

(5 steps)
Pre-flight

Angular Material’s major version must match the Angular core major version. Update them together in the same hop, upgrade one major at a time on a branch, and run the app/tests after each hop. Commit a clean tree first.

Tooling / Requirements

Angular Material 21 requires the same toolchain as Angular 21: Node 20.19+/22.12+/24 and TypeScript 5.9.

Update Command

Update Material alongside the Angular core and CLI so the Material migration schematics for this version run.

ng update @angular/core@21 @angular/cli@21 @angular/material@21
Migration / Adoption

Material 21 adds utility classes to apply Material Design system tokens directly in templates, as an alternative to referencing the --mat-sys-* CSS variables in your styles.

Migration / Adoption

Angular Aria ships in developer preview with headless, accessible component patterns (combobox, listbox, and more) you can compose alongside Material components.

Sources: Angular Update Guide: v20 → v21 · Angular Material 21.0.0 release notes · Angular Material theming guide · Announcing Angular v21 (Angular Blog)

6

Angular Material 21 → Angular Material 22

(5 steps)
Pre-flight

Angular Material’s major version must match the Angular core major version. Update them together in the same hop, upgrade one major at a time on a branch, and run the app/tests after each hop. Commit a clean tree first.

Tooling / Requirements

Material 22 matches Angular 22: TypeScript 6.0 is required (5.9 and below unsupported) and Node.js must be ^22.22.3, ^24.15.0 or ^26.0.0 (Node 20 is dropped). Upgrade your toolchain first.

Update Command

Update Material alongside the Angular core and CLI so the Material migration schematics for this version run.

ng update @angular/core@22 @angular/cli@22 @angular/material@22
Breaking Change

Angular 22 makes OnPush the default and renames the old Default strategy to Eager. ng update adds ChangeDetectionStrategy.Eager to your existing components, so behavior is preserved. Material’s own components were already OnPush, so they are unaffected.

Migration / Adoption

Signal Forms are production-ready and integrate with Angular Material and Angular Aria, and Angular Aria reaches stable. Consider adopting Signal Forms for Material form controls.

Sources: Angular Update Guide: v21 → v22 · Angular Material 22.0.0 release notes · Announcing Angular v22 (Angular Blog)

Tip: Always upgrade Angular Material together with Angular core (their majors must match) and one major at a time. The hardest hops are the MDC rewrite at v15 and the Material 3 theming switch at v18 — budget extra time for visual QA there. This is a representative checklist; confirm specifics against the official Angular Material guides for your versions.

Upgrading Angular Material 16 to Angular Material 22

This plan covers the full path from Angular Material 16 to Angular Material 22 — 6 version hops and 27 steps in total. Upgrade Angular Material together with Angular core, one major at a time, running ng update for each hop so the Material migration schematics apply. Commit and run thorough visual QA between hops.

Breaking changes to check between Angular Material 16 and Angular Material 22

  • Legacy components are deleted (Angular Material 16 → Angular Material 17): The @angular/material/legacy-* packages are removed in Material 17. A schematic logs a fatal error and blocks the update if your app still imports legacy components — you must finish migrating to the MDC components first. (As a stopgap you can keep Material 16 on Angular 17 until v18.)
  • Token CSS variables renamed from --mdc-* to --mat-* (Angular Material 19 → Angular Material 20): Component token CSS variables that started with --mdc- now start with --mat-, and some are reordered (e.g. --mat-tonal-button-* becomes --mat-button-tonal-*). ng update rewrites references in your styles; check any hand-written overrides it cannot see.
  • Components default to OnPush change detection (Angular Material 21 → Angular Material 22): Angular 22 makes OnPush the default and renames the old Default strategy to Eager. ng update adds ChangeDetectionStrategy.Eager to your existing components, so behavior is preserved. Material’s own components were already OnPush, so they are unaffected.

Hops in this path

  1. Angular Material 16 → Angular Material 17 — 4 steps
  2. Angular Material 17 → Angular Material 18 — 4 steps
  3. Angular Material 18 → Angular Material 19 — 4 steps
  4. Angular Material 19 → Angular Material 20 — 5 steps
  5. Angular Material 20 → Angular Material 21 — 5 steps
  6. Angular Material 21 → Angular Material 22 — 5 steps

Before you start

  • Upgrade on a branch and keep Angular Material's major in lockstep with Angular core.
  • Get on the latest minor/patch of Angular Material 16 before the first hop.
  • Plan extra time for visual QA on the MDC (v15) and Material 3 theming (v18) hops if they fall in this range.

Sources

Every step in this plan is checked against Angular's official documentation and release notes. Last reviewed .