Core Wayland window system code and protocol
Find a file
Julian Orth 6ab970464b protocol: add wl_display_upgrade global
This global allows the IPC library to upgrade the version of the
wl_display global. To ensure maximum flexibility, there are strict
requirements on the connection state at the time of the upgrade. In
particular, after the compositor has destroyed the wl_display_upgrade
object, the wl_display is the only object in the connection.

Since there are many consumers of wl_display and wl_registry, and the
version of these objects is fixed after the upgrade, care must be taken
not to break any of these consumers. Since no consumer checks the
version of these objects and there is no way to get a wl_registry with a
lower version, incrementing the minor version cannot change the
semantics of existing messages and no new events can be added to
wl_registry. As an exception, new events can be added to wl_display
since those events are handled internally by the IPC library which is
also in charge of upgrading the version.

An additional change that could be made in version 2 of wl_display is
adding a wl_display.delete_server_id request, implementing symmetric
delete_id. A global that wants to make full use of destructor events
could then specify that the global must only be exposed on a wl_registry
whose version (and therefore the version of the wl_display) is at least
2.

Signed-off-by: Julian Orth <ju.orth@gmail.com>
2026-03-16 18:34:23 +01:00
.gitlab/issue_templates gitlab: make issue template the default 2023-11-21 15:44:31 +00:00
cursor cursor: fix discards 'const' qualifier 2026-03-03 21:36:37 +00:00
doc doc: add frozen=true interface attribute 2026-03-05 12:00:35 +00:00
egl egl: Make wayland-egl symbols check depend on wayland_egl 2025-06-08 17:30:55 +00:00
protocol protocol: add wl_display_upgrade global 2026-03-16 18:34:23 +01:00
src protocol: add wl_display_upgrade global 2026-03-16 18:34:23 +01:00
tests Fix typos 2026-03-03 08:17:13 -03:00
.editorconfig editorconfig: follow wayland-protocols XML style 2026-01-22 11:08:28 +02:00
.git-blame-ignore-revs fix .git-blame-ignore-revs revision 2026-02-02 14:00:28 +01:00
.gitignore build: drop autotools 2021-03-05 09:15:04 +00:00
.gitlab-ci.yml ci: upgrade FreeBSD to v14.4 2026-03-10 12:31:35 +01:00
.mailmap Add a .mailmap file 2023-03-25 11:17:32 -05:00
.triage-policies.yml Add a triage-policies file for bugbot 2023-07-07 21:18:08 +10:00
CONTRIBUTING.md CONTRIBUTING: fix typo "excercising" 2020-12-17 16:03:14 -05:00
COPYING COPYING: Update to MIT Expat License rather than MIT X License 2015-06-12 15:31:21 -07:00
git-blame-ignore-revs add .git-blame-ignore-revs file 2026-02-02 14:54:52 +02:00
meson.build build: bump version to 1.24.91 for the RC1 release 2026-03-05 19:10:51 +01:00
meson_options.txt doc: make DocBook validation optional 2026-02-04 15:12:04 +00:00
README.md readme: convert to Markdown 2023-02-13 19:57:15 +01:00
release.sh release.sh: Don't push *all* tags 2023-01-16 10:03:54 +00:00
releasing.txt Add release.sh 2022-07-14 08:04:43 +00:00
wayland-scanner.m4 build: check wayland-scanner version 2020-01-16 17:25:06 +01:00
wayland-scanner.mk Pass input/output files as arguments to wayland-scanner 2017-08-18 15:20:24 +03:00

Wayland

Wayland is a project to define a protocol for a compositor to talk to its clients as well as a library implementation of the protocol. The compositor can be a standalone display server running on Linux kernel modesetting and evdev input devices, an X application, or a wayland client itself. The clients can be traditional applications, X servers (rootless or fullscreen) or other display servers.

The wayland protocol is essentially only about input handling and buffer management. The compositor receives input events and forwards them to the relevant client. The clients creates buffers and renders into them and notifies the compositor when it needs to redraw. The protocol also handles drag and drop, selections, window management and other interactions that must go through the compositor. However, the protocol does not handle rendering, which is one of the features that makes wayland so simple. All clients are expected to handle rendering themselves, typically through cairo or OpenGL.

Building the wayland libraries is fairly simple, aside from libffi, they don't have many dependencies:

$ git clone https://gitlab.freedesktop.org/wayland/wayland
$ cd wayland
$ meson build/ --prefix=PREFIX
$ ninja -C build/ install

where PREFIX is where you want to install the libraries.

See https://wayland.freedesktop.org for documentation.