Wayland is a communication protocol that specifies the communication between a display server and its clients, as well as a C library implementation of that protocol. A display server using the Wayland protocol is called a Wayland compositor, because it additionally performs the task of a compositing window manager.
Overview
Wayland is developed by a group of volunteers initially led by Kristian Høgsberg as a free and open-source community-driven project with the aim of replacing the X Window System with a secure and simpler windowing system for Linux and other Unix-like operating systems. The project's source code is published under the terms of the MIT License. The Wayland project also develops an implementation of a Wayland compositor called Weston.
The Wayland Display Server project was created by Red Hat developer Kristian Høgsberg in 2008. Høgsberg was driving through the town of Wayland, Massachusetts when the underlying concepts "crystallized," hence the name (Weston and Maynard are also nearby towns in the same area, continuing the reference).
Software Architecture
The Wayland protocol follows a client–server model in which clients are graphical applications requesting the display of pixel buffers on the screen, and the server (compositor) is the service provider controlling the display of these buffers. The reference implementation is designed as a two-layer protocol:
- A low-level layer (wire protocol) that handles inter-process communication between client and compositor, and the marshalling of data. This layer is message-based and usually implemented using Unix domain sockets.
- A high-level layer built upon it that handles the information needed to implement the basic features of a window system. This layer is implemented as "an asynchronous object-oriented protocol."
The high-level layer is automatically generated from a description of the protocol elements stored in XML format. The reference implementation is split into two libraries: libwayland-client for clients and libwayland-server for compositors.
Core Interfaces
The core interfaces of the Wayland protocol include:
- wl_display – the core global object encapsulating the protocol itself
- wl_registry – the global registry object where the compositor registers all global objects
- wl_compositor – represents the compositor, combining different surfaces into one output
- wl_surface – represents a rectangular area on the screen
- wl_buffer – provides displayable content when attached to a surface
- wl_output – represents the displayable area of a screen
- wl_pointer, wl_keyboard, wl_touch – objects representing input devices
- wl_seat – represents a set of input/output devices in multiseat configurations
Rendering Model
The Wayland protocol does not include a rendering API. Instead, Wayland follows a direct rendering model in which the client must render the window contents to a buffer shareable with the compositor. Clients can render using software (CPU) renderers with shared memory buffers, or more typically, render directly into video memory buffers using hardware-accelerated APIs such as OpenGL, OpenGL ES, or Vulkan.
Comparison with X Window System
Key differences between Wayland and X include:
- Architecture: The composition manager is a separate, additional feature in X, while Wayland merges display server and compositor as a single function.
- Compositing: Compositing is optional in X but mandatory in Wayland. In Wayland, compositing is "passive," meaning the compositor receives pixel data directly from clients.
- Rendering: The X server itself can perform rendering, while Wayland does not expose any rendering API and delegates such tasks to clients.
- Security: Wayland isolates the input and output of every window, achieving confidentiality, integrity, and availability. The original X design lacked these security features.
- Networking: The X Window System was designed to run over a network. Wayland does not offer network transparency by itself, though compositors can implement remote desktop protocols.
XWayland
XWayland is an X Server running as a Wayland client, capable of displaying native X11 client applications in a Wayland compositor environment. Its goal is to facilitate the transition from X Window System to Wayland environments.
Wayland Compositors
Display servers that implement the Wayland protocol are called Wayland compositors. Notable examples include:
- Weston – the reference implementation from the Wayland development team
- KWin – the default Wayland compositor of KDE Plasma
- Mutter – the default Wayland compositor of GNOME
- Sway – a tiling Wayland compositor based on wlroots, a drop-in replacement for the i3 X11 window manager
- Hyprland – a tiling Wayland compositor written in C++
- labwc – a wlroots-based stacking compositor used as the default of Raspberry Pi OS
Adoption
Notable Linux distributions that default to using Wayland include Debian, Fedora, Ubuntu, Red Hat Enterprise Linux, Manjaro, Pop!_OS, and Raspberry Pi OS. Major desktop environments including GNOME, KDE Plasma, and Enlightenment have been ported from X11 to Wayland. Toolkits supporting Wayland include GTK, Qt, EFL, SDL, GLFW, and FLTK.
History and Releases
Wayland became a freedesktop.org project in October 2010. The first release (version 0.85) was in February 2012, with version 1.0 released in October 2012 marking a stable wayland-client API. The project continues to release regular updates, with the latest stable version being Wayland 1.25 (March 2026), Weston 16.0.0 (July 2026), and wayland-protocols 1.49 (June 2026).