The system uses Lucide as the primary icon library. Lucide is a fork of Feather Icons with additional icons and active maintenance.

Lucide icons

Load Lucide from the CDN or install via npm:

<!-- CDN -->
<script src="https://unpkg.com/lucide@latest"></script>
# npm
npm install lucide

Default style

AttributeValue
Stroke weight1.75
Default size20px
Size variants16px, 20px, 24px
16px
20px (default)
24px

Icon + button pairings

Common icons

Common set for product UI previews. Based on Lucide icons with 1.75 stroke and 20px default size.

arrow-right
arrow-right
compass
compass
calendar
calendar
users
users
sparkles
sparkles
message
message
settings
settings
book
book
pencil
pencil
list
list
trend
trend
folder
folder
check
check
map
map
coaching
coaching
search
search

Usage guidelines

Icon + text alignment. Icons sit inline with text at the same baseline. Use display: inline-flex and align-items: center for proper vertical alignment.

Color. Icons inherit the current text color. No special color classes needed.

Spacing. Use a 6-8px gap between icon and text in buttons and links.

Accessibility. Decorative icons should have aria-hidden="true". Interactive icons need aria-label or visible text.

<!-- Decorative icon -->
<button class="of-btn of-btn--primary">
  <svg width="16" height="16" aria-hidden="true">...</svg>
  Save
</button>

<!-- Icon-only button (needs label) -->
<button class="of-btn of-btn--ghost" aria-label="Close">
  <svg width="20" height="20" aria-hidden="true">...</svg>
</button>

Icon library alternatives

While Lucide is the primary choice, you may use:

  • Heroicons — Tailwind’s sibling project, similar stroke style
  • Radix Icons — Smaller set, same aesthetic

Avoid mixing multiple icon libraries on the same page. Pick one and stay consistent.

Icon resources