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"inpaneflow.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:
| Segment | What Paneflow saves |
|---|---|
| Light | "PaneFlow Light" |
| Dark | "One Dark" |
| System | The 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:
{
"$schema": "https://github.com/ArthurDEV44/paneflow/raw/main/schemas/paneflow.schema.json",
"$schemaVersion": "1.0.0",
"theme": "PaneFlow Light"
}The config file lives at:
| OS | Path |
|---|---|
| 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.
| Name | Description |
|---|---|
"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_coloroverrides only the terminal cursor.nulluses the cursor colour from the active theme.commands[].workspace.coloris 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
notifywatcher 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
mtimepoll.
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. Thewindow_decorationskey 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.