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

Building from Source

FlowWM is a native Windows binary built with the MSVC toolchain. This page is for contributors, or anyone who wants to build locally instead of installing from crates.io with cargo install flow-wm.

If you only want to use FlowWM, the high-level overview lives in the User Guide. This page is the build detail.

Prerequisites

  • Rust (stable, MSVC toolchain) — install via rustup.
  • Visual Studio Build Tools — the “Desktop development with C++” workload. FlowWM links against Win32, so the MSVC linker and the Windows SDK are required. The MinGW / GNU toolchains will not work.

Set the MSVC target as your default so every cargo invocation uses it:

rustup default stable-x86_64-pc-windows-msvc

Clone and Build

git clone https://github.com/CCpcalvin/flow-wm.git
cd flow-wm
cargo build               # debug build
cargo build --release     # optimised, stripped binaries

The two binaries — flowd.exe (daemon) and flow.exe (CLI client) — are written to target\debug\ or target\release\.

Putting flow on your PATH

flow config init and the other commands assume flow.exe is reachable from your shell. Either copy the built binaries into a directory that is already on your PATH, or add the release folder to PATH:

# Add the release folder to PATH for the current PowerShell session:
$env:PATH += ";$PWD\target\release"

# (Or, for a permanent user-scoped PATH update, use:
#  [Environment]::SetEnvironmentVariable("PATH", $env:PATH, "User") )

First Run

flow config init          # writes default config to %USERPROFILE%\.config\flow\
flow config init --ahk    # also writes flow.ahk — a ready-to-use AutoHotkey v2 script
flow start                # launches the daemon in the background

The default config directory follows the XDG-style convention %USERPROFILE%\.config\flow\ (so it reads as ~/.config/flow/ on a Linux mental model). You can override it with --config <dir> on flow start or the FLOW_CONFIG_DIR environment variable. See Config & Persistence for the full resolution chain.

Once the daemon is running, start your hotkey daemon (flow start --ahk, or flow enable-autostart --ahk to auto-launch both at login) and you’re tiling. See the User Guide for everyday usage.

Contributor Gates

Before sending a patch, make sure the usual gates pass:

cargo test                       # unit + integration tests
cargo clippy -- -D warnings      # lint (warnings are errors)
cargo fmt --check                # formatting check

Documentation builds:

mdbook build docs                                  # the mdBook you are reading

When adding or changing a config field, update both the Default impl in src/config/types.rs and the example file default-config.toml in the repo root — a test (default_config_toml_matches_compiled_defaults) enforces they stay in sync. See Config & Persistence and Design Decisions for why code is the single source of truth for defaults.