CUI

Components / Basics

Icons

The Lucide icon set embedded as a font, used by name through CUI_ICON_* constants.

Functions: cui_icon

Icons

Usage

CUI embeds 168 icons from Lucide (ISC license). Each icon is a UTF-8 string, so it works on its own or inside any label:

cui_icon(ui, CUI_ICON_ZAP, 16, CUI_COLOR_ACCENT);
cui_button(ui, "New", .icon = CUI_ICON_PLUS);
cui_text(ui, CUI_ICON_CHECK " Saved");          /* inline, centered on the text */

## Built-in icons

CUI_ICON_CHECKCUI_ICON_XCUI_ICON_PLUSCUI_ICON_MINUS
CUI_ICON_CHEVRON_DOWNCUI_ICON_CHEVRON_UPCUI_ICON_CHEVRON_LEFTCUI_ICON_CHEVRON_RIGHT
CUI_ICON_CHEVRONS_UP_DOWNCUI_ICON_CHEVRONS_LEFTCUI_ICON_CHEVRONS_RIGHTCUI_ICON_SEARCH
CUI_ICON_SETTINGSCUI_ICON_USERCUI_ICON_USERSCUI_ICON_HOUSE
CUI_ICON_BELLCUI_ICON_MAILCUI_ICON_CALENDARCUI_ICON_CLOCK
CUI_ICON_TRASH_2CUI_ICON_PENCILCUI_ICON_COPYCUI_ICON_CHECK_CHECK
CUI_ICON_EYECUI_ICON_EYE_OFFCUI_ICON_LOCKCUI_ICON_UNLOCK
CUI_ICON_STARCUI_ICON_HEARTCUI_ICON_INFOCUI_ICON_CIRCLE_ALERT
CUI_ICON_TRIANGLE_ALERTCUI_ICON_CIRCLE_CHECKCUI_ICON_CIRCLE_XCUI_ICON_CIRCLE_HELP
CUI_ICON_ELLIPSISCUI_ICON_ELLIPSIS_VERTICALCUI_ICON_MENUCUI_ICON_PANEL_LEFT
CUI_ICON_SUNCUI_ICON_MOONCUI_ICON_MONITORCUI_ICON_DOWNLOAD
CUI_ICON_UPLOADCUI_ICON_FILECUI_ICON_FOLDERCUI_ICON_FOLDER_OPEN
CUI_ICON_IMAGECUI_ICON_LINKCUI_ICON_EXTERNAL_LINKCUI_ICON_LOG_OUT
CUI_ICON_LOG_INCUI_ICON_ARROW_RIGHTCUI_ICON_ARROW_LEFTCUI_ICON_ARROW_UP
CUI_ICON_ARROW_DOWNCUI_ICON_ARROW_UP_RIGHTCUI_ICON_REFRESH_CWCUI_ICON_ROTATE_CCW
CUI_ICON_FILTERCUI_ICON_SLIDERS_HORIZONTALCUI_ICON_GRIP_VERTICALCUI_ICON_LAYOUT_DASHBOARD
CUI_ICON_CHART_BARCUI_ICON_CHART_LINECUI_ICON_CHART_PIECUI_ICON_INBOX
CUI_ICON_SENDCUI_ICON_MESSAGE_SQUARECUI_ICON_BOOKMARKCUI_ICON_TAG
CUI_ICON_ZAPCUI_ICON_SPARKLESCUI_ICON_SHIELDCUI_ICON_CREDIT_CARD
CUI_ICON_GLOBECUI_ICON_MAP_PINCUI_ICON_PHONECUI_ICON_PLAY
CUI_ICON_PAUSECUI_ICON_SQUARE_TERMINALCUI_ICON_CODECUI_ICON_TERMINAL
CUI_ICON_COMMANDCUI_ICON_KEYBOARDCUI_ICON_SAVECUI_ICON_SHARE_2
CUI_ICON_CLOUDCUI_ICON_DATABASECUI_ICON_SERVERCUI_ICON_CPU
CUI_ICON_WIFICUI_ICON_BATTERYCUI_ICON_VOLUME_2CUI_ICON_VOLUME_X
CUI_ICON_MICCUI_ICON_CAMERACUI_ICON_VIDEOCUI_ICON_MUSIC
CUI_ICON_PALETTECUI_ICON_TYPECUI_ICON_BOLDCUI_ICON_ITALIC
CUI_ICON_UNDERLINECUI_ICON_ALIGN_LEFTCUI_ICON_LISTCUI_ICON_LIST_CHECKS
CUI_ICON_GRID_3X3CUI_ICON_MAXIMIZE_2CUI_ICON_MINIMIZE_2CUI_ICON_MOVE
CUI_ICON_ZOOM_INCUI_ICON_ZOOM_OUTCUI_ICON_UNDO_2CUI_ICON_REDO_2
CUI_ICON_LOADER_CIRCLECUI_ICON_CIRCLE_DOTCUI_ICON_DOTCUI_ICON_PLUS_CIRCLE
CUI_ICON_PACKAGECUI_ICON_BOXCUI_ICON_LAYERSCUI_ICON_GIT_BRANCH
CUI_ICON_ACTIVITYCUI_ICON_TRENDING_UPCUI_ICON_TRENDING_DOWNCUI_ICON_DOLLAR_SIGN
CUI_ICON_SHOPPING_CARTCUI_ICON_WALLETCUI_ICON_BRIEFCASECUI_ICON_BUILDING_2
CUI_ICON_FLAGCUI_ICON_GIFTCUI_ICON_AWARDCUI_ICON_THUMBS_UP
CUI_ICON_THUMBS_DOWNCUI_ICON_SMILECUI_ICON_AT_SIGNCUI_ICON_HASH
CUI_ICON_PERCENTCUI_ICON_PAPERCLIPCUI_ICON_PRINTERCUI_ICON_SCISSORS
CUI_ICON_CLIPBOARDCUI_ICON_FILE_TEXTCUI_ICON_NOTEBOOK_PENCUI_ICON_SQUARE_PEN
CUI_ICON_BADGE_CHECKCUI_ICON_CIRCLE_USERCUI_ICON_USER_PLUSCUI_ICON_KEY_ROUND
CUI_ICON_FINGERPRINTCUI_ICON_BUGCUI_ICON_ROCKETCUI_ICON_TARGET
CUI_ICON_COMPASSCUI_ICON_HISTORYCUI_ICON_ARCHIVECUI_ICON_CIRCLE
CUI_ICON_SQUARE_CHECKCUI_ICON_SQUARECUI_ICON_SKIP_BACKCUI_ICON_SKIP_FORWARD
CUI_ICON_SHUFFLECUI_ICON_REPEATCUI_ICON_RADIOCUI_ICON_AUDIO_LINES

## Using any Lucide icon

The embedded font is a subset. Load the full Lucide font (the lucide.ttf from the lucide-static package) as the icon role and use any codepoint from its codepoints.json:

cui_font all = cui_font_load_file(ui, "lucide.ttf");
cui_font_set_role(ui, CUI_FONT_ICONS, all);
cui_icon(ui, "\xee\x80\x83", 16, CUI_COLOR_FOREGROUND);   /* U+E003 as UTF-8 */

To change the embedded set, edit the list in tools/build_fonts.py and run:

python3 tools/build_fonts.py --lucide path/to/lucide.ttf --codepoints path/to/codepoints.json

## Other icon fonts

Any icon font works the same way: load it, make it the icon role (or a fallback of the body font), and use its codepoints as UTF-8 strings.

Related

  • Badge, avatar and keycap: Small labels: a badge for a status or a count, an avatar for a person, and a keycap for a keyboard key.
  • Text: Headings, body text, labels, links and inline code, with wrapping that avoids a lone last word.
  • Card and metric: A card is a surface that groups content. A metric shows one number with its change and an optional sparkline.
  • Image: Shows a picture loaded from a file or made from your own pixels.