Icons

Lucide as the icon library, and how icons are sized and coloured.

Library

The system uses Lucide — an actively maintained fork of Feather with over 1,400 icons.

PropertyValue
LicenceISC (functionally equivalent to MIT)
Commercial usePermitted
AttributionNot required in product UI; retain the notice in source
ModificationPermitted

ISC is one of the most permissive open-source licences available, which is why it was chosen over icon sets with attribution or share-alike terms. See the legal assessment for the clearance detail.

Getting the actual icon

Every icon in this system is a verbatim Lucide path. The specimens on this page are lucide/shield, copied from the library rather than approximated — including the 1 1 0 0 1 arc segments that give Lucide its corner radius, which is exactly the character a redrawn path loses.

Take the file, do not trace it:

curl -O https://unpkg.com/lucide-static@0.544.0/icons/shield.svg

Pin the version. lucide-static@latest resolves to whatever shipped this morning, which lets an upstream release silently change a committed document. The copies used by the worked examples are vendored at brand/examples/lucide/ at a pinned version, with the upstream ISC notice beside them.

Inline the <path> and set width, height, and stroke at the use site; keep viewBox="0 0 24 24", fill="none", stroke-width="2", and both stroke-linecap and stroke-linejoin at round. Changing any of those five is what makes an icon stop looking like the rest of the set.

Sizes on the 4px grid — 16 / 20 / 24 / 32px
16
20 — default
24
32
accent — primary action
Icon with a label, and an icon button
Policy enforced

Usage

  • Stroke width 2, matching Lucide’s default. Do not thin or thicken strokes to “match” a layout.
  • Size on the 4px grid: 16, 20, 24, 32px. 20px is the default for inline UI.
  • Colour follows text. An icon beside a label takes the label’s colour. Standalone icons carrying meaning take --color-secondary; an icon marking the primary action takes the accent.
  • Icons are not decoration. Every icon must carry meaning the label does not already carry, or be marked aria-hidden="true".
Do

Pair icons with text labels wherever the meaning is not universally understood. Give standalone icon buttons an accessible name.

Don't

Mix icon sets, recolour icons to arbitrary hues, or use an icon as the only indicator of state.