Angular Material Icons

Using Google's Material Symbols and classic Material Icons with Angular Material's <mat-icon>: font setup, styles, variable settings and SVG icons.

1. Add the font

Add the Material Symbols stylesheet to src/index.html:

src/index.html
<link
  rel="stylesheet"
  href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,[email protected],100..700,0..1,-50..200"
/>

Add &icon_names=home,search,… (sorted A–Z) to load only the icons you use, which makes the font much smaller.

2. Make Material Symbols the default

mat-icon uses the classic material-icons font by default. To use Material Symbols for every icon, set the default font set class once, for example in your root component:

app.component.ts
import { Component, inject } from "@angular/core";
import { MatIconRegistry } from "@angular/material/icon";

@Component({ /* … */ })
export class AppComponent {
  constructor() {
    inject(MatIconRegistry).setDefaultFontSetClass("material-symbols-outlined");
  }
}

3. Use icons by name

app.component.html
<mat-icon>home</mat-icon>
<mat-icon fontSet="material-symbols-rounded">favorite</mat-icon>

<!-- In a button -->
<button mat-icon-button aria-label="Delete">
  <mat-icon>delete</mat-icon>
</button>

Names are the ones on each icon's page here (arrow_back, shopping_cart). The fontSet input switches one icon to another style: material-symbols-rounded or material-symbols-sharp, with the matching family in the stylesheet.

4. Fill, weight, grade and size

Material Symbols' variable settings are CSS, so set them globally or per class:

styles.css
/* styles.css */
.material-symbols-outlined {
  font-variation-settings: "FILL" 0, "wght" 400, "GRAD" 0, "opsz" 24;
}

.mat-icon.filled {
  font-variation-settings: "FILL" 1;
}

SVG icons instead of a font

To ship only the icons you use without loading a font, register SVG files with MatIconRegistry and use svgIcon. Download the SVG from any icon's page here into src/assets/icons/:

app.component.ts
import { Component, inject } from "@angular/core";
import { MatIconRegistry } from "@angular/material/icon";
import { DomSanitizer } from "@angular/platform-browser";

@Component({ /* … */ })
export class AppComponent {
  constructor() {
    const sanitizer = inject(DomSanitizer);
    inject(MatIconRegistry).addSvgIcon("home", sanitizer.bypassSecurityTrustResourceUrl("assets/icons/home.svg"));
  }
}

<!-- template (HttpClient must be provided, e.g. provideHttpClient()) -->
<mat-icon svgIcon="home"></mat-icon>

Classic Material Icons

Projects still on the older set load family=Material+Icons (or Material+Icons+Outlined, +Round, +Sharp, +Two+Tone) and write <mat-icon>home</mat-icon> with no other setup. Most names are the same in Material Symbols, so switching is usually steps 1 and 2 (see Material Icons vs. Material Symbols).

Most used icons

Each has its mat-icon code, SVG and PNG.

Frequently asked questions

Why does mat-icon show the icon's name instead of the icon?

The font isn't loaded or the class doesn't match it. Check the stylesheet link in index.html, and that the default font set class (or fontSet input) is the same family you loaded, such as material-symbols-outlined.

How do I use a filled Material Symbol in Angular?

Set the fill axis with CSS on that icon: font-variation-settings: "FILL" 1. A small class like .filled on the mat-icon keeps it reusable.

Does Angular Material include the icons?

No. @angular/material provides the mat-icon component; the icons come from the Google Fonts stylesheet or from SVG files you register.

Are Angular Material icons free?

Yes. Angular Material is MIT licensed, and Google's Material icons are released under the Apache License 2.0.