GUI Creation

From Rust Community Wiki
Jump to navigation Jump to search

The areweguiyet page also tracks a number of other efforts, but may not be actively kept up to date.

The GUI libraries on this page have different goals. Some let you create stand-alone desktop applications, others are meant to be embedded inside your own render pipeline and some can run inside your browser by compiling to WebAssembly. Embeddable GUI libraries are usually meant for use in games and similar applications.

Rust Libraries[edit | edit source]

These are crates which contain mostly or only Rust code. Most of them share some common deficiencies, like a lack of font shaping and font fallback.[1][2][3][4] Some of these crates use Cargo vec.svgwinit for creating windows and handling input and inherit some of winit's input handling deficiencies.[5][6][7]

Despite these issues, many of these crates are perfectly usable for personal projects.

Crate name Status (latest version) Development Status (last updated) Embeddable Desktop WebAssembly Notes
Cargo vec.svgazul (home) Experimental (0.1.0) Stalled ( n/a, repository: 2020/03/10) no yes no Based on WebRender.
Cargo vec.svgconrod_core Experimental (0.70.0) Active ( 2020/05/9, repository: 2020/07/29) yes no unknown Part of the Piston project. Do not use the conrod crate, which is outdated. Used by Veloren (forked).
Cargo vec.svgbevy_ui Experimental (0.1.0) Active ( 2020/08/10, repository: 2020/08/20) unknown unknown unknown Part of the emerging Bevy game engine.
Cargo vec.svgdruid Experimental (0.6.0) Active ( 2020/06/01, repository: 2020/07/26) no yes yes
Cargo vec.svgegui Experimental (0.1.2) Active ( 2020/06/10, repository: 2020/07/23) unknown yes yes Immediate mode GUI inspired by imgui.
Cargo vec.svgiced Experimental (0.1.1) Active ( 2020/04/15, repository: 2020/07/28) yes yes yes Inspired by Elm
Cargo vec.svgKAS Experimental (0.4.1) Active ( 2020/05/07, repository: 2020/07/21) yes no unknown Embedding support is a goal for the project.
Cargo vec.svgOrbTk Experimental (0.3.1-alpha3) Active ( 2020/08/13, repository: 2020/08/13) no yes yes Uses an ECS library under the hood. Part of the Redox project.

Rust bindings/wrappers[edit | edit source]

These crates aim to provide Rust-y interfaces to libraries/toolkits which are written in some language other than Rust.

Crate name Status (latest version) Development Status (last updated) Wraps Embeddable Desktop Notes
Cargo vec.svggtk (home) GTK+ 3 no yes
Cargo vec.svgfltk FLTK no yes
Cargo vec.svgimgui Dear ImGui (imgui) yes no Has been used in some farily notable games
Cargo vec.svgrelm GTK+ 3 (via Cargo vec.svggtk ) no yes Inspired by Elm
Cargo vec.svgsciter-rs sciter yes unknown Not open source. The "Free" plan does not allow static linking. Uses a mix of HTML, CSS and a custom scripting language to drive the GUI.

See also[edit | edit source]

References[edit | edit source]

  1. hecrj/iced#33 Text shaping and font fallback
  2. kas-gui/kas#13 Text processing
  3. kas-gui/kas-text#1 Design requirements
  4. linebender/druid#883 text work planning & discussion
  5. rust-windowing/winit#753 A keyboard input model
  6. rust-windowing/winit#734 Duplicate key events on macOS
  7. rust-windowing/winit#1488 macOS: Repeated key's ReceivedCharacter cancelled by previous key's keyUp event