# Themes

Partial JSON themes for the TUI.

Theme files are plain JSON and deliberately partial. A file can be metadata-only, color-only, spinner-only, syntax-only, or a complete light/dark palette. Missing values inherit from zot's built-in theme for the detected terminal background.

```json title="$ZOT_HOME/themes/custom-spinner.json"
{
  "name": "custom-spinner",
  "description": "Only changes the busy spinner.",
  "spinner_frames": ["◢", "◣", "◤", "◥"],
  "spinner_messages": ["working"],
  "spinner_interval_ms": 120
}
```

Put user themes in `$ZOT_HOME/themes/*.json`. Open `/settings`, select color theme, and zot repaints the running TUI without restarting. Build one visually with the [Theme builder](/themes).

Extensions can ship themes too. A theme-only extension needs only an `extension.json` plus `theme.json` (or `themes/theme.json`); no executable is required, and zot does not copy the theme into your user theme directory.

Dark-only and light-only themes are valid: if the current terminal mode is missing, zot applies the defined mode's overrides on top of the built-in default for the current mode. Use `thinkingMax` or `thinking_max` (names retained for compatibility) to set the status color shown while the opt-in `max` reasoning level is active.
