![]() |
a tiling window manager, |
Fork of GlazeWM — built for Windows on ARM, shaped by baklava and ambition.
LavaWM is a keyboard-driven tiling window manager for Windows, forked from the excellent GlazeWM v3. It inherits all the golden, flaky layers of GlazeWM and adds a few of its own:
- Ghost window cleanup (
wm-cleanup-windows) — manually sweep away stale windows - Fullscreen oscillation fix — stops RDP and other apps from fighting the WM in a rapid fullscreen/floating loop
- Windows on ARM (aarch64) first-class build support
- Can run side-by-side with a stock GlazeWM installation
- Simple YAML configuration
- Multi-monitor support
- Customizable rules for specific windows
- Integration with Zebar as a status bar
- Binding modes, window effects, and more
This project is managed largely by Claude Code (Anthropic's CLI agent). A human (@jack-work) steers the ship, reviews the output, and eats the baklava — but the bulk of the code changes, architecture exploration, bug investigation, and even this README were produced by an AI pair-programming session.
The author has so much baklava he needs help eating it all. That means:
- PRs are welcome and appreciated
- If you want to understand how something works, open an issue — teaching is half the fun
- If a dependency develops or something breaks, extra hands make light work
- If the WM does something weird, it might be the AI's fault. File a bug.
scoop bucket add lavawm https://github.com/jack-work/scoop-lavawm
scoop install lavawmGrab the latest zip for your architecture from Releases:
- x64:
lavawm-vX.Y.Z-x64.zip - ARM64:
lavawm-vX.Y.Z-arm64.zip
You'll need the Rust toolchain (nightly recommended for ARM targets):
git clone https://github.com/jack-work/lavawm.git
cd lavawm
cargo build --releaseBinaries land in target/release/:
lavawm.exe— the window managerlavawm-cli.exe— CLI client for commands/querieslavawm-watcher.exe— auto-restart watcher
# Start the WM (generates default config on first run)
lavawm start
# Or with a custom config
lavawm start --config="C:\path\to\config.yaml"Config lives at %userprofile%\.glzr\lavawm\config.yaml by default, or set LAVAWM_CONFIG_PATH.
LavaWM uses a separate config directory (~/.glzr/lavawm/), a separate single-instance mutex, and renamed binaries. You can have both installed — just don't run them at the same time (they share IPC port 6123 for Zebar compatibility).
On first launch, a default config is generated. Here's the cheat sheet:
Seriously — fork this repo and try modifying it yourself. The codebase is well-structured (thanks to the upstream GlazeWM team), and Claude Code can help you navigate it. Some ideas:
- Add your own WM commands
- Tweak the tiling algorithm
- Build integrations with your favorite tools
- Fix that one window that never tiles right
If you make something cool, changes are always appreciated upstream (to me). Open a PR at jack-work/lavawm and let's make it better together.
LavaWM uses the same YAML config format as GlazeWM v3. See the upstream config documentation for the full reference, or check the sample config.
Quick reference of LavaWM-specific commands:
| Command | Description |
|---|---|
wm-cleanup-windows |
Remove ghost windows (invalid HWNDs) from the tree |
wm-inject-ghost |
Debug: inject a fake ghost for testing cleanup |
- Fullscreen → minimize loop: Some windows (especially RDP clients) can oscillate between fullscreen and floating states. A per-window cooldown mitigates this, but edge cases remain. See upstream issues #1070, #906.
- Toggle fullscreen sometimes minimizes: If a window was minimized before going fullscreen,
toggle-fullscreenmay not restore correctly. The upstream fix (PR #1071) is included, but some edge cases persist.
This project is licensed under GPL-3.0, same as the upstream GlazeWM. See LICENSE for details.
You are free to fork, modify, and redistribute — but derivative works must also be GPL-3.0 and source must be made available.
- GlazeWM by glzr-io — the foundation this is built on
- i3wm — the original inspiration
- Zebar — the status bar that ties it all together
- Claude Code — the AI that wrote most of this
Baked with pistachios and honey by @jack-work
𝐋𝐀𝐕𝐀 — layer by layer

