Rove Rev 0.9.198 · Sheet 3 of 4 GitHub –
Appearance

Three in the box, ten more a command away.

Every panel below is drawn from a real theme file, the same JSON Rove loads at boot, not a screenshot someone re-tinted by hand. Pick one of the three bundled ones in Settings → General → Theme, install any of the rest with one command, or write your own. A theme is one JSON file, and there is no registry to get into.

Subject of drawing
One finish
=1theme
+2defs
+3$schema
See Fig. 3-21 required
Specimen, three coats

Note 1 — Finish schedule All finishes, dark specimen

Schedule of finishes — 3 bundled, 10 hosted
Code Finish Class Slots Ground Source Specimen — ground · panel · border · text · primary · accent · success · warning · error
B-01claudeBundled · default54#141413in the box
B-02conductorBundled35#0a0a0ain the box
B-03tokyonightBundled50#1a1b26in the box
H-01catppuccinHosted53#1e1e2erove.run/themes
H-02draculaHosted50#282a36rove.run/themes
H-03everforestHosted53#2d353brove.run/themes
H-04gruvboxHosted53#1d2021rove.run/themes
H-05kanagawaHosted53#1f1f28rove.run/themes
H-06nordHosted50#2E3440rove.run/themes
H-07opencodeHosted50#161616rove.run/themes
H-08osaka-jadeHosted50#111c18rove.run/themes
H-09rose-pineHosted53#191724rove.run/themes
H-10solarizedHosted53#002b36rove.run/themes

Specimens are the specified values, resolved out of each finish's own JSON in dark mode — the hex is the spec, not decoration. SLOTS is how many the file fills; the rest fall through. Hosted source is rove.run/themes/<finish>.json · see revision table. Total in schedule — 13 finishes13 themes3 bundled + 10 hosted

1.0 · Bundled

Ships with Rove.

Rove keeps its bundled set deliberately small. Open Settings with ctrl+, and pick one; nothing to install. Each preview paints the sidebar, the selected task, and a diff with that theme's own slots, so what you see is the contrast you'll actually get. Every theme also defines a light mode; the previews show dark.

2.0 · Downloadable

Ten more, one command away.

These live here as plain JSON instead of inside the binary, which is all a theme ever is. Copy the command, run it, restart Rove. Several of them shipped bundled in earlier versions; nothing changed about them except where they're stored.

Note 2 — Specimens, bundled B-01 to B-03 · no install

B-01claudedefault

Warm graphite and terracotta. Rove's own identity, matched to the Claude Code palette.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
B-02conductormono

Near-black and near-white. No hue competes with your diff. The one to reach for on a projector.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
B-03tokyonightcool

Indigo night with a coral accent. Pairs with the tokyonight setup you probably already run in nvim.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs

Three entries, one markup block, one rule set. The only thing that differs between them is the thirteen custom properties on the card, taken from that finish's own file. A row is selected by filling it with primary and setting its text to selectedListItemText, which every one of the thirteen resolves to the ground — which is why a finish that spends primary on near-white reads as a plain inversion.

Note 3 — Specimens, hosted H-01 to H-10 · one command

rove theme add https://rove.run/themes/<name>.json

H-01catppuccinpastel

Soft pastels on a cool grey base, mauve signature, nothing shouts. Ships Mocha for dark and Latte for light.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-02draculaclassic

The one everybody already has muscle memory for. Highest-saturation set here.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-03everforestforest

Desaturated forest greens, tuned for long sessions on a warm background.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-04gruvboxretro

Retro groove: warm browns under a signal orange. The highest-contrast warm set, and the one most people mean by "terminal colors".

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-05kanagawaukiyo-e

Inspired by Katsushika Hokusai's wave: ink blues over sumi black, lotus for light.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-06nordcool

Arctic blue-grey, low contrast by design. The calmest option for long sessions.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-07opencodewarm dark

Neutral charcoal with a sand accent. Familiar if you came from opencode.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-08osaka-jadehigh contrast

Deep jade ground with a mint signal color. The most opinionated set, and the loudest running indicator.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-09rose-pinemuted

