Smithay project

The rusty smithy for wayland compositors

Version 0.2 of Smithay

I am happy to announce the 0.2 release of smithay. Smithay is a library for writing wayland compositors. With this release, it now contains all the fundamentals for building a working compositor.

A lot of things have changed since the 0.1 release one year ago. A large part of the crate has been completely rewritten, and work in smithay has also driven evolutions in its dependencies (a large part of which are also hosted in the smithay project).

What has changed

Here's a quick summary of the changes that occured since 0.1.


Smithay now comes with anvil, a reference implementation of a compositor built on smithay. It helps a lot with developing and testing new features and reproducing bugs. Anvil can be started as a Wayland or X11 client (using winit), or directly in a tty.

Picture of anvil running on my laptop

Anvil running on my laptop, with alacritty started

The DRM rewrite

The whole graphics backend has been deeply refactored by @Drakulix, especially the DRM-handling code and the GBM and EGL abstractions on top of it, which are now clearly separated from one another. This improved the structure and clarity of the API, and paved the groundwork for future integration of new features, like atomic modesetting, EGLStreams, and vulkan support.

Full core-protocol support

Smithay now supports the entirety of the core wayland protocol, making it capable of running most wayland-native apps, such as most programs built on Qt5, Gtk+3 or winit (including alacritty).

Port to wayland-server 0.21

Smithay has been ported to wayland-server version 0.21 and calloop, which opens the way for use of the pure-rust implementation of the wayland protocol. Smithay can already run with it, but support for OpenGL clients on the rust implementation is still blocked, waiting on some evolutions of the dma-buf protocol extensions.

Basic XWayland support

Smithay is now capable of starting and monitoring the XWayland server, for running X apps under wayland. However the XWayland server actually also requires to have an X window manager implemented in the wayland compositor, which Smithay does not have yet.

The path forward

There is of course still a lot of work to do, but the path forward can now be split into several more or less independent tasks, now that the core is mostly established. You can have a detailed view of them in the issue tracker, but here is a quick overview of the biggest ones:

  • Support for input events from touchscreens (#48)
  • Implementation of an X Window Manager for XWayland support (#25)
  • Support for the DMABUF protocol extension (#96)
  • Implement classic shell interactions in anvil (#94)
  • Write some stand-alone focused examples for smithay (#99)
  • Design and introduce higher-level abstractions over the low-level support currently implemented

If you are interested in the project, feel free to drop by in our matrix chatroom, which is also bridged to mozilla's IRC at #smithay and to gitter at smithay/Lobby.

A large part of the work needed on smithay does not require extensive knowledge on the wayland protocol or the linux internals, and we are happy to mentor anyone interested in getting familiar with the project!