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.
| Package | 1 icon | 10 icons | per extra icon |
|---|---|---|---|
@ng-icons 35.0.1 | 6.07 KB | 9.85 KB | 0.42 KB |
@lucide/angular 1.34.0 | 9.65 KB | 11.62 KB | 0.22 KB |
| glyphflow 2.1.0 | 13.66 KB | 15.20 KB | 0.17 KB |
lottie-web 5.13.0 (light) | 48.33 KB — the player alone, before a single animation | ||
lottie-web 5.13.0 | 77.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
| Dimension | glyphflow | @lucide/angular | @ng-icons | lottie-web |
|---|---|---|---|---|
| Animation | yes | no | no | yes |
| Animation dependency | none — Web Animations API | — | — | its own player |
| Shape morphing | yes | no | no | authored, not computed |
| Server rendering | yes | yes | yes | client only |
| Angular supported | 22 | ≥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.