#wayland #codegen

build wayland-scanner

Wayland Scanner for generating rust APIs from XML wayland protocol files. Intented for use with wayland-sys. You should only need this crate if you are working on custom wayland protocol extensions. Look at the crate wayland-client for usable bindings.

91 releases

✓ Uses Rust 2018 edition

0.24.1 Dec 13, 2019
0.24.0 Sep 14, 2019
0.23.6 Sep 6, 2019
0.23.5 Jun 13, 2019
0.2.0 Nov 19, 2015

#5 in GUI

Download history 12217/week @ 2019-10-03 9647/week @ 2019-10-10 11423/week @ 2019-10-17 12533/week @ 2019-10-24 11930/week @ 2019-10-31 11526/week @ 2019-11-07 11246/week @ 2019-11-14 10432/week @ 2019-11-21 11539/week @ 2019-11-28 13840/week @ 2019-12-05 18868/week @ 2019-12-12 9325/week @ 2019-12-19 14453/week @ 2019-12-26 13407/week @ 2020-01-02 12145/week @ 2020-01-09 967/week @ 2020-01-16

51,958 downloads per month
Used in 376 crates (7 directly)

MIT license


crates.io Build Status codecov

Wayland rust crates

This project contains rust crates for using the wayland protocol, both client side and server side.

There are two ways to use them:

  • By default, they use a pure rust implementation of the protocol
  • If you set the use_system_lib cargo feature, they will rather act as bindings on top of the wayland system C libraries, and this will add methods to access pointers to the C objects in the API. You'll need to use this feature if you need to interact with a C library that requires wayland objects (typically to intialize an OpenGL context)

If you use the use_system_lib feature, the crates thus obviously require that the wayland C libs are installed on your system. You can however require that they are dynamically loaded at startup rather than directly linked by setting the dlopen flag. This can be useful if you want to ship a binary that should gracelly handle the absence of these libs (by fallbacking to X11 for example).

This repository actually hosts 8 crates. The 3 main crates you'll likely want to use:

  • wayland-client and wayland-server are the main crates for client and server side bindings
  • wayland-protocols regroups bindings on the official protocol extentions available

There are also two auxilliary crates:

  • wayland-egl, which is necessary client-side for OpenGL integration
  • wayland-cursor, which helps with loading cursor images from the system temes for use in your apps

And finally 3 internal crates, that you'll need only for integrating a custom protocol extension:

  • wayland-commons contains the protocol logic that can be shared between client-side and server-side
  • wayland-sys is the actual C bindings, on which the crates are built
  • wayland-scanner is the crate used to convert the XML protocol specifications into rust code


The documentation for the master branch is available online.

The documentation for the releases can be found on docs.rs:


Requires at least rust 1.40 to be used, and version 1.15 of the wayland system libraries if using the use_system_lib cargo feature.

Chat and support

For general quick questions you can get answers in the chat room.

The chat room is bridged over multiple chat servers, here are 3 options on how to connect to the chat: