Are we GUI Yet?

The state of building user interfaces in Rust.

The roots aren't deep but the seeds are planted.

As a low level language, Rust is perfectly suitable for making user interfaces the old fashioned way, with native APIs. However, competing in today's world typically means supporting many platforms, and that makes using native APIs an unattractive option for many.

Rust's expressiveness and high level abstractions make it ideal for building intricate and complex user interfaces. Unfortunately, there is little consensus on what the best abstractions are.

There are a number of bindings available today to existing frameworks, but those looking for a mature, easy to use, and completely Rust-based solution will most likely find themselves out of luck.

Current approaches to building GUIs in Rust include interfacing with Electron and building GUIs with HTML (or a framework on top of it), while others have taken to using graphics APIs and various wrappers to emulate classical widgets. The cross platform parallel rendering engine Webrender, built for Servo and usable in Firefox Nightly, takes this latter approach and is multi-platform, but is more of a base for a GUI framework than one in itself.

Stay in the loop.

If you're working on or writing about GUIs in Rust, please contribute! Each news entry can either be a post contributed to the repo or a link back to your blog, Reddit thread, etc. See README for details.

Here are also some popular and recommended community links submitted to the site:

Slint 1.5: Embracing Android, Improving Live-Preview by Slint Team

https://slint.dev/blog/slint-1.5-released

Zed is now open source by Nathan Sobo

https://zed.dev/blog/zed-is-now-open-source

Roadmap for the Xilem backend in 2024 by Oliver Faure

https://linebender.org/blog/xilem-backend-roadmap/

Here are the most recent posts on AreWeGuiYet:

#Rust2019 Are We GUI Yet? by Dustin Bensing

/newsfeed/rust2019
See more posts

Ecosystem

Select a tag (or tags) below to only show relevant crates. All crates will be shown when no tags are selected.

  • Bindings
  • CSS
  • Embedded
  • FLTK
  • GTK
  • HTML
  • Immediate mode API
  • MacOS
  • QML
  • Qt
  • Reactive API
  • WebGPU
  • WebRender
  • WinApi
  • iOS
  • piet
  • proc-macro
  • winit

Azul

[crate · repo · docs]

Azul GUI is a free, functional, reactive GUI framework for rapid development of desktop applications written in Rust and C, using the Mozilla WebRender rendering engine.

crates.io
  • webrender

cacao

[crate · repo · docs]

Rust bindings for AppKit (macOS/Airyx/GNUStep, beta) and UIKit (iOS/tvOS, alpha).

crates.io
  • macos
  • ios

conrod-core

[crate · repo · docs]

An easy-to-use, 100% Rust, extensible 2D GUI library.

crates.io
  • immediate

core-foundation

[crate · repo · docs]

Bindings to Core Foundation for macOS

crates.io
  • bindings
  • macos

Cushy

[crate · repo · docs]

A wgpu-powered graphical user interface (GUI) library with a reactive data model

crates.io
  • winit

CXX-Qt

[crate · repo · docs]

CXX-Qt is a library that automatically generates code to transfer data between Rust and C++ through common interfaces such as QObjects that can be exposed directly into QML. It uses the cxx crate for safe interaction between Rust and C++.

crates.io
  • bindings
  • qt
  • qml

Dioxus

[crate · repo · docs]

Elegant React-like library for building user interfaces for desktop, web, mobile, SSR, liveview, and more.

crates.io

Dominator

[crate · repo · docs]

Zero-cost ultra-high-performance declarative DOM library using FRP signals

crates.io

druid

[crate · repo · docs]

(Discontinued) Druid is an experimental Rust-native UI toolkit. Its main goal is to offer a polished user experience. There are many factors to this goal, including performance, a rich palette of interactions (hence a widget library to support them), and playing well with the native platform.

crates.io
  • piet

egui

[crate · repo · docs]

An easy-to-use immediate mode GUI that runs on both web and native

crates.io
  • immediate

Floem

[crate · repo · docs]

UI library aiming to be extremely performant while providing world-class developer ergonomics. From the team that made the Lapce code editor.

crates.io
  • reactive
  • winit

fltk

[crate · repo · docs]

The FLTK crate is a crossplatform lightweight gui library which can be linked to statically to produce small, self-contained and fast binaries

crates.io
  • bindings
  • fltk

flutter_rust_bridge

[crate · repo · docs]

High-level memory-safe binding generator for Flutter/Dart <-> Rust

crates.io
  • bindings

Freya

[crate · repo · docs]

Cross-platform native GUI library powered by Dioxus and Skia.

crates.io
  • skia
  • winit
  • dioxus

fui

[crate · repo · docs]

MVVM-oriented (properties, observable collections, bindings), ui! macro, multiplatform, renderer-agnostic, with styles.

crates.io
  • winit
  • proc-macro

GemGui

[crate · repo · docs]

GUI application library

crates.io

GPUI

[crate · repo · docs]

A hybrid immediate and retained mode, GPU accelerated, UI framework, designed to support a wide variety of applications

crates.io
  • macos

GTK 3

