diff --git a/README.md b/README.md index 2ee9245..023f065 100644 --- a/README.md +++ b/README.md @@ -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! diff --git a/build.zig.zon b/build.zig.zon index d3b9973..e2c8c0b 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -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",