Low-saturation iris and rose on near-black plum. Quiet without going grey; Dawn is the light side.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs
H-10solarizedclassic

The 2011 original that started precision terminal palettes. Both sides share one accent set.

PROJECTS
● rove
TASKS
fix/auth-retry
feat/theme-picker
chore/bump-deps
fix/auth-retry● running
+ retry on 401 once
- throw immediately
return session
! 2 files unstaged
3 tabs

Each entry carries its own supply line. Click it to take the command.

Note 4 — Where a slot lands Fig. 3-1

fix/auth refactor docs 3 tasks primary Selected row fill border Every frame rule text Body and task rows accent Called-out value background Everything behind 25 slots resolved · 2 roots
Fig. 3-1 — Slot to surface · Hatched face = a separate ground from the body

A slot is a named place in the interface, not a colour with a mood. Fill primary and you have changed the selected row, the focused pane indicator and the markdown headings at once, because they all read the same slot.

You do not have to fill every slot. The resolver guarantees twenty-five of them, and anything left out falls through to a neighbour: borderActive → border → text, backgroundPanel → background, diffAdded → success. Only text and background have nothing left to fall to.

groundbackground · backgroundPanel · backgroundElement · backgroundMenu · backgroundDialog
letteringtext · textMuted
ruleborder · borderActive · borderSubtle
brandprimary · secondary · accent
statesuccess · warning · error · info
diffdiffAdded · diffRemoved · diffContext · and their grounds

Note 5 — Specimen of the format Both slot forms

// ~/.rove/themes/darkside.json
{
  "$schema": "https://raw.githubusercontent.com/sma1lboy/rove
             /main/packages/kobe/src/tui/context/theme
             /theme.schema.json",
  "defs": { "brand": "#cc785c" },
  "theme": {
    "background": "#141413",
    "text":       "#eae7df",
    "primary":    "brand",
    "accent": { "dark": "#cc785c", "light": "#c96442" }
  }
}

The file name is the finish name. A user file with the same name as a bundled finish wins.

3.0 · Write one

A theme is one JSON file.

Drop any *.json into ~/.rove/themes/ and it appears in the picker at next boot. Name it after a bundled theme and yours wins. You don't have to fill every slot. Missing ones fall through (borderActive → border → text), so a dozen lines is already a usable theme.

defs is an optional named palette a slot can reference by name. A slot value is a hex string, a defs key, or a { dark, light } pair. When you use the pair form, both sides are required. The $schema line is what gives you autocomplete in your editor.

Worked examples: claude.json fills 54 slots off 42 defs; conductor.json fills 35. Copy either and start deleting.

Note 6 — Application and supply Fig. 3-2

Any raw URL repo · gist · host Validate Same rules as boot Refused — one-line reason ~/.rove/themes/ <name>.json Exists — needs --force Next boot In the picker 1 command — no registry, no manifest
Fig. 3-2 — Supply route · Hidden line = the branch that does not land
4.0 · Publish

Share a URL. That's the whole registry.

There is no submission queue and no manifest to write. Installation reads a raw file over HTTPS, so anything you can link to is installable: a repo, a gist, your own host.

  1. Commit the JSON to a public repo or gist.
  2. Hit Raw on GitHub and copy the URL. It looks like raw.githubusercontent.com/<you>/<repo>/main/<theme>.json.
  3. Tell people to run rove theme add <raw-url>. It validates the JSON before writing and refuses to clobber an existing theme without --force.
  4. Tag the repo rove-theme on GitHub so it's findable, and open a PR against this page to get it listed with a preview.
Revisions
RevDateDescription
— 2026-09 Released as 0.9.198 on npm
2026-09 Ten finishes moved out of the binary to rove.run/themes — same files, installed with theme add
TitleRove — theme finishes, schedule
Part no.@sma1lboy/rove
Rev0.9.198
Sheet3 of 4
Drawn bySma1lboy
CheckedCI
Date2026-09-12
ScaleNTS
On board00:00
MaterialJSON — one file per finish
FinishMIT
UnitsSlots
CoatsDark and light — every slot in all thirteen is written as a dark/light pair