the Wayland protocol are: wl_display the core global object, a special object to encapsulate the Wayland protocol itself wl_registry the global registry object, in which the compositor registers all the global objects that it wants to be available to all clients wl_compositor an object that represents the compositor, and is in charge of combining the different surfaces into one output wl_surface an object representing a rectangular area on the screen, defined by a location, size and pixel content wl_buffer an object that, when attached to a wl_surface object, provides its displayable content wl_output an object representing the displayable area of a screen wl_pointer, wl_keyboard, wl_touch objects representing different input devices like pointers or keyboards wl_seat an object representing a seat (a set of input/output devices) in multiseat configurations A typical Wayland client session starts by opening a connection to the compositor using the wl_display object. This is a special local object that represents the connection and does not live within the server. By using its interface the client can request the wl_registry global object from the compositor, where all the global object names live, and bind those that the client is interested in. Usually the client binds at least a wl_compositor object from where it will request one or more wl_surface objects to show the application output on the display. Wayland extension interfaces A Wayland compositor can define and export its own additional interfaces. This feature is used to extend the protocol beyond the basic functionality provided by the core interfaces, and has become the standard way to implement Wayland protocol extensions. Certain compositors can choose to add custom interfaces to provide specialized or unique features. The Wayland reference compositor, Weston, used them to implement new experimental interfaces as a testbed for new concepts and ideas, some of which later became part of the core protocol (such as wl_subsurface interface added in Wayland 1.4). Extension protocols to the core protocol XDG-Shell protocol XDG-Shell protocol (see freedesktop.org for XDG) is an extended way to manage surfaces under Wayland compositors (not only Weston). The traditional way to manipulate (maximize, minimize, fullscreen, etc.) surfaces is to use the wl_shell_*() functions, which are part of the core Wayland protocol and live in . An implementation of the xdg-shell protocol, on the contrary, is supposed to be provided by the Wayland compositor. So you will find the header in the Weston source tree. , XDG-Shell