Flow Control

a programmer’s text editor

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

🚀 Features

Requirements

📦 Installation

Linux, MacOS and *BSD

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

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

Install the latest nightly build:

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

with debug symbols:

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

See all avalable options for the installer script:

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

Install the installer for easy updating of flow:

sudo curl -fsSL -o /usr/local/bin/update-flow https://flow-control.dev/install
sudo chmod +x /usr/local/bin/update-flow
update-flow

At the top of the installer are variables to pre-answer the installation questions. Configure them to your liking.

Windows

For Windows the installer scripts are a little different.

Fetch and install the latest release to %AppData%/Roaming/flow/bin:

Invoke-RestMethod "https://flow-control.dev/install.ps1" | Invoke-Expression

Install the latest nightly build:

Invoke-RestMethod "https://flow-control.dev/install-nightly.ps1" | Invoke-Expression

Install the latest nightly build with pdb debug symbol files:

Invoke-RestMethod "https://flow-control.dev/install-debug.ps1" | Invoke-Expression

The Windows installer will also install itself as update-flow.ps1 so you can just run update-flow in a terminal to update to the latest release or nightly.

Prebuilt Binaries

Or check your favorite local system package repository.

Build from Source

# Basic build
zig build --release=fast

# 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