Devlog - 2025

April 24, 2025

tree-sitter parse error detection

Today I added error queries and they are used to check for tree-sitter parsing errors. If tree-sitter reports a syntax error it may be because of an error in the file, or just because the tree-sitter partial reparse has become confused due to over complicated edits. Either way we now trigger a full reparse to be safe and make sure that the syntax tree doesn’t get stuck in a bad state.

April 23, 2025

mini git status

The branch widget now displays a mini git status along with the branch name.

April 22, 2025

Ignore files ignored by git

Flow now loads the project file list from git if the project is contained in a git repository. This means that files ignored by git via it’s many configuration options are now also ignored by the flow file browser. Explicitly specifying the path to a file will still open it in flow and also store it in the project’s most recently used files list.

Also, the branch widget is now included in the default configuration of the status bar.

April 20, 2025

New widget: branch

Added a statusbar widget called branch that shows the current git branch if the current project is in a git repository.

April 18, 2025

Alpha blended highlight columns

Highlight columns are now rendered using alpha blending of the background color. They are also enabled now in the default configuration.

April 15, 2025

New command: copy_file_name

I added a command to copy the current file name and position to the system clipboard. This is very useful for grabbing something to use for setting a breakpoint, or for pasting into a bookmarks file. It’s bound to shift+alt+c for file name and line, column position and ctrl+k alt+c for just the file name. Also, if there are multiple cursors it will copy multiple entries on a line each. Nice for creating jump lists.

April 14, 2025

Improved installer script

The installer script is now significantly more intelligent. It will request permissions with sudo if the destination directory is not writable and it will check the version of the currently installed flow version before downloading to avoid re-downloading the same version. This makes it a pretty useful auto update tool.

April 08, 2025

Column highlight

Today brings a new configuration option: highlight_columns. This string contains a list of space separated columns numbers where flow should draw a border. This can help with manual wrapping of text as as visual indicator of how long the current line is.

April 08, 2025

Integer command arguments

Integer arguments are back! Now you can once again use integer prefixes for many commands. Most commands use the integer prefix as a repeat count, but the exact meaning is dependant on the command being executed. The current value of the prefix is displayed in the keybind widget in the status bar. Prefix digits are bound to alt+0 through alt+9 in flow and emacs mode and just the plain digit keys in vim and helix modes.

April 07, 2025

Atomic updates for vim & helix insert modes

I added init_command and deinit_command support for keybinding modes that allow us to now call pause_undo_history and resume_undo_history when entering/exiting insert modes. This means that insert modes will now create just one single undo step for the entire input made while in the mode.

March 26, 2025

Customizable themes

You can now customise the current theme in your local configuration directory without modifying flow itself. Just run the Customize theme command and flow will copy the current theme to your configuration directory and open it for you to edit.

March 26, 2025

Debug build warning

There is now a small warning on the home screen when you run a debug build. Debug builds are significantly slower than ReleaseFast builds. The build type is also now mentioned in the version information.

March 25, 2025

Widget parameters

Mini feature today. You can now add parameters to (some of) the status bar widgets by separating them from the widget name with a colon.

For example: linenumber:4,zero,digital.

March 25, 2025

Binary queries & fully async LSP

A few major behind the scene updates in the last week. Nothing directly user facing, but still worth mentioning here.

March 05, 2025

zig-0.14 released

Nightly builds are now on the freshly released zig-0.14.

March 04, 2025

Smart pairs and smarter open file

Today we have a couple of useful quality of life features.

A much improved smart_insert_pair command, and to go along with it, new commands smart_insert_pair_close and smart_delete_backwards. This pretty much completes smart pair handling as far as I am concerned and flow should generally do-the-right-thing when inserting or deleting paired characters like (), {}, [], "", etc.

Automatic file link parsing in selections when using the open_file command. What this means is that flow will automatically open files (if they actually exist) if you select the file path before pressing ctrl+o, including parsing for line number and column indexes. This is especially useful for command output buffer and means that you can easily jump to files in compiler errors or grep matches. Tip: use the expand_selection command to select a whole file path in a command output buffer.

February 06, 2025

Zig-0.14 issues

Wierd issues on macos with zig-0.14 today, so I have reverted the master branch to zig-0.13 with a force push and cherry-picked all the new features since the zig-0.14 update. There is now a zig-0.14 branch pointing to the zig-0.14 changes (where master used to be). I also added the build mode and zig version to the version info.

February 05, 2025

Bling!

Todays feature of the day is a little bit of bliiiiing. You can now select from four different digit styles for the line number gutter!

February 04, 2025

Switched to zig master

Flow Control is now on zig master once again! 🎉

41 files changed, 648 insertions(+), 623 deletions(-)

By far the most painful zig update in flow’s history!

January 27, 2025

Ephemeral buffers

Today’s update brings better support for ephemeral buffers. These buffers are used for task output, new files and the help buffer. They can only be saved by giving them a new name first with the save_as command and do not store undo info when closed unless first given a name. Also added is the new create_new_file command, bound by default to ctrl+shift+n.

January 26, 2025

Tasks

Today’s feature is a task runner. You can now run commands inside flow and have their output placed in a buffer. Tasks are remembered per project. The default keybinding for the task palette is alt+!.

January 24, 2025

Tabs widget

Today’s quality flow time brings a new tabs widget. Add it to your topbar config option to get a tab bar that you can use to switch buffers with the mouse or a keybinding to next_tab/previous_tab. You can close a tab with middle mouse click.

January 22, 2025

Delete buffer command

There is now a delete_buffer command that is bound to the delete key when in the buffer selector palette. Deleting a buffer will remove it from the buffers list and free it’s undo history.

January 21, 2025

Multi-buffer

Today’s feature of the day is multi-buffer support. Thanks to a new buffer manager module you can now switch buffers without first saving them. The recent files list has gained a dirty indicator so you can see which files need to be saved and there is a new command switch_buffer that will bring up a list of currently open buffers. The home screen now also has a save_all command for those times you just want to exit without saving each file individually first.

January 19, 2025

Lots and lots

A lot has happened over the last two weeks. Sorry about the lack of posts here in the devlog. Due to the huge uptick in community contributions I have been concentrating on getting PRs reviewed and merged. Here’s a list of highlights of whats new (in no particular order):

Oh, and one more thing:

January 02, 2025

Whitespace revamp

Today’s feature of the day: Much improved whitespace rendering. Flow now uses a map of the rendered view to process whitespace rendering after finishing the main render pass. This fixes a few minor whitespace rendering bugs, and more importantly, allows easy and fast rendering of more whitespace related features. There are new modes: leading, eol and tabs, to render just subset of whitespace. And, best of all, flow now highlights leading (ie. spaces before tabs) and trailing whitespace errors.

About this Devlog

I try to keep a log of major (and some minor) changes and new features going into flow as I work on them.

You can subscribe to this page via RSS and find more devlog entries in the archive.