Icons

Koala Icons is our own stroke set, drawn on one 24px grid by one spec. Search it, copy any icon as SVG or JSX, and import it as a plain React component.

Koala Icons#

370 icons in 21 categories, and growing. Search by name, tag or category, and switch to Fill to see the solid weight. Hover an icon and use Copy SVG to paste the master into Figma, Copy JSX for the import and the element, or Download SVG for a file.

370 of 370

address-book
airplane-tilt
ambulance
app-window
archive
arrow-bend-up-left
arrow-clockwise
arrow-counter-clockwise
arrow-left
arrow-line-down
arrow-line-left
arrow-line-right
arrow-line-up
arrow-right
arrow-square-out
arrow-u-up-left
arrow-u-up-right
arrow-up
arrow-up-right
arrows-clockwise
arrows-down-up
arrows-in-simple
arrows-left-right
arrows-out
arrows-out-cardinal
arrows-out-line-vertical
arrows-out-simple
article
at
bank
barcode
battery-high
battery-medium
bell
bell-slash
bicycle
binoculars
boat
book-open
bookmark-simple
bounding-box
bowl-food
bowl-steam
brain
bread
briefcase
broadcast
broom
browser
bug
buildings
cake
calculator
calendar
calendar-check
camera
car
cards
caret-circle-down
caret-circle-up-down
caret-double-down
caret-down
caret-right
caret-up
caret-up-down
carrot
castle-turret
cell-signal-high
certificate
chart-bar
chart-donut
chart-line
chart-line-up
chart-pie-slice
chat-circle
chat-circle-dots
chats-circle
check
check-circle
check-square
checks
cherries
circle
circle-dashed
circle-half
circle-notch
circles-four
clipboard-text
clock
clock-counter-clockwise
cloud
code
code-block
coffee
coins
columns
command
compass
confetti
cookie
copy
corners-in
corners-out
credit-card
crop
crown
cube
currency-dollar
currency-eur
currency-gbp
cursor
cursor-click
database
desktop
device-mobile
device-tablet
devices
dots-nine
dots-six-vertical
dots-three
dots-three-vertical
download-simple
egg
egg-crack
envelope-open
envelope-simple
export
eye
eyedropper
file
file-arrow-up
file-code
file-css
file-image
file-magnifying-glass
file-pdf
file-plus
file-png
file-svg
file-text
file-ts
file-tsx
file-x
files
film-strip
fingerprint
fire
fire-truck
first-aid-kit
fish
flag
flag-banner
flask
floppy-disk
folder-lock
folder-open
folder-plus
folder-simple
fork-knife
frame-corners
funnel
gauge
gavel
gear-six
gift
git-branch
git-commit
git-merge
git-pull-request
globe
graduation-cap
grid-four
grid-nine
hamburger
hand
hand-grabbing
hand-pointing
hand-waving
handbag
handshake
hash
headphones
heart
house
ice-cream
identification-card
image
info
kanban
key
keyboard
knife
laptop
lifebuoy
lightbulb
lightning
line-segment
link
link-break
list
list-bullets
list-checks
list-magnifying-glass
list-numbers
lock
magic-wand
magnet
magnifying-glass
magnifying-glass-plus
map-pin
map-trifold
markdown-logo
megaphone
microphone
microphone-slash
minus
money
monitor
moon
moon-stars
mouse-right-click
music-note
newspaper
note-pencil
notebook
option
package
paint-brush
palette
paper-plane-tilt
paperclip
paragraph
password
path
pause
pen-nib
pencil-simple
percent
phone
picture-in-picture
pill
pizza
plant
play
play-circle
plugs
plus
plus-minus
police-car
polygon
power
presentation-chart
printer
prohibit
pulse
push-pin
puzzle-piece
qr-code
question
quotes
radio
radio-button
ranking
receipt
record
repeat
resize
robot
rocket
rows
ruler
scales
scissors
scroll
seal-check
selection
shapes
share-network
shield-check
shopping-bag
shopping-cart
shuffle
sidebar
sign-in
sign-out
signature
signpost
siren
skip-back
skip-forward
sliders
sliders-horizontal
slideshow
smiley
smiley-sad
sneaker
sort-ascending
sparkle
speaker-high
speaker-low
speaker-slash
speaker-x
square
square-half
square-split-horizontal
squares-four
stack
stamp
star
steps
sticker
stop
storefront
strategy
suitcase-simple
sun
swap
swatches
t-shirt
table
tabs
tag
target
television
terminal-window
text-aa
text-align-center
text-align-justify
text-align-left
text-align-right
text-b
text-h-one
text-indent
text-italic
text-strikethrough
text-t
text-underline
textbox
thumbs-down
thumbs-up
timer
toggle-left
toggle-right
toolbox
translate
trash
tray
tree-structure
trend-down
trend-up
truck
upload-simple
user
user-circle
user-gear
user-plus
users
users-three
video-camera
wallet
warning
warning-circle
watch
waveform
wifi-slash
wind
wine
wrench
x
x-circle

