Lucide, at 1.75, on the size ladder.
One icon family, one stroke weight, six sanctioned sizes. Icons inherit text color and never carry meaning alone. Status icons always pair with their literal status word. No emoji in product chrome.
Six sizes, snapped to the type scale.
A 14px label gets a 14px icon. A 16px label gets a 16px icon. Picking 15 reads as guesswork.
Where each size lives.
Four canonical roles. Anything outside this set should justify itself.
Inside a table cell or a status line.
Nav items, sub-panel headers, button-with-icon labels.
Always paired with a label, never an icon-only primary.
Empty-state header, marketplace card icon.
Icon plus the literal status word, always.
Color is never the only signal. An operator with red-green colorblindness reads the word first.
Emoji-as-icon, mixed stroke, decorative tint.
Sparkles emoji next to an AI label. Mailchimp territory.
Stroke 1 next to stroke 2. Reads as accidental.
A green check inside body copy where it carries no meaning.
Six rules for icons that disappear into the work.
Lucide only.
One icon family across the product. Mixing Heroicons, Feather, or Phosphor is the surest tell of a half-built design system.
Stroke 1.75.
Every Lucide icon ships with strokeWidth={1.75}. Never 1 (too thin against Glacier), never 2 (too aggressive next to General Sans medium).
Size ladder.
12 / 14 / 16 / 18 / 20 / 24 px, snapped to the type scale. Picking 15 or 17 is the SaaS-template tell.
Icons inherit text color.
Use currentColor from the parent. Tinted decorative icons (a green check inside a body paragraph) are forbidden. Color carries meaning only inside status pills.
Status icon + word.
If an icon carries status, the literal status word travels with it. Color is never the only signal. Operators read words first.
No emoji.
Sparkles, fire, rockets, party-poppers are forbidden in product chrome. The Lucide Sparkles glyph (or no glyph) carries AI moments. Emoji reads as Mailchimp.
The one AI icon that ships.
A single Lucide Sparkles, in arc-soft, only on a mesh surface. Anywhere else, the AI label travels without an icon.