Icons

Glyphs drawn on one 24px grid, rendered by one component.

An icon is an asset, not a value — which is what puts this page in Foundations beside the tokens rather than among them. A token is a number or a colour you can look up; a glyph is artwork, and the only way to know whether it is the right one is to look at it.

Each glyph is a plain value you import and pass: <Icon glyph={iconSun} />. There is no registry and no name string, so a page that uses two icons ships two — see /components/icon for the API and the sizes.

The set

Every glyph the system has, in the order the module exports them — so this list cannot fall behind the code.

IconNameUsage
iconAlertAttention marker with no fixed severity
iconAlertFillAttention marker, filled — carries colour at small sizes
iconArrowDownMove down, sort descending
iconArrowLeftMove left, previous
iconArrowRightMove right, next, continue
iconArrowUpMove up, sort ascending
iconBagShopping bag, retail basket
iconBellNotifications, reminders, subscribe
iconBellRingNotifications arriving, alerting
iconBellSlashNotifications muted, unsubscribed
iconBluetoothBluetooth connectivity
iconBookmarkSave for later, unsaved
iconBookmarkFillSaved for later
iconCalendarDates, scheduling, date pickers
iconCameraTake a photo, capture, change an avatar
iconCartShopping cart, checkout
iconCheckConfirm, done, checked
iconCheckBoldThe mark inside a Checkbox — a compact, heavier tick for a 16px box
iconCheckboxCheckbox, unchecked
iconCheckboxCheckedCheckbox, checked
iconCheckboxMixedCheckbox, some but not all children selected — mixed, or DOM indeterminate
iconChevronDownOpen a dropdown, expand
iconChevronLeftBack, previous page
iconChevronRightForward, next page, drill in
iconChevronUpClose a dropdown, collapse
iconChevronsDownUpCollapse a region
iconChevronsLeftJump to first
iconChevronsRightJump to last
iconChevronsUpDownExpand a region; sortable column, unsorted
iconClockTimes, durations, timestamps
iconCloseDismiss a dialog, panel or chip
iconCodeCode sample, developer view
iconCodeAlt
iconCookieCookie consent, tracking preferences
iconCopyCopy to clipboard
iconCreditCardPayment method, billing
iconDataChartChart view
iconDataColumnsColumn view, column settings
iconDataGridGrid view, tiles
iconDataRowsRow view, list density
iconDeleteDelete permanently
iconDownloadDownload, save to device
iconDragHandleGrip for reordering rows and lists
iconEditEdit, rename, compose
iconEmailEmail, messages, contact
iconErrorError status — something is broken
iconErrorFillError status, filled
iconExternalLinkOpens in a new tab or leaves the site
iconEyeVisibility — shown, or preview
iconEyeSlashVisibility — hidden, or masked input
iconFileA document or file
iconFilterFilter a set, refine results
iconFolderA folder or collection
iconGithub
iconHeartLike, not yet liked
iconHeartFillLiked
iconHelpHelp, hints, explanatory tooltips
iconHelpFillHelp, filled
iconHomeHome, dashboard, start
iconImageAn image or media asset
iconInfoInformational status, neutral notice
iconInfoFillInformational status, filled
iconLinkCopy or anchor a link to this
iconLockLocked, private, secured
iconLockOpenUnlocked, public, editable
iconLogOutSign out, leave the session
iconMenuNavigation menu, mobile nav toggle
iconMinusRemove one, decrement, collapse
iconMinusBoldThe mixed-state bar inside a Checkbox, the tick's own weight and width
iconMoonDark mode
iconMoreHorizontalOverflow menu, in a row
iconMoreVerticalOverflow menu, in a list
iconPausePause playback
iconPlaceholderAn icon is not chosen yet — an empty slot, not a thing
iconPlayStart playback, run
iconPlusAdd one, increment, new
iconRadioRadio button, unselected
iconRadioCheckedRadio button, selected
iconRefreshReload, retry, run again
iconSearchSearch inputs, find
iconSettingsSettings, preferences, configuration
iconShareShare to another app or person
iconShieldSecurity, protection, trust
iconStarFavourite or rate, unset
iconStarFillFavourited, or a filled rating
iconStopStop playback, halt
iconSuccessSuccess status — it worked
iconSuccessFillSuccess status, filled
iconSunLight mode
iconSwapVerticalSwap two things, exchange
iconTagLabel, category, keyword
iconTagFillLabel applied
iconUploadUpload, export out of the app
iconUserA person, account, profile
iconWarningWarning status — attention, nothing broken
iconWarningFillWarning status, filled
iconWifiNetwork connected
iconWifiSlashNetwork unavailable, offline

The Usage column is the part a picture cannot carry. Three of these glyphs are variations on an exclamation mark and two are ticks; what separates them is the job, not the drawing, and that is the thing you are actually choosing between.

Pairs run outline then Fill. The filled form is not a decorative alternative — at small sizes a thin outline carries almost none of its colour, so a status glyph that has to read as amber at 16px wants the solid one. The same suffix means on across the set: iconStarFill is a favourite that has been set, iconCheckboxChecked a box that has been ticked.

Naming

Two conventions are visible in the table, and they are one rule. Where many drawings serve one role, the name is the role — delete is a trash can, an X or a minus depending on the product, so iconDelete names the job and lets the picture be whatever it is. Where one drawing serves many roles, the name is the shape — there is exactly one bell, and it means notifications, reminders, subscribe and sound-on, so iconBell names what it draws and leaves the job open.

Naming that bell iconNotification would pick one of its four jobs and be wrong about the other three. Where the mapping is one-to-one — search, settings, filter, menu, email — either name would do and convention picks.

The corollary is an accessibility rule rather than a naming one: the accessible name belongs to the control, not the glyph inside it. A button says what it does (<button aria-label="Notifications">) and the icon stays silent, so the name survives the glyph being swapped, removed, or joined by visible text. A glyph named for a role is competing with its own control for the same claim.

One deliberate exception: iconAlert carries a role word while claiming no role. A circle-and-exclamation genuinely has no fixed job, and iconExclamationCircle is accurate and unreadable.

Licence and provenance

The artwork is Boxicons v3.0.8, whose free icons are released under CC BY 4.0 — free to share and adapt, including commercially, with attribution. Boxicons’ own terms are at docs.boxicons.com/free. Their MIT licence covers their code, not the icons; the two are often confused.

This paragraph is the attribution, and it is required. Boxicons note that attribution is already embedded in each downloaded SVG — but every one of those comments was stripped when the glyphs were reduced to path data, along with the width, height and fill attributes that would have fought currentColor. Having removed the notice, the credit has to live somewhere, and a comment in a source file is not somewhere anybody looks.

Three glyphs were drawn rather than sourced. iconCheckboxMixed, because Boxicons ships a filled square where a minus is the universal mark — it is their box with the bar set at their own inset. iconDragHandle, because they have no grip: it is their apps dot on a two-by-three at their seven-unit pitch, since dropping a column from apps would have left the pair off-centre. And iconShare, taken from Material’s silhouette, which measures the same two-unit stroke at this scale, then compressed to Boxicons’ padding.

That padding is the reason the set reads evenly. Every glyph keeps its uncropped 24 viewBox, with the artwork inside roughly 20 of it — the live area, and what makes a wide glyph and a tall one appear the same size side by side. Cropping to the artwork would make each icon as large as its own bounding box, which is a different size for every one of them.