$ rezi
Styling

Icons

Rezi includes a small icon registry for common UI glyphs. Icons are rendered as text, so they work in any terminal.

Rezi includes a small icon registry for common UI glyphs. Icons are rendered as text, so they work in any terminal.

Glyph resolution is deterministic and stability-first:

  • Rezi prefers single-cell, non-emoji primary glyphs when available.
  • If a primary glyph is risky (emoji/ZWJ/ambiguous width), Rezi uses the ASCII fallback.
  • Layout width is measured from the resolved glyph, not from the icon key alone.

Usage

import { ui, rgb } from "@rezi-ui/core";

ui.icon("status.check");
ui.icon("arrow.right", { style: { fg: rgb(0, 255, 0) } });
ui.icon("ui.search", { fallback: true });

Categories

Icon paths are grouped by category:

  • file.* — file/folder
  • status.* — status (check, cross, warning, etc.)
  • arrow.* — arrows/chevrons
  • git.* — git status
  • ui.* — common UI actions (close, menu, play, etc.)

Fallback behavior

Each icon has:

  • a primary glyph (may be Unicode and may be intentionally unset for some icons)
  • an ASCII fallback
  • deterministic risk-aware resolution (primary vs fallback) based on width stability

Use fallback: true to force the ASCII-safe glyph:

import { ui } from "@rezi-ui/core";

ui.icon("git.modified", { fallback: true });
ui.icon("file.folder", { fallback: true });

If the primary glyph is unset ((none) in the tables below), you should use fallback: true until a glyph set is provided.

Width semantics

Layout consumes the resolved glyph width at runtime. This means fallback glyphs can be wider than one cell (for example, ui.pause may resolve to ||, width 2 in deterministic mode).

The catalog tables below show nominal single-glyph width intent, not a hard layout contract. For exact runtime behavior, rely on resolved glyph measurement.

Icon registry

The following tables list every registered icon path, its primary glyph, and its fallback.

file.*

Icon pathGlyphFallbackNominal Width
file.file(none)[]1
file.fileCode(none)<>1
file.fileText(none)==1
file.fileConfig(none)@@1
file.fileBinary(none)##1
file.folder(none)[+]1
file.folderOpen(none)[-]1
file.folderGit(none)[g]1

status.*

Icon pathGlyphFallbackNominal Width
status.check[x]1
status.cross[X]1
status.warning[!]1
status.info[i]1
status.error[E]1
status.question?[?]1
status.pending[ ]1
status.success[*]1
status.dot*1
status.circleo1
status.circleFilled*1
status.square[ ]1
status.squareFilled[x]1

arrow.*

Icon pathGlyphFallbackNominal Width
arrow.up^1
arrow.downv1
arrow.left<1
arrow.right>1
arrow.upDown``
arrow.leftRight-1
arrow.chevronUp^1
arrow.chevronDownv1
arrow.chevronLeft<1
arrow.chevronRight>1
arrow.triangleUp^1
arrow.triangleDownv1
arrow.triangleLeft<1
arrow.triangleRight>1
arrow.arrowReturn<-1
arrow.arrowTab->1

git.*

Icon pathGlyphFallbackNominal Width
git.modifiedM1
git.added++1
git.deleted-1
git.renamedR1
git.copiedC1
git.untracked??1
git.ignoredI1
git.conflict!!1
git.stagedS1
git.branch(none)*1
git.commit(none)o1
git.merge(none)Y1
git.stash(none)$1

ui.*

Icon pathGlyphFallbackNominal Width
ui.menu=1
ui.close×x1
ui.search(none)/1
ui.settings(none)*1
ui.edite1
ui.copyc1
ui.paste(none)p1
ui.cut(none)x1
ui.save(none)S1
ui.undou1
ui.redor1
ui.refreshR1
ui.sync(none)~1
ui.lock(none)#1
ui.unlock(none)-1
ui.visible(none)o1
ui.hidden(none)-1
ui.expand++1
ui.collapse-1
ui.filter(none)Y1
ui.sort(none)^v1
ui.pin(none)P1
ui.bookmark(none)B1
ui.star*1
ui.starEmptyo1
ui.heart<31
ui.heartEmpty<>1
ui.home(none)~1
ui.terminal(none)>_1
ui.debug(none)D1
ui.play>1
ui.pause`
ui.stop[]1
ui.record()1

On this page