Skip to content

Theming

Themes are CSS files that define custom properties controlling the entire UI — colors, radii, terminal palette, editor highlighting, and diff colors. planeai ships with several bundled themes and supports custom themes.

Open Preferences (⌘, / Ctrl+,) and look under the Appearance section. Available themes appear as clickable buttons — select one to apply it immediately.

Alternatively, set the theme in your config file:

{
"appearance": {
"theme": "catppuccin",
},
}

Themes live in ~/.config/planeai/themes/ (or %APPDATA%\planeai\themes\ on Windows). On first launch, planeai scaffolds this directory with the bundled themes. Any .css file you add here becomes available in the theme selector.

ThemeDescription
defaultMonochrome design system (GitHub-inspired)
githubGitHub Light / Dark
catppuccinCatppuccin Latte (light) / Macchiato (dark)
draculaDracula color palette
oneOne Half Light / Dark

planeai bundles every color scheme that Ghostty ships, from iTerm2-Color-Schemes (MIT license). Each scheme belongs to its author, credited in the bundled CREDITS.md. In Preferences → Appearance, the Light and Dark dropdowns below the theme buttons set what each mode uses. Each lists the CSS themes first, tagged planeai, then the color schemes for that mode. Picking one mode keeps the other, so you can pair the default theme in light mode with a color scheme in dark mode. The theme buttons still apply one CSS theme to both modes.

With a color scheme, the terminal uses the scheme’s colors exactly. The rest of the UI (sidebar, panels, text, accent, diffs, and editor highlighting) is derived from the scheme, with a minimum text contrast enforced.

In the config file, theme is either a CSS theme name for both modes, or one entry per mode. An entry is a color scheme name, or { "css": "<name>" } for a CSS theme:

{
"appearance": {
"theme": { "light": { "css": "default" }, "dark": "Dracula" },
},
}

If a mode’s theme cannot be found, that mode falls back to the built-in default colors.

To add your own scheme, drop a file in Ghostty’s theme format into ~/.config/planeai/themes/ghostty/. The file name is the scheme name, and a file with the same name as a bundled scheme replaces it.

  1. Copy an existing theme as a starting point:
    Terminal window
    cp ~/.config/planeai/themes/default.css ~/.config/planeai/themes/my-theme.css
  2. Edit the CSS custom properties in my-theme.css
  3. Select “my-theme” in Preferences → Appearance

Each theme defines variables in :root (light mode) and .dark (dark mode):

:root {
/* Light mode tokens */
--color-canvas: #f4f4f6;
--color-accent: #18181d;
/* ... */
}
.dark {
/* Dark mode tokens */
--color-canvas: #171717;
--color-accent: #f5f5f5;
/* ... */
}
TokenDescription
--color-canvasBase page background
--color-chromeChrome/header background
--color-sidebarSidebar background
--color-mainMain content area background
--color-panelPanel/card background
--color-panel-hiElevated panel (hover states, highlights)
--color-t1Primary text
--color-t2Secondary text
--color-t3Muted text (hints, placeholders)
--color-borderDefault border (subtle)
--color-border-sStrong border (more visible)
--color-accentPrimary accent color
--color-on-accentText color on accent backgrounds
--color-accent-bgAccent tint background (selections, highlights)
--color-scrimModal/overlay backdrop
TokenDescription
--color-status-runningActive/running indicator (green)
--color-status-reviewNeeds review indicator (amber)
--color-status-exitedError/exited indicator (red)
--color-status-idleIdle/inactive indicator (gray)
TokenDescription
--radius-baseSmall elements (buttons, inputs)
--radius-containerLarge containers (cards, panels)
TokenDescription
--terminal-backgroundTerminal background
--terminal-foregroundTerminal foreground
--terminal-cursorCursor color
--terminal-selectionSelection background
--terminal-blackANSI black
--terminal-redANSI red
--terminal-greenANSI green
--terminal-yellowANSI yellow
--terminal-blueANSI blue
--terminal-magentaANSI magenta
--terminal-cyanANSI cyan
--terminal-whiteANSI white
--terminal-bright-*Bright variants (×8)
TokenDescription
--diff-add-bgAdded line background
--diff-del-bgDeleted line background
--diff-add-colorAdded line text color
--diff-del-colorDeleted line text color
TokenDescription
--editor-backgroundEditor background
--editor-foregroundEditor text
--editor-selectionSelection background
--editor-line-numberLine number gutter
--editor-addedAdded text in editor
--editor-deletedDeleted text in editor
--editor-added-bgAdded line background in editor
--editor-deleted-bgDeleted line background in editor
TokenDescription
--editor-keywordKeywords (if, return, import)
--editor-stringString literals
--editor-commentComments
--editor-numberNumeric literals
--editor-variableVariables
--editor-typeType annotations
--editor-functionFunction names
--editor-propertyObject properties
--editor-operatorOperators
--editor-punctuationBrackets, semicolons
--editor-metaMeta/decorators
/* my-theme.css — Catppuccin-inspired custom theme */
:root {
--color-canvas: #e6e9ef;
--color-chrome: #e6e9ef;
--color-sidebar: #e6e9ef;
--color-main: #eff1f5;
--color-panel: #eff1f5;
--color-panel-hi: #dce0e8;
--color-t1: #4c4f69;
--color-t2: #6c6f85;
--color-t3: #8c8fa1;
--color-border: rgba(76, 79, 105, 0.08);
--color-border-s: rgba(76, 79, 105, 0.15);
--color-accent: #1e66f5;
--color-on-accent: #eff1f5;
--color-accent-bg: rgba(30, 102, 245, 0.1);
--color-scrim: rgba(76, 79, 105, 0.3);
--color-status-running: #40a02b;
--color-status-review: #df8e1d;
--color-status-exited: #d20f39;
--color-status-idle: #9ca0b0;
--radius-base: 0.5rem;
--radius-container: 1rem;
--terminal-background: #eff1f5;
--terminal-foreground: #4c4f69;
--terminal-cursor: #dc8a78;
}
.dark {
--color-canvas: #1e2030;
--color-chrome: #1e2030;
--color-sidebar: #1e2030;
--color-main: #24273a;
--color-panel: #24273a;
--color-panel-hi: #363a4f;
--color-t1: #cad3f5;
--color-t2: #a5adcb;
--color-t3: #6e738d;
--color-border: rgba(202, 211, 245, 0.08);
--color-border-s: rgba(202, 211, 245, 0.14);
--color-accent: #8aadf4;
--color-on-accent: #24273a;
--color-accent-bg: rgba(138, 173, 244, 0.12);
--color-scrim: rgba(0, 0, 0, 0.55);
--color-status-running: #a6da95;
--color-status-review: #eed49f;
--color-status-exited: #ed8796;
--color-status-idle: #5b6078;
--terminal-background: #24273a;
--terminal-foreground: #cad3f5;
--terminal-cursor: #f4dbd6;
}