Appearance
Everything under theme: changes how labdash looks, not what it shows. Which rows appear comes from browsing, filtering and pinning inside the application.
Built-in themes
ansi deserves a note. At that tier your terminal theme supplies the actual hues, so the application looks like it belongs in your terminal. If you have a colour scheme you love, this is the setting you want.
The tokens
Components name a role, never a hex value. Colour literals live in the theme package and nowhere else, so one token change reaches every screen.
Surfaces and borders
Text
Meaning
Every value clears WCAG AA against its own background, and the ratios are computed on every commit. The lowest is text.muted at 5.09:1.
The light values are on the design page.
Your own theme
Override a token by name, in hex or as an ANSI index from 0 to 255. Anything you leave out keeps its value from name, so a two-line theme is a complete theme.
A token that does not exist, a malformed hex value, or an index outside 0 to 255 is reported at load with the file, the line, and the accepted values. A theme that drops a pair below WCAG AA still loads, and labdash theme preview shows you the ratio it produced.
To keep a theme in its own file, point at it:
That file holds the same colors map. The path is read from disk; labdash does not fetch a theme over the network.
Colour-profile detection
labdash reads your terminal's capability once at startup and renders to the tier it finds.
NO_COLOR is not negotiable
It is honoured unconditionally and no setting overrides it. --no-color does the same for one run.
Icons
No patched font is required. labdash draws status with ordinary Unicode glyphs that a terminal font has carried for years.
Every glyph is one cell and every ASCII fallback is one character, so a screen rendered in either mode has identical column boundaries. In ascii mode no byte above 0x7F reaches the screen, which is what makes labdash usable on a serial console or inside a CI log.
auto reads your locale rather than probing your font. Three glyphs — ● running, ○ created, ◐ canceling — are classed as East Asian Ambiguous, meaning one cell in most terminals and two in a terminal configured for CJK text. On a CJK locale auto chooses ascii, because a glyph drawn two cells wide where one was measured shifts every column after it.
Set icons: unicode to keep the glyphs anyway, or icons: ascii to drop them everywhere.
Density and separators
Both are global rather than per tab. Mixing row heights between tabs costs the spatial memory that makes a terminal interface fast.
Dates
Tables show relative time and the preview shows absolute time, because the two are read differently. datePattern uses Go's reference-time layout. timezone takes an IANA name and defaults to the system zone.
Motion
The spinner runs at 10 frames per second on work that is actually running. braille is ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏; ASCII mode uses |/-\ whatever the setting says.
reducedMotion: true replaces the spinner with a static marker and drops the splash gradient. State is still communicated: the task line still names what is running.
Accessibility switches
The logo
splash shows the full wordmark, compact shows the two-row mark, off shows neither. The splash appears for at most 900 ms while Home loads, is skipped by any key, and never renders when output is not a terminal, when NO_COLOR is set, or below 60 columns. It never appears in the dashboard header.
Operational switches
Theme preview
Renders every token, every status glyph and every state in your terminal, at your colour depth, with your font, which is the only place the question can be answered.