Flamingo is a terminal-based modal editor written in Zig. It is a personal editor-engine project focused on fast terminal rendering, configurable workflows, file and folder operations, syntax highlighting, LSP-backed editing features, and integrated project panels.
Flamingo is under active development. It is useful for experimentation, hacking on editor internals, and trying the current feature set, but it should be treated as an early-stage project rather than a stable daily-driver editor.
The repository currently has a compact docs set and a growing implementation. Some workflows are implemented but still evolving, especially project tooling, LSP integration, configuration validation, and long-running background work.
The recommended installation path on macOS and Linux is Homebrew:
brew install spaghettifunk/tap/flamingoOr tap the repository first:
brew tap spaghettifunk/tap
brew install flamingoAfter installation, start the editor with:
flamingoCheck the installed binary with:
flamingo --version
flamingo --help- A terminal environment capable of running a raw-mode terminal editor.
gitfor Git status and Git Graph features.- Optional language servers for LSP features:
zlsfor Ziggoplsfor Govscode-json-languageserverfor JSONyaml-language-serverfor YAMLtaplo lsp stdiofor TOMLbuf lsp servefor Protocol Buffers
Open Flamingo in the current working directory:
flamingoPass paths or other arguments to Flamingo as supported by the current CLI:
flamingo <args>On startup, Flamingo uses the selected config path in this order:
--config <path>FLAMINGO_CONFIG~/.flamingo/config.toml, created from the embedded default config if needed
Flamingo configuration is TOML. The default config includes:
debug[explorer][author]- context-specific
[keybindings.<context>]tables
Keybindings map key sequences to canonical command names from src/editor/commands.zig. Supported contexts include editor modes and panels such as normal, insert, command_line, dashboard, explorer, global_search, git_graph, todo_panel, comments_panel, terminal, completion, and related picker/prompt contexts.
See the repository default config at src/config/default_config.toml and the root sample config at config.toml.
For the current keybinding and command reference, see docs/keybindings.md.
Development requires Zig 0.16.0 or newer, as declared in build.zig.zon.
Build and run from source:
zig build runPass arguments through the Zig build runner:
zig build run -- <args>Build the binary without running it:
zig build
./zig-out/bin/flamingoRun validation:
zig build
zig build test
zig build perfFormat changed Zig files with:
zig fmt <files>Zig dependencies are declared in build.zig.zon; vendored tree-sitter grammars live under vendor/.
The build defines the main editor executable, a test step rooted at test_root.zig, and a rendering performance benchmark executable.
Flamingo uses a manual, tag-driven GitHub Actions release workflow for v1. This avoids publishing a release on every merge to main.
- Merge release-ready changes to
main. - Run the
releaseworkflow manually with the desired version, such as0.1.0. - The workflow validates the version, builds and tests Flamingo, creates tag
v<version>frommain, generates a changelog from commits since the previousv*tag, packages the macOS binary, uploadsSHA256SUMS.txt, and creates the GitHub Release. - Update the Formula in the homebrew-tap
Project documentation lives in docs/. See docs/roadmap.md for the current loose roadmap.
This is a personal editor project, but the repository is structured for local hacking:
- keep changes small and reviewable
- use existing command, keybinding, state, renderer, and runtime patterns
- avoid allocations in render hot paths
- keep parsing, LSP, filesystem scanning, and other long-running work out of the event loop where practical
- update docs/keybindings.md when adding commands or keybindings
- run
zig build testbefore submitting changes when practical
Flamingo is licensed under the MIT License
