Five weights, one grid
Thin, light, regular, bold and heavy — drawn on the same 24-pixel grid so a row of mixed weights still lines up.
Iconhaus keeps a single, consistent library — five stroke weights, one grid — and serves every glyph content-addressed from the region closest to your users. Import a component or hotlink an SVG; the cache does the rest.
npm i @iconhaus/react import { Glyph } from "@iconhaus/react" <Glyph name="compass" weight="bold" size={24} />
The parts a design system needs and nobody enjoys wiring up — weights, delivery, tree-shaking and a version you can pin.
Thin, light, regular, bold and heavy — drawn on the same 24-pixel grid so a row of mixed weights still lines up.
Every glyph is content-addressed and cached immutably at 38 regions. Change nothing on your side to get a nearby copy.
Pull a single component and ship only the glyphs you use, or hotlink the raw SVG when a build step is overkill.
Each release is frozen. Upgrade when you choose; a pinned tag never changes shape under you.
Ask for just the glyphs you actually use and we build a subset for you. The build is asynchronous — poll it and pull each part as it lands.
# subsets are built asynchronously — poll until the parts are ready GET /api/v1/subsets/9f2c1ab4e07d4c8fa1b3d65e08c47a12 200 OK · cache-control: no-store { "state":"building", "parts":12, "ready":7 } # then pull each part as it lands GET /api/v1/subsets/9f2c1ab4e07d4c8fa1b3d65e08c47a12/7
Every glyph passes the same grid, keyline and optical-weight checks before it ships. No stray 23-pixel outlier.
Median fetch of 11 ms across 38 regions, measured from the browser, not from our own probes.
Everything the site does is a documented endpoint. Packages for React, Vue, Svelte and plain SVG.
The free tier covers 50 GB of delivery and the whole library, no attribution required.
Get an API key Read the docs