Your desktop on an infinite 2D plane.

atlaswm is a Wayland compositor where windows live anywhere on an unbounded canvas — and your monitor is a viewport you pan across it, in both X and Y. niri's scrollable strip, in two dimensions.

Runs nested or as a real session Rust + Smithay NVIDIA-tested MIT

The plane is unbounded; the monitor is a window onto it. Pan in X and Y — or zoom out to an overview of everything.

A strip was a good idea. We made it a plane.

Scrollable tilers like niri free you from a fixed grid of workspaces — but along one axis. atlaswm keeps the freedom and adds the second dimension: arrange related work into clusters anywhere on the canvas, and travel between them.

1D — a scrollable strip
2D — an infinite plane

Your workflow, your way.

atlaswm isn't one more opinionated tiler — it's a toolbox. Planes, tags, scratchpads, groups, anchors, zoom/overview, binds, submaps and window rules are primitives you shape into the workflow you want. A few recipes:

niri-like niri

One row, pan along X, columns that scroll. atlaswm is niri — in 2D.

Uses: planes · columns · pan-x

# One row, scroll columns along X.
mod "super"
binds {
  "Mod+h" "focus-left"
  "Mod+l" "focus-right"
  "Mod+Shift+h" "move-left"
}
GIF

driftwm-like driftwm

Disconnected groups as clusters; pan, zoom and overview between them.

Uses: groups · overview · zoom

# Disconnected clusters; zoom out to roam.
binds {
  "Mod+n" "spawn-new-group"
  "Mod+Tab" "group-next"
  "Mod+z" "zoom-out"
  "Mod+o" "overview-toggle"
}
GIF

i3 / sway-like i3 / sway

Planes as workspaces, recursive splits and tabs, familiar i3 binds.

Uses: planes · splits · tabs

# Planes as workspaces, splits + tabs.
binds {
  "Mod+1" "plane-switch:1"
  "Mod+2" "plane-switch:2"
  "Mod+v" "spawn-split-v"
  "Mod+t" "toggle-tabs"
}
GIF

spatial hub-and-satellite spatial

Anchors and planes: a central hub with satellites; jump by anchor or mark.

Uses: anchors · marks · planes

# A hub with satellites; jump by anchor.
anchors {
  "hub"  x=0    y=0
  "mail" x=4000 y=0
}
binds { "Mod+a" "anchor-jump:hub" }
GIF

…or mix them. Build your own.

Everything a tiler should be — in 2D.

A pure, unit-tested layout core (columns, rows, cells, recursive splits, WM-level tabs) drives a Smithay compositor that runs nested for development or straight on the GPU as your login session.

2D tiling

Columns, rows, cells, recursive h/v splits and tab groups — placed anywhere on the plane.

Pan & zoom

Pan the viewport in X and Y; a zoom ladder ends in a fit-plane overview of the whole canvas.

Planes, tags & scratchpads

A pool of infinite planes, free-form tags, and gather/summon scratchpads to pull tagged windows together.

Animations

Pan, zoom, and window move/resize all glide — configurable easing, instant when you turn it off.

Bars & layer-shell

waybar, eww, fuzzel anchor to edges and reserve space. Ships an atlas-submap indicator.

Games & X11

XWayland, pointer-lock plus relative motion for mouse-look, idle-inhibit. Steam and Discord run.

Screen sharing

wlr-screencopy plus dmabuf and explicit-sync — Meet, OBS and wf-recorder capture your screen.

Configurable everything

A live-reloaded KDL config: binds, submaps, window rules, gaps, borders, colors, anchors.

See it in motion.

These slots are for real screen captures — a recording of panning the plane and the zoom-to-overview is the single most convincing thing here. Everything above is real, hand-made SVG.

GIF
PNG

Get started.

Try it nested under your current compositor in a couple of minutes, then pick it at your greeter when you're ready to daily-drive.

Nested (in a window under your current compositor):

nix develop  # enter the dev shell (Rust + Smithay deps)
cargo run

Minimal config — ~/.config/atlaswm/config.kdl:

# Or install the flake and pick "atlaswm" at your greeter.
mod "super"
gaps 8
animations { enable #true  duration-ms 150 }

Read the docs.

Mental model, installation, configuration, keybindings and concepts — the full reference for shaping atlaswm into your workflow.

Open the documentation →