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 8 → Angular Material 200 of 52 done · 12 hops
1

Angular Material 8 → Angular Material 9

(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 9 requires the same toolchain as Angular 9: Node 10.13+ and TypeScript 3.6–3.8.

Update Command

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

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

Material moves onto Ivy with Angular 9 and introduces component test harnesses (@angular/cdk/testing) for more robust component tests. Mostly dependency and minor API changes this hop.

Sources: Angular Update Guide: v8 → v9 · Angular Material 9.0.0 release notes

2

Angular Material 9 → Angular Material 10

(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 10 requires the same toolchain as Angular 10: Node 12+ and TypeScript 3.9.

Update Command

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

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

Material 10 adds the mat-date-range-input / mat-date-range-picker and refreshes several styles. Material tracks Angular core; review any deprecation warnings the update prints.

Sources: Angular Update Guide: v9 → v10 · Angular Material 10.0.0 release notes

3

Angular Material 10 → Angular Material 11

(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 11 requires the same toolchain as Angular 11: TypeScript 4.0.

Update Command

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

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

Mostly dependency bumps and small fixes for Material this hop. Run the update schematics and review the changelog for any component you customize heavily.

Sources: Angular Update Guide: v10 → v11 · Angular Material 11.0.0 release notes

4

Angular Material 11 → Angular Material 12

(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 12 requires the same toolchain as Angular 12: Node 12.14+ and TypeScript 4.2.

Update Command

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

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

Material 12 adopts the Sass module system. Replace @import "~@angular/material/theming" with @use "@angular/material" as mat; and use mat.define-light-theme, mat.core, and mat.all-component-themes. The update includes a theming migration schematic.

@use '@angular/material' as mat;

Sources: Angular Update Guide: v11 → v12 · Angular Material 12.0.0 release notes · Angular Material theming guide

5

Angular Material 12 → Angular Material 13

(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 13 requires the same toolchain as Angular 13: Node 12.20+/14.15+/16.10+ and TypeScript 4.4.

Update Command

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

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

Material 13 tightens the public theming API (use mat.* functions rather than deep imports) and updates the Angular Package Format. Stop importing from internal paths if you were.

Sources: Angular Update Guide: v12 → v13 · Angular Material 13.0.0 release notes

6

Angular Material 13 → Angular Material 14

(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 14 requires the same toolchain as Angular 14: Node 14.15+/16.10+ and TypeScript 4.6–4.8.

Update Command

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

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

The MDC-based components are available under @angular/material-experimental in v14. Trying them now makes the mandatory v15 MDC migration far smoother.

Sources: Angular Update Guide: v13 → v14 · Angular Material 14.0.0 release notes

7

Angular Material 14 → Angular Material 15

(7 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 15 requires the same toolchain as Angular 15: Node 14.20+/16.13+/18.10+ and TypeScript 4.8–4.9.

Update Command

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

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

Material 15 refactors all components onto Material Design Components (MDC). DOM structure and CSS class names change, so custom component styles can break. This is the single biggest Material upgrade — budget time for visual QA.

Breaking Change

floatLabel="never" is dropped (it only existed on the old form-field appearance). Use matTextPrefix/matTextSuffix for baseline-aligned text and matIconPrefix/matIconSuffix for centered icons. Expect density and typography differences.

Deprecation / Removal

The @angular/material/legacy-* packages are a temporary bridge — they are deprecated in v15 and deleted in v17, so plan your migration off them before then.

Migration / Adoption

The update schematic rewrites imports to @angular/material/legacy-* so the app runs on v15 immediately with minimal changes. Then migrate component-by-component to the new (non-legacy) MDC components.

ng update @angular/material@15

Sources: Angular Update Guide: v14 → v15 · Angular Material 15.0.0 release notes

8

Angular Material 15 → Angular Material 16

(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 16 requires the same toolchain as Angular 16: Node 16.14+/18.10+ and TypeScript 4.9–5.1.

Update Command

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

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

Replace @angular/material/legacy-* imports with the new MDC components one component at a time, fixing styles as you go. Use the density and typography mixins (mat.<component>-density) to tune the MDC look. Legacy components are still available this version but go away in v17.

Sources: Angular Update Guide: v15 → v16 · Angular Material 16.0.0 release notes

9

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

10

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

11

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

12

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)

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 8 to Angular Material 20

This plan covers the full path from Angular Material 8 to Angular Material 20 — 12 version hops and 52 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 8 and Angular Material 20

  • Every component is rebuilt on MDC (Angular Material 14 → Angular Material 15): Material 15 refactors all components onto Material Design Components (MDC). DOM structure and CSS class names change, so custom component styles can break. This is the single biggest Material upgrade — budget time for visual QA.
  • Form field and prefix/suffix changes (Angular Material 14 → Angular Material 15): floatLabel="never" is dropped (it only existed on the old form-field appearance). Use matTextPrefix/matTextSuffix for baseline-aligned text and matIconPrefix/matIconSuffix for centered icons. Expect density and typography differences.
  • 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.

Hops in this path

  1. Angular Material 8 → Angular Material 9 — 4 steps
  2. Angular Material 9 → Angular Material 10 — 4 steps
  3. Angular Material 10 → Angular Material 11 — 4 steps
  4. Angular Material 11 → Angular Material 12 — 4 steps
  5. Angular Material 12 → Angular Material 13 — 4 steps
  6. Angular Material 13 → Angular Material 14 — 4 steps
  7. Angular Material 14 → Angular Material 15 — 7 steps
  8. Angular Material 15 → Angular Material 16 — 4 steps
  9. Angular Material 16 → Angular Material 17 — 4 steps
  10. Angular Material 17 → Angular Material 18 — 4 steps
  11. Angular Material 18 → Angular Material 19 — 4 steps
  12. Angular Material 19 → Angular Material 20 — 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 8 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 .