Skip to main content

Overview

Maestro includes 17 carefully crafted themes across dark, light, and vibe categories. You can also create a fully custom theme with your own colors.

Theme System

Theme Structure

interface Theme {
  id: ThemeId;              // Unique theme identifier
  name: string;             // Display name
  mode: ThemeMode;          // 'dark' | 'light' | 'vibe'
  colors: ThemeColors;      // Color palette
}

interface ThemeColors {
  bgMain: string;           // Main background
  bgSidebar: string;        // Sidebar background
  bgActivity: string;       // Activity/hover background
  border: string;           // Border color
  textMain: string;         // Primary text
  textDim: string;          // Secondary/dimmed text
  accent: string;           // Accent color (primary)
  accentDim: string;        // Accent dim (hover/disabled)
  accentText: string;       // Accent text color
  accentForeground: string; // Text on accent background
  success: string;          // Success state (green)
  warning: string;          // Warning state (yellow)
  error: string;            // Error state (red)
}

Built-In Themes

Dark Themes

{
  id: 'dracula',
  name: 'Dracula',
  mode: 'dark',
  colors: {
    bgMain: '#282a36',
    bgSidebar: '#21222c',
    bgActivity: '#343746',
    border: '#44475a',
    textMain: '#f8f8f2',
    textDim: '#6272a4',
    accent: '#bd93f9',
    accentDim: 'rgba(189, 147, 249, 0.2)',
    accentText: '#ff79c6',
    accentForeground: '#282a36',
    success: '#50fa7b',
    warning: '#ffb86c',
    error: '#ff5555'
  }
}

Light Themes

{
  id: 'github-light',
  name: 'GitHub',
  mode: 'light',
  colors: {
    bgMain: '#ffffff',
    bgSidebar: '#f6f8fa',
    bgActivity: '#eff2f5',
    border: '#d0d7de',
    textMain: '#24292f',
    textDim: '#57606a',
    accent: '#0969da',
    accentDim: 'rgba(9, 105, 218, 0.1)',
    accentText: '#0969da',
    accentForeground: '#ffffff',
    success: '#1a7f37',
    warning: '#9a6700',
    error: '#cf222e'
  }
}

Vibe Themes

Vibe themes offer bold, unique color palettes for those who want something different.
{
  id: 'pedurple',
  name: 'Pedurple',
  mode: 'vibe',
  colors: {
    bgMain: '#1a0f24',
    bgSidebar: '#140a1c',
    bgActivity: '#2a1a3a',
    border: '#4a2a6a',
    textMain: '#e8d5f5',
    textDim: '#b89fd0',
    accent: '#ff69b4',
    accentDim: 'rgba(255, 105, 180, 0.25)',
    accentText: '#ff8dc7',
    accentForeground: '#1a0f24',
    success: '#7cb342',
    warning: '#d4af37',
    error: '#da70d6'
  }
}
Pedurple features a purple-pink aesthetic with hot pink accents.

Switching Themes

Via Settings

1

Open Settings

Press Cmd+, to open Settings.
2

Navigate to Appearance

Click on the “Appearance” tab.
3

Select Theme

Choose from the theme dropdown menu.
4

Preview Changes

Theme applies immediately for preview.

Via API

import { useSettings } from './hooks';
import type { ThemeId } from './types';

const { activeThemeId, setActiveThemeId } = useSettings();

// Switch to theme
setActiveThemeId('tokyo-night' as ThemeId);

Custom Theme

The Custom theme allows you to define your own color palette from scratch.

Creating a Custom Theme

1

Select Custom Theme

In Settings > Appearance, select “Custom” from the theme dropdown.
2

Choose Base Theme

Select a base theme to start from (all colors will be copied).
3

Customize Colors

Modify each color property:
  • Background colors (main, sidebar, activity)
  • Text colors (main, dim)
  • Accent colors (primary, dim, text, foreground)
  • State colors (success, warning, error)
4

Preview Changes

Changes apply in real-time as you edit.

Custom Theme Configuration

const {
  customThemeColors,      // Current custom colors
  customThemeBaseId,      // Base theme ID
  setCustomThemeColors,   // Update colors
  setCustomThemeBaseId    // Change base
} = useSettings();

// Set custom colors
setCustomThemeColors({
  bgMain: '#1a1a2e',
  bgSidebar: '#16213e',
  bgActivity: '#0f3460',
  border: '#533483',
  textMain: '#e8e8e8',
  textDim: '#a8a8a8',
  accent: '#00adb5',
  accentDim: 'rgba(0, 173, 181, 0.2)',
  accentText: '#00d4aa',
  accentForeground: '#1a1a2e',
  success: '#4caf50',
  warning: '#ff9800',
  error: '#f44336'
});

Default Custom Theme

// Custom theme defaults to Dracula colors
export const DEFAULT_CUSTOM_THEME_COLORS = THEMES.dracula.colors;

Theme Utilities

Get Theme by ID

import { getThemeById } from './constants/themes';

const theme = getThemeById('nord');
if (theme) {
  console.log(theme.name);    // 'Nord'
  console.log(theme.mode);    // 'dark'
  console.log(theme.colors);  // { bgMain: '#2e3440', ... }
}

Context Colors

import { getContextColor } from './utils/theme';

// Get agent state color from current theme
const color = getContextColor('ready', currentTheme);
// Returns: theme.colors.success (green)

const busyColor = getContextColor('busy', currentTheme);
// Returns: theme.colors.warning (yellow)

const errorColor = getContextColor('error', currentTheme);
// Returns: theme.colors.error (red)

Color Blind Mode

Maestro includes a colorblind mode that uses accessible color palettes.

Enable Colorblind Mode

const { colorBlindMode, setColorBlindMode } = useSettings();

// Enable colorblind-friendly colors
setColorBlindMode(true);
When enabled, Maestro uses specially designed color palettes optimized for various types of color vision deficiency.

Theme Best Practices

Choose themes that match your workspace:
  • Bright rooms: Light themes (GitHub, Solarized Light)
  • Dim rooms: Dark themes (Tokyo Night, Nord)
  • Variable lighting: Medium contrast (Gruvbox Dark, One Light)
For extended coding sessions:
  • Use lower contrast themes (Nord, Solarized)
  • Avoid pure white backgrounds (#ffffff)
  • Consider warm color temperatures (Gruvbox)
  • Enable night mode/flux for evening work
Vibe themes are perfect for:
  • Streaming and demos (Dre Synth, Pedurple)
  • Personal branding (Maestro’s Choice)
  • Standing out (InQuest)
When creating custom themes:
  1. Start with a similar base theme
  2. Adjust one aspect at a time (backgrounds, then text, then accents)
  3. Test with real code/content
  4. Ensure sufficient contrast (WCAG AA minimum: 4.5:1)
  5. Test state colors (success/warning/error) for visibility

Sharing Custom Themes

Export your settings to share custom themes with others.

Export Custom Theme

  1. Open Settings > Advanced
  2. Click “Export Settings”
  3. Extract custom theme from JSON:
{
  "activeThemeId": "custom",
  "customThemeColors": {
    "bgMain": "#1a1a2e",
    "bgSidebar": "#16213e",
    // ... rest of colors
  },
  "customThemeBaseId": "dracula"
}

Import Custom Theme

  1. Receive settings JSON with custom theme
  2. Open Settings > Advanced
  3. Click “Import Settings”
  4. Theme applies automatically if activeThemeId is “custom”

Next Steps

Build docs developers (and LLMs) love