Skip to content

Instantly share code, notes, and snippets.

@Fuseteam
Forked from probonopd/Wayland.md
Last active December 23, 2025 17:33
Show Gist options
  • Select an option

  • Save Fuseteam/0a65f3e601c75cb720f7cfc79b879980 to your computer and use it in GitHub Desktop.

Select an option

Save Fuseteam/0a65f3e601c75cb720f7cfc79b879980 to your computer and use it in GitHub Desktop.
a simple slightly biased comparison between x11 and wayland

Feature comparison the X11 and wayland protocol

Please do fact-check and suggest corrections/improvements below.

✅ Supported ⚠️ Available with limitations or only present op some systems ❌ Not available

Functionality Xorg Wayland
Performance ✅ Best (DistroWatch) ⚠️ Worse (?) (DistroWatch)
Power consumption ? ?
RAM usage ✅ ~150 MB lower (Phoronix) ⚠️ ~150 MB higher (Phoronix)
Nvidia GPUs ✅ Well supported by proprietary Nvidia driver, also older hardware (open source driver Nouveau never worked satisfactorily) ⚠️ Turing (launched in 2018) or later
Multi-monitor ✅ Supported via XRandR, Xinerama (TheServerHost, KDE Blog) ✅ Stable, dynamic hotplug, ✅ multi-monitor support, ❌ no protocol to choose primary display (KDE Blog, CBT Nuggets)
Screen Recording / Capture ✅ Supported via X APIs; easy screen & window recording (Xlib Manual, OBS Wiki) wlr-screencopy and/or ext-image-copy-capture or the Screencast Portal.
Input Devices / Event Routing XInput, XInput2, global intercept (XInput2 Docs) Input Capture Portal
Input Injection ✅ Via XTEST, XSendEvent (XTEST Spec) Remote Desktop Portal.
Global Hotkeys / Key Grabs XGrabKey()/XGrabButton() (Xlib Docs) Global Shortcuts Portal,
Window Positioning / Stacking ✅ Clients move/resize windows (Xlib Ref) ⚠️ Only compositor controls window positioning (Wayland FAQ, KDE Dev), 2 Years Later Wayland Is Still Debating A Basic Feature
Clipboard Access ✅ Full/explicit, ICCCM selections (ICCCM) Clipboard Portal.
Drag and Drop / Copy and Paste ✅ Xdnd, Motif (Xdnd Spec), Motif (Motif DND) ⚠️ wl_data_offer, wl_data_device_manager, wl_data_source, wl_data_device dragging between X11 and Wayland applications seems flaky (?)
Touch / Gesture Support XInput2 (XInput Multi-Touch) wl_touch, gestures via zwp_pointer_gestures_v1
Tablet Support XInput2 (libinput Tablet) zwp_tablet_manager_v2
Remote Display / Network Transparency ✅ X11 protocol, SSH forwarding (OpenBSD FAQ, XForwarding) Remote Desktop Portal.
Screen Configuration XRandR direct (xrandr manpage) wlr-output-management and associated tools like wlr-randr.
Global menus ✅ Works ❌ Not natively available—requires qt_extended_surface set_generic_property which may not be present on every system
Window Management Hints (size, position) XSetWMHints, XSetNormalHints (ICCCM) ❌ Position not supported, only size
Window Title / Icon Name XSetWMName, XSetIconName (ICCCM) xdg_toplevel.set_title/xdg_toplevel.set_app_id
Window State (iconic, withdrawn, etc.) XSetWMState (ICCCM) ⚠️ Handled by compositor (Wayland FAQ)
Window Protocols (WM_DELETE_WINDOW) ✅ ICCCM, WM_DELETE_WINDOW (ICCCM) xdg_toplevel.close
Window Class / Instance XSetClassHint (ICCCM) ❌ Not supported (Wayland FAQ)
Window Transience (dialogs, popups) XSetTransientForHint (ICCCM) xdg_toplevel.set_parent
Input Focus (active window) XSetInputFocus (Xlib Ref) ⚠️ Managed by compositor (Wayland FAQ)
Selections ✅ Selections (ICCCM) Clipboard Portal.
Drag and Drop ✅ Motif/Xdnd (Xdnd Spec) ✅ Native protocol (Wayland/Drag&Drop)
Window Grouping XSetWMHints group (ICCCM) ✅ Identity based grouping via xdg_toplevel.set_app_id, ✅ Hierarchical grouping via xdg_toplevel.set_parent, ❌ No arbitary grouping
Input Model / Input Hint ✅ Input model hints (ICCCM) ❌ Not exposed/natively supported (Wayland FAQ)
Window Manager Communication ✅ ICCCM client-to-WM (ICCCM) ❌ No standard protocol (Wayland FAQ)
Colormap / Visual hints ✅ Colormap per ICCCM (ICCCM) ⚠️ Handled by compositor (Wayland FAQ)
Icon Pixmap / Bitmap ✅ ICCCM icon hints (ICCCM) ✅ fetches Icon through the desktopfile via xdg_toplevel.set_app_id
Urgency Hint XUrgencyHint (ICCCM) ⚠️ xdg_activation_v1 implemented by sway unclear it is implemented like this on other compositors
Window Shade (roll up/down) WM_STATE (mapped/unmapped state) ❌ Not supported
Window Always On Top (z-order) ✅ Applications can request stacking/z-order via WM_HINTS, window group, _NET_WM_STATE_ABOVE (EWMH) ⚠️ xdg-toplevel-tag
Exclusive Display Control / DRM Leasing ⚠️ No protocol, possible with libdrm (libdrm) wp_drm_lease_v1
Transparency / Compositing ⚠️ With composite extension/compton/picom (wiki.archlinux) ✅ Built-in to the compositor (Wayland FAQ)
Color Management ⚠️ Apps/loaders like xiccd (XCM docs) wp-color-manager-v1
VSync / Tear-free Rendering ⚠️ Inconsistent, needs correct driver/config (AskUbuntu) ✅ Guaranteed by compositor; always tear-free (Wayland FAQ)
Security / App Isolation ⚠️ Via extensions, e.g., Xnamespace extension (The Register) ✅ Wayland isolates applications from each other. for many things they did via xorg they now have to go through portals.
Click into a window to terminate the application xkill ❌ Not natively available—some compositors may have proprietary mechanisms, which may not be present on every system
Click into a window to see its metadata xprop ❌ Not supported
Set and get metadata (properties) on windows to exchange information regarding windows ✅ X Atoms (Docs) ❌ Not supported
One window server used by virtually all desktop environments and distributions ✅ Xorg (and Xlibre) ⚠️ Every desktop environment comes with a different compositor, specifically build for their environment. compositor libraries like wlroots or mir can be shared between desktop environments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment