Flow Control: a programmer's text editor https://flow-control.dev
Find a file
CJ van den Berg 823d066a58 fix: track modifier state and generate events if it is out of sync
This prevents fast scroll and other modifier functions getting stuck if events
are lost due to focus change.
2024-04-01 21:37:35 +02:00
src fix: track modifier state and generate events if it is out of sync 2024-04-01 21:37:35 +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 build: add check build step 2024-03-22 11:10:54 +01:00
build.zig.version build: update zig 2024-04-01 13:45:49 +02:00
build.zig.zon build: update zig 2024-04-01 13:45:49 +02:00
help.md feat: add command to add cursors to all line ends 2024-03-31 21:00:19 +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!