Pick how your windows behave: tiled workspaces, scrolling columns or an endless canvas. Switch between them live without closing a single app. Everything else is yours too: your bar, your launcher, your look, one readable config file that reloads on save.
tidectl engine scroll # every open window comes alongComing from another window manager?
| You use… | Start with | What carries over |
|---|---|---|
| Hyprland, Sway, i3 | Classic | Dwindle-style tiling, per-monitor workspaces, scratchpads, submaps (mode), window rules, gaps, a JSON IPC socket |
| niri, PaperWM | Scroll | Scrolling columns, consume/expel, stacked and tabbed columns, preset widths, center-focused column |
| driftwm, a canvas desktop | Ocean | Pan/zoom camera, bookmarks, free placement, a whole-world minimap |
These describe the workflow, not drop-in config compatibility. TideWM's own guide: Spatial model.
|
🧩 Built from parts you choose |
⚡ Light, and measured |
|
🎨 Your look, down to the shader |
🖥️ Real-desktop ready |
|
🔌 Scriptable to the core |
🌊 A little water, if you want it |
Wave reads like a settings file and grows into a programming language only if you ask it to. Start with key = value and a few braces. It's as friendly as YAML, with no indentation traps and no quoting rules to memorize.
# ~/.config/tidewm/config.wave (created with working defaults on first launch)
engine = scroll
gaps = 10
border {
width = 2
}
@mod = SUPER
bind $mod+Return { spawn:kitty }
bind $mod+Q { close-window }
Save, and it's live. A typo shows you the file and line on screen while your last good config keeps running.
Underneath, it is Lua. The same file takes loops, functions, typed colors and durations, hardware checks and event handlers, so one config can follow you across every machine:
for i = 1, 9 do # nine workspace binds, one loop
bind $mod+Num$i { workspace:$i }
end
theme {
primary = #8EDDFF
deep = primary.darken(0.35) # colors are real values
}
if tide.gpu.vendor == "nvidia" then # per-machine settings, same file
gaps = 6
end
on "workspace-changed" { # react to your session
if tide.workspace == 3 then spawn("kitty --class notes") end
}
Split it with include, format it with wavefmt, ask the running session anything with tidectl eval. → The Wave guide · Every key and action
Note
TideWM is in beta and built by one person. It is a daily driver on Arch and Gentoo (AMD and NVIDIA); other distros should work, and reports are very welcome.
No systemd required. TideWM gets its seat through libseat, so it runs on OpenRC, runit (Void), s6 and friends with seatd or elogind.
| Distro | Command |
|---|---|
| Arch and derivatives | packaging/arch/install.sh |
| Gentoo | packaging/gentoo/install.sh |
| NixOS / Nix | nix run github:Fi3w0/TideWM |
| Anything else | ./install.sh after the build dependencies |
Then pick TideWM in your display manager. Details: packaging guide.
Tip
Just looking? Run it in a window inside your current desktop. Nothing on your system changes:
git clone https://github.com/Fi3w0/TideWM && cd TideWM
cargo run --locked --releaseBuild dependencies per distro
# Arch
sudo pacman -S pkg-config wayland systemd-libs libinput libxkbcommon mesa libdrm seatd
# Fedora
sudo dnf install pkgconf-pkg-config wayland-devel systemd-devel libinput-devel libxkbcommon-devel mesa-libEGL-devel mesa-libgbm-devel libdrm-devel libseat-devel
# Debian / Ubuntu
sudo apt install pkg-config libwayland-dev libudev-dev libinput-dev libxkbcommon-dev libegl1-mesa-dev libgbm-dev libdrm-dev libseat-dev
# Gentoo (systemd or OpenRC)
sudo emerge --ask dev-util/pkgconf dev-libs/wayland dev-libs/libinput x11-libs/libxkbcommon media-libs/mesa x11-libs/libdrm sys-auth/seatd sys-fs/eudev
# Void
sudo xbps-install -S pkg-config wayland-devel eudev-libudev-devel libinput-devel libxkbcommon-devel MesaLib-devel libdrm-devel libseat-devel seatdScreen sharing (OBS, Discord, browsers) needs --features screencast and clang/libclang at build time.
GL apps slow but TideWM smooth? Your user can't reach /dev/dri/renderD*; add the video group or a uaccess rule.
Default shortcuts
| Keys | Action | Keys | Action |
|---|---|---|---|
| Super Enter | Terminal | Super 1…0 | Workspace |
| Super Q | Close window | Super Shift 1…0 | Move to workspace |
| Super HJKL | Focus | Super O | Overview |
| Super Shift HJKL | Swap window | Super Tab | Cycle focus |
| Super V | Float | Super - | Scratchpad |
| Super F | Fullscreen | Super Shift Q | Quit TideWM |
Every bind lives in your keybinds.wave; nothing is hidden or hardcoded.
Like where TideWM is heading? ⭐ Give it a star
It takes one click and helps a one-person project reach people who would enjoy it.
Bug reports from new hardware are the most useful thing you can send right now. I build TideWM with help from AI coding agents and check every change on real hardware before trusting it.
Discord · Open an issue · Contribute · What's verified where
License
- TideWM code, including its bundled Wave configuration engine: GPL-3.0-or-later, see LICENSE.
- TideWM icon (
share/icons/tidewm.png): Creative Commons Attribution-ShareAlike 4.0 International. The faithful 4k logo stays CC BY-NC-SA 4.0 and is not packaged; see the logo notice. - Standalone Scorium: a separate project with its own custom source-available license, labelled PolyForm Strict 1.0.0. Its restrictions apply to that project; TideWM's bundled Wave code stays GPL.
- Bundled Adwaita Sans font: SIL Open Font License 1.1.
Copyright (C) 2026 Fi3w0 and contributors. See LICENSING.md for scope, attribution and packaging details.


