Skip to content

Themes

Choose Paneflow's bundled themes from Settings or paneflow.json. One Dark and PaneFlow Light ship today and hot-reload without restart.

Paneflow reads a top-level "theme" value from paneflow.json. The current bundled themes are One Dark and PaneFlow Light. Omit the key, set it to null, or reset it from Settings to use the default One Dark theme.

TL;DR. Use Settings -> Themes for the UI, or set "theme": "One Dark" / "theme": "PaneFlow Light" in paneflow.json. Theme changes hot-reload after save, with no app restart.

How do I switch the active theme?

Open Settings -> Themes and choose one of the three segments:

SegmentWhat Paneflow saves
Light"PaneFlow Light"
Dark"One Dark"
SystemThe matching concrete theme at click time: "PaneFlow Light" for a light OS appearance, otherwise "One Dark".

System is not stored as a persistent follow-the-OS mode today. After you choose it, Paneflow writes one of the concrete bundled theme names above.

You can also edit paneflow.json directly:

paneflow.json
{
"$schema": "https://github.com/ArthurDEV44/paneflow/raw/main/schemas/paneflow.schema.json",
"$schemaVersion": "1.0.0",
"theme": "PaneFlow Light"
}

The config file lives at:

OSPath
Linux~/.config/paneflow/paneflow.json
macOS~/Library/Application Support/paneflow/paneflow.json
Windows%APPDATA%\paneflow\paneflow.json

The schema lists the canonical spellings. Runtime lookup is case-insensitive, but using the canonical names keeps editor autocomplete and review diffs clean. Unknown names fall back to One Dark and emit a log warning the next time the file is parsed. The full set of recognised keys lives in the configuration schema.

Which themes ship with Paneflow today?

Stable in current builds.

NameDescription
"One Dark"Dark theme, default. Inspired by Atom's One Dark palette, then adjusted for Paneflow's terminal and app chrome.
"PaneFlow Light"Light theme with a white work surface, light app shell, and a dedicated light syntax palette.

A Paneflow theme defines 36 terminal colour slots: a 24-colour ANSI palette (8 hues x 3 intensities: normal, bright, dim), 5 base background/foreground colours, cursor, selection plus a derived selection foreground, scrollbar thumb, link text, and 2 title-bar colours. Paneflow also keeps a separate syntax palette for the Diff surface.

The selection foreground is not hand-tuned. Paneflow recomputes it at theme load until it clears APCA Lc >= 45 against the selection background, so selected text stays legible.

What does a theme affect?

Themes affect more than terminal ANSI colours:

  • terminal background, foreground, cursor, selection, scrollbar, links, and ANSI palette;
  • the app chrome palette derived from the active theme;
  • markdown panes and tables;
  • Diff and Review syntax colours;
  • title-bar and native material alignment on supported platforms.

Two related settings are separate from the theme name:

  • terminal.cursor_color overrides only the terminal cursor. null uses the cursor colour from the active theme.
  • commands[].workspace.color is a workspace-template colour, not a theme accent.

How does theme hot-reload work?

When you save paneflow.json, Paneflow re-resolves the active theme on the fly. No restart and no window reload are needed.

Two mechanisms drive the reload:

  • Event-driven path. A notify watcher watches the config directory and debounces file events by 300 ms.
  • Polling fallback. If the OS watcher cannot start, Paneflow falls back to a 500 ms mtime poll.

You will see the new palette take effect on the next render frame after the watcher or fallback fires. If the reload silently fails on your machine, the troubleshooting page walks through the common causes.

Theme and typography keys hot-reload from paneflow.json. The window_decorations key is read once at startup, so changing it still requires restarting Paneflow.

How do I create a custom theme?

Custom user-supplied theme files are not supported yet. Paneflow does not load theme.json, and there is no custom palette format in paneflow.json today.

If you want a specific palette, open a GitHub issue with the use case and palette. Bundled themes are tuned in src-app/src/theme/builtin.rs and ship with each release.