1
0
Fork 0
3 Feature and Support Matrix
EvilEKo edited this page 2026-05-11 12:06:48 -04:00

Feature and support matrix

What works on which backend. Honest and narrow claims.

For the long-form status write-up, see Feature status and limitations.


Backend summary

Backend Mode Tested
headless Deterministic in-process runtime, no display Heavily tested (unit + integration)
winit Nested compositor in a window Heavily tested (unit + live smoke)
udev Standalone tty/DRM compositor Tested (unit + virt harness), still experimental

Feature matrix

Feature headless winit udev/tty
Canvas / viewport logic
Focus stack
Window model + rules
Placement fallback
Move / resize commands
Key bindings
Lua config loading
Lua hooks (headless)
Lua hooks (live)
Runtime snapshot (IPC)
Interactive move/resize
Gesture hooks
Draw hooks
Pointer zoom (Super+scroll)
Middle-click pan
Trackpad swipe/pinch nav
XDG shell (xdg-toplevel)
XDG popups
Layer-shell (wlr-layer-shell) ⚠️ maps, not rendered
XDG decoration negotiation
Output management (wlr-output-management) ⚠️ position-only ⚠️ position-only
XWayland
Clipboard / data device
Primary selection
DnD (compositor-originated)
Session lock
Idle inhibit
IPC screenshot (PPM)
Multi-output ⚠️ narrow contract
Output hotplug ⚠️ basic ⚠️ basic
VT switching
TTY session state machine
Tap-to-click / natural scroll

Legend

  • — proven, tested, claimed
  • ⚠️ — partially supported, narrow scope, or backend-qualified (read the caveats)
  • — not yet supported
  • — not applicable

Feature caveats (backend-qualified)

Layer-shell on tty

Layer-shell clients map and participate in session artifacts (event log, IPC snapshots), but the tty (udev) render path does not yet visually render wlr-layer-shell surfaces. The panel probe proves protocol/lifecycle correctness, not visual rendering. The winit backend renders layer-shell surfaces normally.

Output management

Only position changes and head enable/disable are currently supported. Mode, custom mode, transform, and scale changes are rejected. Multi-output behavior follows a narrow explicit contract; broad hotplug coverage is still pending.

TTY multi-output

Startup with multiple outputs builds a deterministic layout from tty.output_layout. Pointer crossing and output lookup follow that layout. Output removal prunes stale state. Broad real-hardware multi-output confidence is still pending.

Pointer zoom / middle-click pan / gesture nav

Rust directly applies built-in canvas behavior. Lua config can enable/disable via boolean flags but cannot repurpose the input for other behaviors. A known design limitation.


See also