Compare commits

..

No commits in common. "fb482bd5659227eb111c0427c108b30e968b7a29" and "d6cdcfdb1a312fd61c2d5b9fa3325eb07fc706e7" have entirely different histories.

2 changed files with 75 additions and 113 deletions

184
README.md
View file

@ -1,89 +1,57 @@
# Flow Control: a programmer's text editor # Flow Control: a programmer's text editor
This is my Zig text editor. It is under active development, but very stable This is my Zig text editor. It is under active development, but usually stable
and is my daily driver for almost everything. and is my daily driver for most things coding related.
[![Announcement](https://img.youtube.com/vi/iwPg3sIxMGw/maxresdefault.jpg)](https://www.youtube.com/watch?v=iwPg3sIxMGw) [![Announcement](https://img.youtube.com/vi/iwPg3sIxMGw/maxresdefault.jpg)](https://www.youtube.com/watch?v=iwPg3sIxMGw)
# Features
- **Lightning Fast** TUI with ≤6ms frame times, **low latency** input handling
and smooth **animated scrolling**
- Intuitive UI with **tabs**, **scrollbars** and **palettes** with full
**mouse** support for all UI elements
- Support for more than **70 programming languages**, **zero
configuration** needed, via **tree-sitter** powered syntax highlighting
- **Language Server Protocol** pre configured support for most language servers
- Powerful **multi-cursor** editing and integrated **clipboard history**
- Powerful configurable keybinding system that supports **modal** and
**non-modal** editing styles
- Multiple pre-configured **keybinding modes**
- Flow Control - GUI IDE style bindings (similar to vscode)
- Emacs
- Vim
- Helix
- User created
- Hybrid rope/piece-table buffer system, edit **very large files** with
**thousands of cursors**
- Infinite **undo** (at least until you run out of ram)
- Full **unicode** support, including support for the kitty text sizing protocol
- Plenty of **themes** included and support for vscode themes via the flow-themes project
- Runs on **Linux, FreeBSD, MacOS, Windows and Android** (under termux) with
easy **cross-compilation** to all supported targets
# Requirements # Requirements
- A modern terminal with 24bit color and, ideally, kitty keyboard protocol support. Kitty,
- A modern terminal with **24bit color** and, ideally, **kitty keyboard Foot and Ghostty are the only recommended terminals at this time. Most other terminals
protocol** support. **Kitty**, **Foot** and **Ghostty** are the recommended will work, but with reduced functionality.
terminals at this time. **Zellij** also works well. Most other terminals will - NerdFont support. Either via terminal font fallback or a patched font.
work, but likely with reduced functionality. - Linux, MacOS, Windows, Android (Termux) or FreeBSD.
- **NerdFont** support. Either via terminal font fallback or a patched font. - A UTF-8 locale
- A **UTF-8** locale
# Roadmap
See our [devlog](/devlog/2025) for on-going updates from the development team.
## In Development
- LSP completion support
- Persistent undo/redo
- File watcher integration
## Future
- Collaborative editing
- Plugin system
- Multi-terminal sessions
# Download / Install # Download / Install
There is an [installation guide](https://flow-control.dev/installation) on the Binary release builds are found here: [neurocyte/flow/releases](https://github.com/neurocyte/flow/releases/latest)
main website, and source, release and nightly build binary
[downloads](https://flow-control.dev/downloads). Fetch and install the latest release to `/usr/local/bin` with the installation helper script:
```shell
curl -fsSL https://flow-control.dev/install | sh
```
Nightly binary builds are found here: [neurocyte/flow-nightly/releases](https://github.com/neurocyte/flow-nightly/releases/latest)
Install latest nightly build and (optionally) specify the installation destination:
```shell
curl -fsSL https://flow-control.dev/install | sh -s -- --nightly --dest ~/.local/bin
```
See all avalable options for the installer script:
```shell
curl -fsSL https://flow-control.dev/install | sh -s -- --help
```
Or check your favorite local system package repository. Or check your favorite local system package repository.
[![Packaging status](https://repology.org/badge/vertical-allrepos/flow-control.svg)](https://repology.org/project/flow-control/versions) [![Packaging status](https://repology.org/badge/vertical-allrepos/flow-control.svg)](https://repology.org/project/flow-control/versions)
# Building # Building
Make sure your system meets the requirements listed above. Make sure your system meets the requirements listed above.
Flow builds with zig 0.15.2 at this time. Build with: Flow builds with zig 0.15.1 at this time. Build with:
```shell ```shell
zig build -Doptimize=ReleaseSafe zig build -Doptimize=ReleaseSafe
``` ```
Zig will by default build a binary optimized for your specific CPU. If you get 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.
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 Thanks to Zig you may also cross-compile from any host to pretty much any
@ -97,20 +65,15 @@ zig build -Doptimize=ReleaseSafe -Dtarget=aarch64-linux-musl --prefix zig-out/aa
When cross-compiling zig will build a binary with generic CPU support. When cross-compiling zig will build a binary with generic CPU support.
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/neurocyte/flow)
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.
# Running Flow Control # Running Flow Control
The Flow Control binary is called `flow`. The binary is:
```shell
zig-out/bin/flow
```
Place it in your path for convenient access: Place it in your path for convenient access:
@ -124,8 +87,8 @@ Or if you prefer, let zig install it in your home directory:
zig build -Doptimize=ReleaseSafe --prefix ~/.local zig build -Doptimize=ReleaseSafe --prefix ~/.local
``` ```
Flow Control is a single statically linked binary. No further runtime files are Flow Control is a single statically linked binary. No further runtime files are required.
required. You may install it on another system by simply copying the binary. You may install it on another system by simply copying the binary.
```shell ```shell
scp zig-out/bin/flow root@otherhost:/usr/local/bin scp zig-out/bin/flow root@otherhost:/usr/local/bin
@ -162,51 +125,25 @@ Show supported language names with `--list-languages`.
See `flow --help` for the full list of command line options. See `flow --help` for the full list of command line options.
# Documentation
## User manual
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]{https://flow-control.dev/docs/}
section.
## Development Resources
Additional developer resources can be found on the Flow Control website at
[flow-control.dev/docs](https://flow-control.dev/docs/).
There is also an AI generated developer guide at
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/neurocyte/flow).
Accuracy may vary. Check details against the referenced source code.
# Configuration # Configuration
Configuration is mostly dynamically maintained with various commands in the UI. Configuration is mostly dynamically maintained with various commands in the UI.
It is stored under the standard user configuration path. Usually It is stored under the standard user configuration path. Usually `~/.config/flow`
`~/.config/flow` on Linux. %APPDATA%\Roaming\flow on Windows. Somewhere magical on Linux. %APPDATA%\Roaming\flow on Windows. Somewhere magical on MacOS.
on MacOS.
There are commands to open the various configuration files, so you don't have to 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 manually find them. Look for commands starting with `Edit` in the command palette.
palette.
File types may be configured with the `Edit file type configuration` command. File types may be configured with the `Edit file type configuration` command. You
You can also create a new file type by adding a new `.conf` file to the can also create a new file type by adding a new `.conf` file to the `file_type`
`file_type` directory. Have a look at an existing file type to see what options directory. Have a look at an existing file type to see what options are available.
are available.
Logs, traces and per-project most recently used file lists are stored in the Logs, traces and per-project most recently used file lists are stored in the
standard user application state directory. Usually `~/.local/state/flow` on standard user application state directory. Usually `~/.local/state/flow` on
Linux and %APPDATA%\Roaming\flow on Windows. Linux and %APPDATA%\Roaming\flow on Windows.
# Key bindings and commands # Key bindings and commands
Press `F1` to view the online manual.
Press `F4` to switch the current keybinding mode. (flow, vim, emacs, etc.) 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+shift+p` or `alt+x` to show the command palette.
Press `ctrl+F2` to see a full list of all current keybindings and commands. Press `ctrl+F2` to see a full list of all current keybindings and commands.
@ -216,7 +153,6 @@ 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 in the same directory to create an entirely new keybinding mode. Keybinding
changes will take effect on restart. changes will take effect on restart.
# Terminal configuration # Terminal configuration
Kitty, Ghostty and most other terminals have default keybindings that conflict Kitty, Ghostty and most other terminals have default keybindings that conflict
@ -230,10 +166,36 @@ kitty_mod ctrl+alt
For Ghostty each conflicting binding has to be reconfigured individually. 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
- linting (diagnostics) and code navigation (goto definition) via language server
- multi cursor editing support
- first class mouse support (yes, even with a scrollbar that actually works properly!) (Windows included)
- vscode compatible keybindings (thanks to kitty keyboard protocol)
- vim compatible keybindings (the standard vimtutor bindings, more on request)
- user configurable keybindings
- excellent unicode support including 2027 mode
- 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)
- find in files
- command palette
- stuff I've forgotten to mention...
# Features in progress (aka, the road to 1.0)
- completion UI/LSP support for completion
- persistent undo/redo
- file watcher for auto reload
# Features planned for the future
- multi tty support (shared editor sessions across multiple ttys)
- multi user editing
- multi host editing
# Community # Community
![Discord](https://img.shields.io/discord/1214308467553341470) ![Discord](https://img.shields.io/discord/1214308467553341470)
Join our [Discord](https://discord.com/invite/4wvteUPphx) server or use the Join our [Discord](https://discord.com/invite/4wvteUPphx) server or use the discussions section here on GitHub
discussions section here on GitHub to meet with other Flow users! to meet with other Flow users!

View file

@ -6,8 +6,8 @@
.dependencies = .{ .dependencies = .{
.syntax = .{ .syntax = .{
.url = "git+https://github.com/neurocyte/flow-syntax?ref=master#9106b13b4c98b145229ad643e7869f29c7b0816b", .url = "git+https://github.com/neurocyte/flow-syntax?ref=master#45d79d41562f3d9dcc53c7e2c38d7d829a2b2834",
.hash = "flow_syntax-0.1.0-X8jOoZQTAQCV2bjyceUHrRl_iu41imzTDLGT5R-XwT_9", .hash = "flow_syntax-0.1.0-X8jOoY0TAQDl5k1-sO2KfcxrECQAsjwocoRmh3sbwEoi",
}, },
.flags = .{ .flags = .{
.url = "git+https://github.com/neurocyte/flags?ref=main#984b27948da3e4e40a253f76c85b51ec1a9ada11", .url = "git+https://github.com/neurocyte/flags?ref=main#984b27948da3e4e40a253f76c85b51ec1a9ada11",