Flow Control: a programmer's text editor https://flow-control.dev
Find a file
CJ van den Berg 9eb6dd3be4 fix: send sigterm to languages servers on exit
Not all language servers willingly exit if we just close stdin. Eventually
we will follow the protocol's shutdown process, but for now we just send a
sigterm.
2024-04-15 21:15:26 +02:00
src fix: send sigterm to languages servers on exit 2024-04-15 21:15:26 +02:00
test Initial public release 2024-02-29 00:00:15 +01:00
.gitignore Initial public release 2024-02-29 00:00:15 +01:00
build.zig feat: add fuzzy matching to recent files list with fuzzig 2024-04-15 18:59:23 +02:00
build.zig.version build: update zig 2024-04-01 13:45:49 +02:00
build.zig.zon fix: send sigterm to languages servers on exit 2024-04-15 21:15:26 +02:00
help.md docs: add gutter_mode_next command to docs 2024-04-10 22:14:48 +02:00
LICENSE Initial commit 2024-02-25 21:11:11 +01:00
README.md Update README.md and discord badge 2024-03-05 09:25:14 +01:00
zig fix: move mkdir .cache/cdb step from zig wrapper to build.zig 2024-03-01 11:50:25 +01:00

Flow Control: a programmer's text editor

This is my Zig text editor. It is very much a work-in-progress, but far enough along that I am daily driving it.

https://github.com/neurocyte/flow/assets/1552770/97aae817-c209-4c08-bc65-0a0bf1f2d4c6

Requirements

  • A modern terminal with 24bit color and kitty keyboard protocol support (kitty and ghostty are the only recommended terminals at this time)
  • NerdFonts support
  • Linux or MacOS (help porting to *BSD or Windows is welcome!)
  • A UTF-8 locale (very important!)

Building

Make sure your system meets the requirements listed above.

Flow tracks zig master most of the time. Build with:

zig build -Doptimize=ReleaseFast

Sometime zig master may introduce breaking changes and Flow may take a few days to catch up. In that case there is a simple zig wrapper script provided that will download and build with the last known compatible version of zig. The version is stored in build.zig.version.

Build with the zig wrapper:

./zig build -Doptimize=ReleaseFast

The zig wrapper places the downloaded zig compiler in the .cache directory and does not touch your system. It requires bash, curl and jq to run.

Run with:

zig-out/bin/flow

Place it in your path for convenient access.

See --help for full command line.

MacOS

On MacOS you will need to link Flow against a MacOS build of notcurses 3.0.9. This is easiest with brew:

brew install notcurses
zig build -Duse_system_notcurses=true --search-prefix /usr/local

Terminal configuration

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.

Features

  • fast TUI interface. no user interaction should take longer than one frame (6ms) (even debug builds)
  • tree sitter based syntax highlighting
  • multi cursor editing support
  • first class mouse support (yes, even with a scrollbar that actually works properly!)
  • vscode compatible keybindings (thanks to kitty keyboard protocol)
  • vim compatible keybindings (at least the basics, more to come)
  • good unicode support
  • hybrid rope/piece-table buffer for fast loading, saving and editing with hundreds of cursors
  • theme support (compatible with vscode themes via the flow-themes project)
  • infinite undo/redo (at least until you run out of ram)
  • stuff I've forgotten to mention...

Features in progress

  • LSP support for linting and navigating
  • find in files
  • multi tty support (shared editor sessions across multiple ttys)
  • command palette
  • completion UI
  • persistent undo/redo

Features planned for the future

  • multi host editing
  • multi user editing

Community

Discord

Join our Discord server or use the discussions section here on GitHub to meet with other Flow users!