Compare commits

...

7 commits

2 changed files with 113 additions and 75 deletions

184
README.md
View file

@ -1,57 +1,89 @@
# Flow Control: a programmer's text editor
This is my Zig text editor. It is under active development, but usually stable
and is my daily driver for most things coding related.
This is my Zig text editor. It is under active development, but very stable
and is my daily driver for almost everything.
[![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
- A modern terminal with 24bit color and, ideally, kitty keyboard protocol support. Kitty,
Foot and Ghostty are the only recommended terminals at this time. Most other terminals
will work, but with reduced functionality.
- NerdFont support. Either via terminal font fallback or a patched font.
- Linux, MacOS, Windows, Android (Termux) or FreeBSD.
- A UTF-8 locale
- A modern terminal with **24bit color** and, ideally, **kitty keyboard
protocol** support. **Kitty**, **Foot** and **Ghostty** are the recommended
terminals at this time. **Zellij** also works well. Most other terminals will
work, but likely with reduced functionality.
- **NerdFont** support. Either via terminal font fallback or a patched font.
- 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
Binary release builds are found here: [neurocyte/flow/releases](https://github.com/neurocyte/flow/releases/latest)
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
```
There is an [installation guide](https://flow-control.dev/installation) on the
main website, and source, release and nightly build binary
[downloads](https://flow-control.dev/downloads).
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)
# Building
Make sure your system meets the requirements listed above.
Flow builds with zig 0.15.1 at this time. Build with:
Flow builds with zig 0.15.2 at this time. Build with:
```shell
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.
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
@ -65,15 +97,20 @@ zig build -Doptimize=ReleaseSafe -Dtarget=aarch64-linux-musl --prefix zig-out/aa
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
The binary is:
```shell
zig-out/bin/flow
```
The Flow Control binary is called `flow`.
Place it in your path for convenient access:
@ -87,8 +124,8 @@ 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.
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.
```shell
scp zig-out/bin/flow root@otherhost:/usr/local/bin
@ -125,25 +162,51 @@ Show supported language names with `--list-languages`.
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 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.
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.
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.
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.
# Key bindings and commands
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.
@ -153,6 +216,7 @@ 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.
# Terminal configuration
Kitty, Ghostty and most other terminals have default keybindings that conflict
@ -166,36 +230,10 @@ 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
- 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
![Discord](https://img.shields.io/discord/1214308467553341470)
Join our [Discord](https://discord.com/invite/4wvteUPphx) server or use the discussions section here on GitHub
to meet with other Flow users!
Join our [Discord](https://discord.com/invite/4wvteUPphx) server or use the
discussions section here on GitHub to meet with other Flow users!

View file

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