Features

Feature Overview

Window Management
  • Tiling: Split-tree layout with interactive splitting and adjustable split axes.

  • Tabbed Frames: Frames hold windows as tabs, reordered by drag-and-drop.

  • Floating Windows: Windows detached from tiling, freely positioned and stacked.

  • Full Screen Windows: Per-output fullscreen with direct scanout.

  • Window Tagging: Tag windows, then gather them into one frame.

Workspaces and Desktops
  • Workspaces: Independent tiling trees, assigned per output.

  • Virtual Desktops: Multiple desktops, cycling occupied and empty.

  • Multiple Monitors: Per-output workspaces, moving items between outputs.

  • Scratchpad: Floating workspaces to be toggled on demand.

Navigation
  • Directional Focus: Vim-style focus and window movement between frames.

  • Overviews: Zoomed desktop and window overviews.

  • Window Switcher: A carousel for cycling windows.

Input
  • Configurable Keymaps: Layered keymaps bound from Python.

  • Focus Follows Pointer: Optional sloppy focus with pointer warping.

  • Context Menus: Pointer-region menus and button bindings.

Extensibility
  • Python API: Configured and scripted entirely in Python.

  • Operators and Hooks: Actions bound to keys or fired on events.

  • Config Reload: Live reload without restarting.

  • IPC: Run Python in the compositor with ionwl-cmd.

Rendering
  • Multi-GPU: Automatic GPU detection.

  • VRR: Variable refresh rate for supported displays.

  • Direct scanout: Zero-copy rendering for full-screen applications.

  • Render threads: Per output threaded rendering to eliminate drawing contention across outputs.

Wayland Protocols

Core

wl_compositor, wl_subcompositor, wl_shm, wl_seat (keyboard, pointer, touch), wl_output with xdg-output, and wl_data_device for clipboard and drag-and-drop.

Shell and window management

xdg-shell

The primary protocol for application windows.

xdg-decoration / kde-server-decoration

Negotiate server-side vs client-side window borders.

xdg-activation

Lets a client request focus for another window (used for launch feedback and click-to-activate).

xdg-foreign

Export a surface so another client can position a window relative to it (dialogs across process boundaries).

xdg-toplevel-icon

Per-window icons supplied by the client.

wlr-layer-shell

Anchored surfaces for bars, panels, launchers, and wallpapers (waybar, tofi).

xwayland-shell

Surface association for XWayland clients.

Output and display

fractional-scale / viewporter

Non-integer HiDPI scaling and buffer scaling/cropping.

linux-dmabuf

Zero-copy GPU buffer sharing.

presentation-time

Accurate frame-presentation feedback for clients.

single-pixel-buffer

Solid-color buffers without a full allocation.

wlr-gamma-control

Color-temperature adjustment (gammastep, wlsunset).

wlr-output-management

External display configuration (kanshi, wlr-randr, nwg-displays).

Input

relative-pointer / pointer-constraints

Pointer locking and warp-free relative motion (games, 3D viewports).

cursor-shape

Clients name a cursor from the theme instead of supplying a bitmap.

tablet

Graphics-tablet input.

virtual-keyboard

Injected keyboard input (on-screen keyboards, IME).

keyboard-shortcuts-inhibit

Let a client (e.g. a nested compositor or remote-desktop viewer) capture compositor shortcuts.

idle-inhibit

Clients suppress idle/screen-blanking (video players).

Clipboard and selection

primary-selection

Middle-click paste.

wlr-data-control / ext-data-control

Clipboard managers read and set selections (wl-clipboard, clipman).

Screen capture and session

wlr-screencopy

Screenshots and screen recording (grim, wf-recorder).

wlr-foreign-toplevel-management

Window lists for taskbars and docks.

ext-session-lock

Secure screen lockers (swaylock, gtklock).

Not yet supported

text-input / input-method

Input-method editors for non-Latin scripts (fcitx5, ibus).

ext-idle-notify

Idle detection for automatic screen locking (swayidle).

pointer-gestures

Touchpad swipe and pinch gestures reported to clients.

tearing-control

Opt-in screen tearing for latency-sensitive fullscreen games.

security-context

Sandbox identification, letting the compositor restrict privileged protocols per client (Flatpak).

Limitations

  • Output scale is global (no support for mixed output scaling).