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_outputwithxdg-output, andwl_data_devicefor 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).