Flow Control: a programmer's text editor
2,215
stars
4,085
commits
Zig
primary language
Sep 9, 2026
updated
This is my Zig text editor. It is under active development, but very stable and is my daily driver for almost everything.
See our devlog for on-going updates from the development team.
There is an installation guide on the main website with instructions for using the installer script. Direct downloads of source tarballs and release and nightly binary builds are listed on the downloads page.
Or check your favorite local system package repository.
Make sure your system meets the requirements listed above.
Flow builds with zig 0.16 at this time. Build with:
zig build -Doptimize=ReleaseSafe
Zig will by default build a binary optimized for your specific CPU. If you
get illegal instruction errors add -Dcpu=baseline to the build command to
produce a binary with generic CPU support.
Thanks to Zig you may also cross-compile from any host to pretty much any target. For example:
zig build -Doptimize=ReleaseSafe -Dtarget=x86_64-windows --prefix zig-out/x86_64-windows
zig build -Doptimize=ReleaseSafe -Dtarget=x86_64-macos-none --prefix zig-out/x86_64-macos
zig build -Doptimize=ReleaseSafe -Dtarget=aarch64-linux-musl --prefix zig-out/aarch64-linux
When cross-compiling zig will build a binary with generic CPU support.
The output 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.
The Flow Control binary is called flow.
Place it in your path for convenient access:
sudo cp zig-out/bin/flow /usr/local/bin
Or if you prefer, let zig install it in your home directory:
zig build -Doptimize=ReleaseSafe --prefix ~/.local
Flow Control is a single statically linked binary. No further runtime files are required. You may install it on another system by simply copying the binary.
scp zig-out/bin/flow root@otherhost:/usr/local/bin
Files to load may be specifed on the command line:
flow fileA.zig fileB.zig
The last file will be opened and the previous files will be placed in reverse order at the top of the recent files list. Switch to recent files with Ctrl-e.
Common target line specifiers are supported too:
flow file.txt:123
Or Vim style:
flow file.txt +123
Use the --language option to force the file type of a file:
flow --language bash ~/.bash_profile
Show supported language names with --list-languages.
See flow --help for the full list of command line options.
A basic user manual is available inside flow. You can open it with the
Open help command (F1).
It is also available in the website documentation section.
Additional developer resources can be found on the Flow Control website at.
There is also an AI generated developer guide at
.
Accuracy may vary. Check details against the referenced source code.
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. Somewhere
magical on MacOS.
There are commands to open the various configuration files, so you don't
have to manually find them. Look for commands starting with Edit in the
command palette.
File types may be configured with the Edit file type configuration
command. You can also create a new file type by adding a new .conf file
to the file_type directory. Have a look at an existing file type to see
what options are available.
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.
Press F1 to view the online manual.
Press F4 to switch the current keybinding mode. (flow, vim, emacs, etc.)
Press ctrl+shift+p or alt+x to show the command palette.
Press ctrl+F2 to see a full list of all current keybindings and commands.
Run the Edit keybindings command to customize the current keybinding
mode. It opens a file in your keys directory (under the same name) that
inherits from the built-in mode, so you can add or override individual
keybindings. Keybindings added by future updates ar inherited
automatically. Keybinding changes take effect on restart.
Kitty, Ghostty and most other terminals have default keybindings that conflict with common editor commands. I highly recommend rebinding them to keys that are not generally used anywhere else.
For Kitty rebinding kitty_mod is usually enough:
kitty_mod ctrl+alt
For Ghostty each conflicting binding has to be reconfigured individually.
Join our Discord server or use the discussions section here on GitHub to meet with other Flow users!
(top 30 of 56)
Zig
98.7%
Flow Control: a programmer's text editor
2,215
stars
4,085
commits
Zig
primary language
Sep 9, 2026
updated
This is my Zig text editor. It is under active development, but very stable and is my daily driver for almost everything.
See our devlog for on-going updates from the development team.
There is an installation guide on the main website with instructions for using the installer script. Direct downloads of source tarballs and release and nightly binary builds are listed on the downloads page.
Or check your favorite local system package repository.
Make sure your system meets the requirements listed above.
Flow builds with zig 0.16 at this time. Build with:
zig build -Doptimize=ReleaseSafe
Zig will by default build a binary optimized for your specific CPU. If you
get illegal instruction errors add -Dcpu=baseline to the build command to
produce a binary with generic CPU support.
Thanks to Zig you may also cross-compile from any host to pretty much any target. For example:
zig build -Doptimize=ReleaseSafe -Dtarget=x86_64-windows --prefix zig-out/x86_64-windows
zig build -Doptimize=ReleaseSafe -Dtarget=x86_64-macos-none --prefix zig-out/x86_64-macos
zig build -Doptimize=ReleaseSafe -Dtarget=aarch64-linux-musl --prefix zig-out/aarch64-linux
When cross-compiling zig will build a binary with generic CPU support.
The output 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.
The Flow Control binary is called flow.
Place it in your path for convenient access:
sudo cp zig-out/bin/flow /usr/local/bin
Or if you prefer, let zig install it in your home directory:
zig build -Doptimize=ReleaseSafe --prefix ~/.local
Flow Control is a single statically linked binary. No further runtime files are required. You may install it on another system by simply copying the binary.
scp zig-out/bin/flow root@otherhost:/usr/local/bin
Files to load may be specifed on the command line:
flow fileA.zig fileB.zig
The last file will be opened and the previous files will be placed in reverse order at the top of the recent files list. Switch to recent files with Ctrl-e.
Common target line specifiers are supported too:
flow file.txt:123
Or Vim style:
flow file.txt +123
Use the --language option to force the file type of a file:
flow --language bash ~/.bash_profile
Show supported language names with --list-languages.
See flow --help for the full list of command line options.
A basic user manual is available inside flow. You can open it with the
Open help command (F1).
It is also available in the website documentation section.
Additional developer resources can be found on the Flow Control website at.
There is also an AI generated developer guide at
.
Accuracy may vary. Check details against the referenced source code.
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. Somewhere
magical on MacOS.
There are commands to open the various configuration files, so you don't
have to manually find them. Look for commands starting with Edit in the
command palette.
File types may be configured with the Edit file type configuration
command. You can also create a new file type by adding a new .conf file
to the file_type directory. Have a look at an existing file type to see
what options are available.
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.
Press F1 to view the online manual.
Press F4 to switch the current keybinding mode. (flow, vim, emacs, etc.)
Press ctrl+shift+p or alt+x to show the command palette.
Press ctrl+F2 to see a full list of all current keybindings and commands.
Run the Edit keybindings command to customize the current keybinding
mode. It opens a file in your keys directory (under the same name) that
inherits from the built-in mode, so you can add or override individual
keybindings. Keybindings added by future updates ar inherited
automatically. Keybinding changes take effect on restart.
Kitty, Ghostty and most other terminals have default keybindings that conflict with common editor commands. I highly recommend rebinding them to keys that are not generally used anywhere else.
For Kitty rebinding kitty_mod is usually enough:
kitty_mod ctrl+alt
For Ghostty each conflicting binding has to be reconfigured individually.
Join our Discord server or use the discussions section here on GitHub to meet with other Flow users!
(top 30 of 56)
Zig
98.7%