[crate · repo · docs]

Rust bindings for the GTK+ 3 library

crates.io
  • bindings
  • gtk

GTK 4

[crate · repo · docs]

Rust bindings of the GTK 4 library

crates.io
  • gtk
  • bindings

Iced

[crate · repo · docs]

A renderer-agnostic GUI library for Rust focused on simplicity and type-safety. Inspired by Elm.

crates.io

imgui

[crate · repo · docs]

High-level Rust bindings to dear imgui

crates.io
  • bindings
  • immediate

iui

[crate · repo · docs]

Simple, small, easy to distribute GUI bindings.

crates.io
  • bindings

KAS

[crate · repo · docs]

The toolKit Abstraction System leverages generics and macros to compose widgets with encapsulated user data, provides a powerful event-handling model and scales to at least 100'000 widgets per window.

crates.io
  • winit
  • webgpu
  • proc-macro

Leptos

[crate · repo · docs]

Leptos is a full-stack, isomorphic Rust web framework leveraging fine-grained reactivity to build declarative user interfaces.

crates.io

lvgl

[crate · repo · docs]

LVGL bindings for Rust. A powerful and easy-to-use embedded GUI with many widgets, advanced visual effects (opacity, antialiasing, animations) and low memory requirements (16K RAM, 64K Flash).

crates.io
  • bindings
  • embedded

Makepad

[crate · repo · docs]

Makepad is a new VR, web and native-rendering UI framework.

crates.io
  • webgpu

masonry

[crate · repo · docs]

Data-oriented Rust UI design toolkit.

crates.io

native-windows-gui

[crate · repo · docs]

A rust library to develop native GUI applications on the desktop for Microsoft Windows. Native-windows-gui wraps the native win32 window controls in a rustic API

crates.io
  • bindings
  • proc-macro
  • winapi

Pax

[crate · repo · docs]

User interface language and 2D layout engine for cross-platform apps

crates.io

qmetaobject

[crate · repo · docs]

A framework empowering everyone to create Qt/QML applications with Rust. It does so by building QMetaObjects at compile time, registering QML types (optionally via exposing QQmlExtensionPlugins) and providing idiomatic wrappers.

crates.io
  • proc-macro
  • bindings
  • qt
  • qml

qt_widgets

[crate · repo · docs]

Ritual Qt bindings

crates.io
  • bindings
  • qt

relm

[crate · repo · docs]

Asynchronous, GTK+-based, GUI library, inspired by Elm, written in Rust

crates.io
  • bindings
  • gtk

Relm4

[crate · repo · docs]

An idiomatic GUI library inspired by Elm and based on gtk4-rs

crates.io
  • gtk
  • bindings
  • macos
  • css

Rinf

[crate · repo · docs]

Rust for native business logic, Flutter for flexible and beautiful GUI

crates.io
  • bindings
  • flutter
  • cross-platform

rstk

[crate · repo · docs]

A Rust binding for the Tk graphics toolkit. Tk is suitable for creating simple GUI programs or interactive graphical displays. This library supports a large portion of the Tk API, in a generally rust-like style.

crates.io
  • tk

rui

[crate · repo · docs]

Experimental Declarative UI library

crates.io
  • winit
  • ios
  • macos
  • webgpu

rust-qt-binding-generator

[crate · repo · docs]

Generate code to build Qt applications with Rust

crates.io
  • bindings
  • qt
  • qml

sciter-rs

[crate · repo · docs]

Rust bindings for Sciter - Embeddable HTML/CSS/script engine (cross-platform desktop GUI toolkit). Also capable with DirectX / OpenGL.

crates.io
  • html
  • css

Slint

[crate · repo · docs]

Slint is a toolkit to efficiently develop fluid graphical user interfaces for any display: embedded devices and desktop applications. It comes with a fast OpenGL renderer, a designer-friendly markup language and is written in Rust. Triple-licensed: GPLv3, Royalty-free, and Commercial.

crates.io
  • proc-macro
  • winit
  • embedded
  • macos

Tauri

[crate · repo · docs]

Tauri is a framework for building tiny, blazing fast binaries for all major desktop platforms.

crates.io
  • html
  • macos
  • gtk

tinyfiledialogs

[crate · repo · docs]

High-level Rust binding for the tinyfiledialogs C library.

crates.io
  • bindings
  • tooling

Tk

[crate · repo · docs]

Rust bindings for Tk GUI library

crates.io
  • bindings
  • tk

vgtk

[crate · repo · docs]

A declarative UI framework for GTK

crates.io
  • gtk

Vizia

[crate · · docs]

A declarative desktop GUI framework

crates.io
  • winit

WebRender

[crate · repo · docs]

A GPU accelerated 2D renderer for web content

crates.io
  • webrender

windows

[crate · repo · docs]

Rust for Windows

crates.io
  • bindings
  • winapi

WinSafe

[crate · repo · docs]

Windows API and GUI in safe, idiomatic Rust.

crates.io
  • bindings
  • winapi

Xilem

[ · repo · ]

An experimental Rust architecture for reactive UI