Flume is a Neovim colorscheme with four palettes and matching terminal and developer-tool themes. Neutral identifiers, semantic color, and soft surfaces keep the focus on code. Includes Tree-sitter, LSP semantic tokens, diagnostics, and popular plugin highlights.
Each preview shows the same Zig expression tree with real Tree-sitter highlighting. Click a palette to inspect its full-size capture.
Explore Go, Rust, Python, TSX, Zig, Elixir, and TOML, or inspect selection, diffs, diagnostics, completion, and LSP coloring.
One file per image, with real Tree-sitter highlighting. Each language uses the same source and layout across palettes. Open a language for its full-size capture.
| Palette | Code examples | Config |
|---|---|---|
| Dusk | Go · Rust · Python · TSX · Zig · Elixir | TOML |
| Opal | Go · Rust · Python · TSX · Zig · Elixir | TOML |
| Mira | Go · Rust · Python · TSX · Zig · Elixir | TOML |
| Mesa | Go · Rust · Python · TSX · Zig · Elixir | TOML |
The examples explore cancellation, typestate, event summaries, undo, constant folding, and pattern-matched pipelines. See the source guide for details.
Requires Neovim 0.9+ and true-color support. With lazy.nvim:
{
"mitander/flume.nvim",
lazy = false,
priority = 1000,
config = function()
vim.opt.termguicolors = true
require("flume").setup({ schema = "dusk" })
end,
}
setup() configures and applies Flume. Do not follow it with :colorscheme.
Without Lua options, use colorscheme flume-dusk instead. The other entry points
are flume-opal, flume-mira, and flume-mesa.
Override palette roles, syntax styles, or exact highlight groups:
require("flume").setup({
schema = "opal",
transparent = false,
overrides = {
syntax_comment = "#7a747a",
accent = "#5f9cab",
},
styles = { comments = { italic = true } },
highlights = {
CursorLineNr = { fg = "#ffffff", bold = true },
},
})
Use :Inspect or :highlight GroupName to identify a highlight group.
Overrides affect Neovim only; generated themes use canonical palette colors.
See :help flume-options for all defaults and system-appearance
hooks. Exact roles are listed in the palette manifest.
options = { theme = "flume" }
in your lualine setup. The named theme follows palette changes.Matching external-tool themes live in extras/. Setup recipes live in the
workflow guide; native preview status lives
in the showcase:
Automatic installation: Ghostty, Kitty, OpenCode, Tmux, and LSD.
:FlumeInstallExtras
Manual setup: use the other tools' theme or include mechanisms. Flume does
not guess user-specific destinations. See :help flume-extras
for artifact paths.
Switch Neovim and the active integration set together:
:FlumeSync mira
Other running Neovim instances follow by default. To remember the synchronized palette at startup, keep a fallback in your dotfiles:
require("flume").setup({ schema = "mesa", follow_sync = true })
:FlumeSync mira records Mira in runtime state, not your Lua configuration.
Set both follow_sync = false and watch_sync = false for an independent editor.
Active sets live in stdpath("data")/flume, outside the plugin checkout. Print
require("flume").get_sync_dir() for your exact path. After upgrading, rerun
:FlumeInstallExtras and update manual includes; legacy checkout links are forwarded
when possible. External tools need their own reload support. See
shared workflows for setup and reload behavior, and the
semantic export for custom consumers.
| Command | Action |
|---|---|
:FlumeReload |
Reload the editor-local palette |
:FlumeCompile |
Regenerate all integration artifacts |
:FlumeSync [schema] |
Apply a palette and activate its integration set |
:FlumeInstallExtras [app] |
Link integrations with standard destinations |
:FlumeExtras |
Show safe link instructions for the five installable tools |
:checkhealth flume |
Check the selected palette and generated files |
:help flume |
Open the reference manual |
Set dev = true in your local Flume setup to reload on Lua source saves.
Reloads preserve the editor's current palette and do not synchronize external tools.
Run ./scripts/check for tests, local links, and source checks. The check script
requires Neovim and Python 3.11+.
Flume's visual direction draws on Jonathan Zawada's artwork for Flume. A wallpaper is available at 1376×768.
MIT. See LICENSE.