Rust implementation of the wayland protocol (client and server).
Branch: master
Clone or download
Latest commit 28ac189 Feb 17, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
fuzz fuzzing, bug fix Jul 19, 2018
tests travis: cross-test full-rust and native-lib Feb 17, 2019
wayland-client version 0.23.0 Feb 17, 2019
wayland-commons version 0.23.0 Feb 17, 2019
wayland-protocols version 0.23.0 Feb 17, 2019
wayland-server version 0.23.0 Feb 17, 2019
wayland-sys version 0.23.0 Feb 17, 2019
.gitignore gitignore: add rls May 21, 2018
.gitmodules protocols: add bindings to wlr-protocols Sep 27, 2018
.rustfmt.toml cargo fmt Apr 20, 2018
.travis.yml travis: cross-test full-rust and native-lib Feb 17, 2019 version 0.23.0 Feb 17, 2019
Cargo.toml travis: cross-test full-rust and native-lib Feb 17, 2019
LICENSE.txt travis: bump wayland libs version requirements Nov 27, 2018
doc_index.html readme & doc: add wayland-commons Apr 21, 2018
rust.css Add a book and the infra to publish it Feb 22, 2017 travis: cache the wayland libs Sep 5, 2018 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 native_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 native_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 6 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

And 2 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


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