######## 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).