Skip to main content

Theme reference

Theme Format

  • name is required, must be unique, and must not contain /.
  • vars is optional. Define reusable colors here, then reference them in colors or workingIndicator.
  • colors must define all 51 required tokens. scrollbarThumb is optional and falls back to selectedBg when omitted. searchMatchBg and searchMatchText remain accepted for older theme files but are unused.
  • workingIndicator is optional. It can override any of the six tones in the outward half of the ordinary ∀ ramp. Atomic derives omitted tones from selected background, accent, and text roles, then mirrors the palette back after peak.
    • Explicit numeric values from 0 through 255 remain exact terminal palette indices.
    • When an index from 0 through 15 seeds an omitted tone, Atomic mixes from its built-in approximation of the common ANSI RGB value. The terminal still controls the explicit index’s actual appearance.
    • Both explicit and derived tones update on theme hot reload.
The $schema field enables editor auto-completion and validation against the theme JSON schema. Atomic itself rejects theme files with unknown top-level fields or unknown properties under colors, workingIndicator, or export; define reusable custom colors under vars instead.

Color Tokens

Every theme must define all 51 required color tokens. The optional tokens preserve compatibility with themes written before they existed: scrollbarThumb and unused searchMatchBg fall back to selectedBg, and unused searchMatchText falls back to text.

Core UI (11 colors)

Backgrounds & Content (11 required, 3 optional)

Markdown (10 colors)

Tool Diffs (3 colors)

Syntax Highlighting (9 colors)

Thinking Level Borders (6 colors)

Editor border colors indicating thinking level (visual hierarchy from subtle to prominent):

Bash Mode (1 color)

HTML Export (optional)

The export section controls colors for /export HTML output. If omitted, colors are derived from userMessageBg.

Color Values

Five formats are supported:

256-Color Palette

  • 0-15: Basic ANSI colors (terminal-dependent)
  • 16-231: 6×6×6 RGB cube (16 + 36×R + 6×G + B where R,G,B are 0-5)
  • 232-255: Grayscale ramp

Terminal Compatibility

Atomic uses 24-bit RGB colors. Most modern terminals support this (iTerm2, Kitty, WezTerm, Windows Terminal, VS Code). For older terminals with only 256-color support, Atomic falls back to the nearest palette color, which turns a slightly tinted background into a gray. The tool status backgrounds toolPendingBg, toolSuccessBg, and toolErrorBg keep their hue instead: each uses the nearest palette color whose strongest RGB channel is the same, so a green-tinted success background stays green. Give these three tokens different strongest channels (for example blue, green, and red tints) to keep them distinguishable in 256-color terminals, or set a palette index directly. Check truecolor support: