Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Installation

FlowWM is a Windows-only tiling window manager. Getting it running takes about five minutes: install the binaries, install a hotkey daemon, generate your config, and start.

Already installed and just want the command list? Jump to the Command Reference.

Prerequisites

FlowWM is a native Windows application and links against Win32, so you need:

  • Windows 10 or 11. (FlowWM does not run on Linux, macOS, or WSL — it uses Win32 APIs directly.)
  • The Rust MSVC toolchain — install via rustup and select stable-x86_64-pc-windows-msvc. The MinGW / GNU toolchains will not link.
  • Visual Studio Build Tools — the “Desktop development with C++” workload (supplies the MSVC linker and the Windows SDK). Even the cargo install path compiles locally, so this is required either way.
  • AutoHotkey v2 (recommended) — FlowWM ships no keybinder of its own. AutoHotkey v2 is the companion the --ahk flag generates a script for. Anything that can run a command on a keypress will also work (whkd, PowerToys, etc.), but you’d write that integration yourself.

Step 1 — Install the binaries

You have two paths. cargo install is recommended because it puts flow and flowd on your PATH automatically.

cargo install flow-wm

That’s it. Both binaries are installed onto your PATH.

From source

git clone https://github.com/CCpcalvin/flow-wm.git
cd flow-wm
cargo build --release

The binaries land in target\release\ — you’ll need to add that folder to your PATH (or copy the binaries somewhere already on it). For the full build walkthrough, see Building from Source in the Developer Guide.

Verify the install:

flow --version

Step 2 — Generate your config and hotkeys

flow config init --ahk

This writes two files into your config directory:

FilePurpose
%USERPROFILE%\.config\flow\flow.tomlApplication config — column counts, padding, animation, borders, etc. Sensible defaults; heavily commented.
%USERPROFILE%\.config\flow\flow.ahkA ready-to-use AutoHotkey v2 script binding every command to a Alt + <key> chord.

Existing files are never overwritten. Re-running flow config init --ahk is safe — it only writes files that don’t yet exist. To regenerate, delete the file first.

If you’d rather not use AutoHotkey, run flow config init (without --ahk) and wire up your own keybinder. The Command Reference lists every flow dispatch <command> call you’d need to bind.

The config directory resolves in this priority order: --config <dir> flag → FLOW_CONFIG_DIR env var → default %USERPROFILE%\.config\flow\. See Config & Persistence in the Developer Guide for the full resolution chain.

Step 3 — Start the daemon

flow start --ahk

This launches the flowd daemon in the background, and once it’s listening, starts your flow.ahk script alongside it. You should now be able to press Alt + T to tile the focused window.

Want this on every login? Run this once:

flow enable-autostart --ahk

It registers both the daemon and the hotkey script to launch at logon. (Use flow disable-autostart to undo.)

Step 4 — Sanity check

flow query all     # dump the daemon's view of every window/workspace (JSON)
flow dispatch focus right    # same as Alt + l
flow stop          # shut it down

If flow query all returns JSON, the daemon is up and the named-pipe IPC is working. From here, the Command Reference is the canonical list of what you can do, and the Config Reference covers customising flow.toml.

Troubleshooting

flow isn’t recognised

The binaries aren’t on your PATH. If you installed via cargo install, check that %USERPROFILE%\.cargo\bin is on your PATH (rustup usually adds it). If you built from source, see Building from Source → Putting flow on your PATH.

The daemon doesn’t respond to hotkeys

Two things have to be running: flowd (the daemon) and flow.ahk (the hotkey script). flow start --ahk starts both; flow start alone starts only the daemon. Check both processes are alive in Task Manager.

If you changed ModKey in flow.ahk, make sure the key you chose is one AutoHotkey recognises — see the AutoHotkey key list.

The daemon won’t start

Capture an isolated log and inspect it:

flow start --log-file <path>

The file is reset on each launch, so it contains only that run. To raise the verbosity, set RUST_LOG=trace first. See Contributing & Reporting Issues for how to file a useful bug report once you have a log.

Where to go next