A small and light tiling Wayland compositor in Rust.
Note
monotile is under active development. Usable as a daily driver, but some features are still missing (multi-monitor, screen sharing etc).
Window management:
- Dynamic tiling layout (main/stack)
- Floating windows (auto-detected from hints, rules, or toggled)
- Tag system with per-tag layout and window order
- Keyboard-driven (mouse optional)
- Rule-based runtime configuration
- Autostart (shell script)
- Smart borders and smart gaps
- Focus-follows-mouse
- Screen lock and idle protocols
Rendering and backend:
- DRM/KMS backend with session handling
- Hardware accelerated (EGL/GBM render path, GLSL shaders)
- Server-side decorations (rounded corners, shadows, borders)
- Damage tracking and direct scanout
- Layer shell (panels, bars, overlays)
- Clipboard protocols (wl-copy/wl-paste)
- IPC for status bars (monotile-ipc-v1, dwl-ipc-v2)
- Screen sharing
Not yet implemented:
- Multi-monitor support
- Output management
- Gamma control
- HiDPI / multi-DPI support
- Hide cursor when typing
- Monocle layout
Requires Rust 1.85 or later.
Add the flake to your system config and rebuild, or install to your user profile:
nix profile add github:lx7/monotileFor development:
nix develop
cargo build --releasesudo pacman -S rust pkgconf wayland libxkbcommon libdrm libinput seatd mesa libdisplay-info
cargo build --release# rust toolchain (1.85+)
# Debian 13+ / Ubuntu 25.04+:
sudo apt-get install -y cargo
# older distros:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# build dependencies
sudo apt-get install -y libwayland-dev libxkbcommon-dev libgbm-dev libdrm-dev libudev-dev libinput-dev libseat-dev libegl1-mesa-dev libdisplay-info-dev
# runtime dependencies
sudo apt-get install -y libwayland-server0 libxkbcommon0 libgbm1 libudev1 libinput10 libseat1 libegl1 libdisplay-info2
cargo build --releaseConfiguration files are in $XDG_CONFIG_HOME/monotile/:
config.ron: Rule-based configurationautostart.sh: Commands to run on startup
On first run, monotile creates a default config if none exists. Edit it to customize keybindings, layout, appearance, and input devices.
Custom paths can be specified: monotile [-c <config>] [-s <autostart>]
monotile is not a desktop environment. You need a terminal emulator and an application launcher. The defaults use foot and fuzzel - adjust the config to match your setup.
| Key | Action |
|---|---|
| Super+Return | Open terminal (foot) |
| Super+D | Open launcher (fuzzel) |
| Super+Shift+Q | Close window |
| Super+Space | Toggle fullscreen |
| Super+Shift+Space | Toggle floating |
| Super+← | Focus previous window |
| Super+→ | Focus next window |
| Super+Shift+← | Swap window with previous in stack |
| Super+Shift+→ | Swap window with next in stack |
| Super+1..9 | Switch to tag |
| Super+Shift+1..9 | Move window to tag |
| Ctrl+Alt+Backspace | Quit |
| Super+LMB | Drag to move floating windows |
| Super+RMB | Drag to resize floating windows |