107,705 icons from 40 libraries, searchable together. Register what you use, ship nothing you don't.
Mix Heroicons, Lucide, Material and 37 more in the same template. They all render through a single <ng-icon>.
Each set is its own package and each icon its own export. Register icons with provideIcons and only those reach your bundle.
Inputs on the component, inheriting font size and text colour by default. strokeWidth applies to sets drawn with strokes.
Resolve icons at runtime from a URL or generate them on the fly. Loaders run in the injection context, and withCaching() stops repeat requests.
Standalone components, signals and the current release line. Register icons with provideIcons anywhere providers are accepted.
Set the svg input to any SVG string and skip registration entirely. Strict CSP is supported too.
Icons are plain constants. Import them where you need them and the bundler drops the rest. No sprite sheets, no font files, no runtime registry to maintain.
import { NgIcon, provideIcons } from '@ng-icons/core'; import { remixSearchLine } from '@ng-icons/remixicon'; @Component({ imports: [NgIcon], providers: [provideIcons({ remixSearchLine })], template: `<ng-icon name="remixSearchLine" />`, }) export class App {}