#gui #ui #toolkit


Data-oriented Rust UI design toolkit

6 releases

✓ Uses Rust 2018 edition

new 0.3.3 Nov 11, 2019
0.3.2 Nov 5, 2019
0.1.1 Nov 2, 2018

#40 in GUI

Download history 8/week @ 2019-07-29 11/week @ 2019-08-05 13/week @ 2019-08-12 18/week @ 2019-08-19 15/week @ 2019-08-26 15/week @ 2019-09-02 9/week @ 2019-09-09 22/week @ 2019-09-16 10/week @ 2019-09-23 8/week @ 2019-09-30 5/week @ 2019-10-07 5/week @ 2019-10-14 18/week @ 2019-10-21 45/week @ 2019-10-28 113/week @ 2019-11-04

100 downloads per month
Used in 1 crate


10K SLoC


Data-oriented Rust User Interface Design toolkit

Druid is a new Rust-native UI toolkit, still in early stages. Its main goal is performance, also aiming for small binary size and compile time, fast startup, and very easy build configuration (just cargo run). It currently supports Windows, macOS, and GNU/Linux.

Raph gave a talk at the July 2018 SF Rust Meetup (video, slides) about the design. Traditional object-oriented designs have proved to be cumbersome.

The layout protocol is inspired by Flutter. It is originally being developed primarily for use by xi-win, but has the potential to be useful for other applications. Due to its focus on performance and the relative paucity of toolkit-provided components, it is more likely to be useful for games and music software than general-purpose GUI applications. It is currently used as the basis for Synthesizer IO.

The druid-win-shell layer

The druid-win-shell layer is primarily an abstraction for displaying a window and receiving events. As such, it is an alternative to winit.

Ideally all Windows-specific logic (including all uses of unsafe) are isolated to the druid-win-shell subcrate, and druid proper is cross platform and with no unsafe code. That is not entirely the case now.


This crate is currently in early stages. More features will be built out as needed for use in the flagship apps, and this will inevitably lead to API instability. Features hoped-for soon include:

  • More of the basic widgets
  • Incremental presentation
  • Some simple theming support

The biggest single obstacle to porting is 2d graphics, as druid currently uses Direct2D (and DirectWrite for text). One way forward is to create a 2d graphics abstraction.





run cargo build


On macOS, druid requires cairo; see gtk-rs dependencies for installation instructions.

You may also need to set your PKG_CONFIG_PATH; assuming you have installed cairo through homebrew, you can build with,

$> PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig" cargo build


On Linux, druid requires gtk+3; see gtk-rs dependencies for installation instructions.

run cargo build


In addition to wrappers for mature UI toolkits (mostly C++), conrod and azul are interesting Rust-native efforts with promise to become usable.

With a focus on 2D games, ggez also looks promising.


We gladly accept contributions via GitHub pull requests. Please see CONTRIBUTING.md for more details.

A very good place to ask questions and discuss development work is our Zulip chat instance, in the #druid channel.


The main author is Raph Levien.


~112K SLoC