Flow Control

a programmer’s text editor

Flow Control is under active development, but usually very stable.

🚀 Features

Requirements

📦 Installation

Fetch and install the latest release to /usr/local/bin with the installation helper script:

curl -fsSL https://flow-control.dev/install | sh

Install latest nightly build and (optionally) specify the installation destination:

curl -fsSL https://flow-control.dev/install | sh -s -- --nightly --prefix ~/.local/bin

See all avalable options for the installer script:

curl -fsSL https://flow-control.dev/install | sh -s -- --help

Prebuilt Binaries

Or check your favorite local system package repository.

Build from Source

# Basic build
zig build -Doptimize=ReleaseSafe

# Cross-compile examples
zig build -Dtarget=x86_64-windows --prefix zig-out/win64
zig build -Dtarget=aarch64-linux-musl --prefix zig-out/arm-linux

The binary is:

zig-out/bin/flow

It is statically built (by default) and contains all the required tree-sitter parsers and queries. No additional runtime files are required. Place it in your path for convenient access.

Configuration

Configuration is mostly dynamically maintained with various commands in the UI. It is stored under the standard user configuration path. Usually ~/.config/flow on Linux. %APPDATA%\Roaming\flow on Windows.

Logs, traces and per-project most recently used file lists are stored in the standard user application state directory. Usually ~/.local/state/flow on Linux and %APPDATA%\Roaming\flow on Windows.

Kitty, Ghostty and most other terminals have default keybindings that conflict with common editor commands. We highly recommend rebinding them to keys that are not generally used inside TUI applications.

For Kitty rebinding kitty_mod is usually enough:

kitty_mod ctrl+alt

🛠️ Basic Usage

flow file.zig:42                    # Open at line 42
flow --language zig CMakeLists.txt  # Force file type
flow --list-languages               # Show all supported languages
flow --help                         # List of command line options

⌨️ Key Controls

CommandAction
F4Switch input mode
Ctrl+Shift+PCommand palette
Ctrl+F2View all keybindings

Run the Edit keybindings command to save the current keybinding mode to a file and open it for editing. Save your customized keybinds under a new name in the same directory to create an entirely new keybinding mode. Keybinding changes will take effect on restart.

🛣️ Roadmap

In Development:

Future:

💬 Community

Join our Discord server or discuss on GitHub Discussions