Usage
Copy a glyph for a flattened asset to paste anywhere. In a build that already has the package, import the component instead — you get tree-shaking and an editable stroke, at the cost of having to set the weight yourself.
Clicking a glyph outlines the stroke into filled geometry — the same “outline stroke”
operation as Figma or Illustrator. The result has no stroke and no
stroke-width, so scaling it can never desync the weight from the shape, and
it renders identically in tools that handle strokes badly.
<!-- copied at 24 px, where the line is 1 px -->
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
<path d="M3 12.5L21 12.5A0.5 0.5 0 0 0 21 11.5L3 11.5…Z"
fill="currentColor"/>
</svg>
The trade-off: outlining bakes the weight into the path, so an export is specific to the size it was made at. Copy at the size you intend to use. Each one is pixel-checked against the original stroke before it reaches your clipboard.
npm install iconoir-react # React
npm install iconoir # raw SVG + CSS
Components keep their stroke, so set the weight once for the whole tree.
strokeWidth is in viewBox units — multiply the line you want by
24 / size.
import { Heart, IconoirProvider } from "iconoir-react";
<IconoirProvider iconProps={{ width: 24, height: 24, strokeWidth: 1 }}>
<Heart /> {/* 1px line */}
<Heart width={64} height={64} strokeWidth={0.7875} /> {/* 2.1px line */}
</IconoirProvider>
Packages exist for React, Vue, Solid, Flutter and plain CSS — see the Iconoir docs.
docs/iconoir-data.js, generated by node tools/build-icons.mjs. Run it
with no argument to pull the latest Iconoir, or pass a version to pin one.