Measured, not claimed. Numbers below come from a real production build, and the method is written down so you can redo it.

Weight

Net cost over an empty Angular 22 app, gzip, entry chunks only. Measured on 2026-08-24 against the versions listed.

Package1 icon10 iconsper extra icon
@ng-icons 35.0.16.07 KB9.85 KB0.42 KB
@lucide/angular 1.34.09.65 KB11.62 KB0.22 KB
glyphflow 2.1.013.66 KB15.20 KB0.17 KB
lottie-web 5.13.0 (light)48.33 KB — the player alone, before a single animation
lottie-web 5.13.077.14 KB — the player alone, before a single animation

Read the last column, not the first. glyphflow has the highest floor — it ships an animation engine — and the lowest slope: each extra animated icon costs less than each extra static icon from the others. The lines cross around 30 icons against @ng-icons and around 80 against @lucide/angular. Below that, they are lighter, and this page says so.

What you get for it

Dimensionglyphflow@lucide/angular@ng-iconslottie-web
Animationyesnonoyes
Animation dependencynone — Web Animations APIits own player
Shape morphingyesnonoauthored, not computed
Server renderingyesyesyesclient only
Angular supported22≥17≥22

How this was measured

A clean app from ng new --minimal on Angular 22, one component importing one icon from each library, ng build --configuration production, gzip of the entry chunks, minus the same build with no icon library at all. Same harness for every row.

An earlier attempt measured the published bundles directly with esbuild instead of building the app. It reported 241 KB for one @lucide/angular icon — 25× off. Angular's own optimizer prunes it fine; esbuild could not, because that package ships no @__PURE__ annotations. The wrong number was never published, and this note is here so nobody re-derives it that way.