Install and import#

Install the koala-icons package and import each icon by name. Every icon is a plain function with no context and no client hooks, so it renders in Server Components with no "use client" boundary. Import optical.css once, in your root layout, for the small optical size.

TerminalTSX
npm install koala-icons
app/layout.tsxTSX
import "koala-icons/optical.css"
example.tsxTSX
import { Bell, ArrowRight } from "koala-icons"<Bell /><ArrowRight className="size-5" />// One module per icon, for setups that don't tree-shake a barrelimport { Bell } from "koala-icons/icons/bell"

Sizes#

An icon is 1em by default, so it follows the text beside it. Set a size with Tailwind's size-*, or the size prop in pixels. Pick it by context: 16 in buttons, 20 in rows led by a text label, 14 in chips. Button, Input and Badge size an unclassed icon for you.

size-3.5

14px

size-4

16px

size-5

20px

size-6

24px

Weights#

Two weights: regular, the outline, and fill, the solid version for selected and status states. Fill is derived from the outline, so the two never drift. Only icons with a body get it; a line glyph like a check or an arrow keeps its outline.

Bellregular · fill
Starregular · fill
Houseregular · fill
Lockregular · fill
CheckCircleregular · fill
Checkregular · fill
example.tsxTSX
<Star />                  {/* regular, the default */}<Star weight="fill" />    {/* selected, active */}<Check weight="fill" />   {/* no body: stays an outline */}

Optical sizes#

At 16px and below the stroke gets heavier, and icons with fine inner marks swap to a simpler small drawing. It happens by itself, from the size each icon renders at, once optical.css is imported. Without it, the large drawing shows at every size.

Trash

House

Info

Copy

Color#

Icons draw in currentColor, so a text-* utility on the icon or any ancestor colors it. Use semantic tokens only, never a raw value, so the icon re-themes across all four themes.

foreground
muted-fg
brand
destructive
success
info

Accessibility#

An icon is decorative by default: aria-hidden="true", because the text beside it already says what it means. An icon-only control names the control, not the icon. An icon that carries meaning on its own takes title or aria-label, which gives it role="img".

a11y.tsxTSX
// Decorative: the label says it, the icon is skipped<Button>  Continue <ArrowRight /></Button>// Icon-only: name the button, not the icon<Button iconOnly aria-label="Notifications">  <Bell /></Button>// Meaningful on its own: give the icon a name<CheckCircle title="Verified" className="text-success" />// Avoid: a label on the icon inside a labelled control is read twice<Button aria-label="Next step">  <ArrowRight aria-label="Next step" /></Button>

In context#

Button and Badge size an unclassed icon to their own step, so composing needs no size class: 16px in a button, 14px in a badge.

Deployed 3 new
usage.tsxTSX
import { ArrowRight, Bell, Check, Plus } from "koala-icons"import { Button } from "@/components/ui/button"import { Badge } from "@/components/ui/badge"<Button><Plus /> New project</Button><Button variant="outline">Continue <ArrowRight /></Button><Badge variant="success"><Check /> Deployed</Badge><Badge variant="info"><Bell weight="fill" /> 3 new</Badge>

Koala components currently ship Phosphor; Koala Icons will replace it.