Skip to content
Fi3w0Public

About

Tiling, scrolling and infinite-canvas Wayland compositor in one: switch layouts live without closing a window. Water-themed, Lua-configured, built in Rust on Smithay.

Topics

Resources

Contributing

Security policy

Stars

12 stars

Watchers

0 watching

Forks

Repository files navigation

TideWM: modular by design, fast by default, yours to shape

A modular Wayland window manager that stays out of your way.

License Status Rust Stars Discord

Install · Three ways to work · Wave config · Docs · Changelog

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.

TideWM demo: tiling, floating glass windows and a wave workspace transition

Watch in full quality (mp4)

Three ways to work

Classic Scroll Ocean
Classic: tiles fill the screen, numbered workspaces below Scroll: a strip of columns longer than the screen Ocean: a camera frame over a larger canvas of windows
Tiles and workspaces. BSP, master/stack or cascade, numbered workspaces per monitor, floating when you want it. An endless strip of columns. New windows open beside you instead of squeezing the rest. Stack or tab a column, cycle preset widths. An infinite canvas. Group windows into reefs or drop them anywhere, then pan and zoom. One camera per monitor, or one shared view.
tidectl engine scroll   # every open window comes along
Coming 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.

What you get

🧩 Built from parts you choose
Waybar, Quickshell, eww, rofi, hyprlock, swww: standard Wayland protocols mean your tools just work. TideWM manages windows and leaves the desktop to you.

⚡ Light, and measured
About 50 MB for plain tiling and 60–70 MB with every effect on (AMD, PSS). With the defaults, an idle desktop renders nothing. tidectl perf and tidectl doctor show what your setup costs.

🎨 Your look, down to the shader
Rounding, gradient borders, shadows, frost and water glass, open/close/move animations, custom GLSL. The water effects are a toggle each, or all off.

🖥️ Real-desktop ready
Mixed-scale monitors, hotplug, X11 apps via xwayland-satellite, screenshots, OBS and Discord screen sharing, session lock, tablets and touch.

🔌 Scriptable to the core
tidectl drives every action. tidectl subscribe streams window, workspace and focus events, so your bar never polls.

🌊 A little water, if you want it
Ripples on open, wave workspace transitions, windows that sway when dragged. Personality, not a requirement.

Real screenshots
Classic Ocean
Classic: tiled terminals and a frosted-glass floating window Ocean: a water-glass window over the zoomed-out canvas

Wave your best config!

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

Install

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 --release
Build 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 seatd

Screen 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.

Join in

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

Copyright (C) 2026 Fi3w0 and contributors. See LICENSING.md for scope, attribution and packaging details.


Built on Smithay. Inspired by and borrows implementation patterns from niri, driftwm, Hyprland, and sway.

About

Tiling, scrolling and infinite-canvas Wayland compositor in one: switch layouts live without closing a window. Water-themed, Lua-configured, built in Rust on Smithay.

Topics

Resources

Contributing

Security policy

Stars

12 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages