GUI Creation

From Rust Community Wiki

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

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 0.28.7 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 1.0.0-alpha4 (home) Experimental (0.1.0) Stalled (crates.io: n/a, repository: 2020/03/10) no yes no Based on WebRender.
Cargo vec.svgconrod_core 0.76.1 Experimental (0.70.0) Active (crates.io: 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 0.11.3 Experimental (0.1.0) Active (crates.io: 2020/08/10, repository: 2020/08/20) unknown unknown unknown Part of the emerging Bevy game engine.
Cargo vec.svgdruid 0.8.3 Experimental (0.6.0) Active (crates.io: 2020/06/01, repository: 2020/07/26) no yes yes
Cargo vec.svgegui 0.23.0 Experimental (0.1.2) Active (crates.io: 2020/06/10, repository: 2020/07/23) unknown yes yes Immediate mode GUI inspired by imgui.
Cargo vec.svgiced 0.10.0 Experimental (0.1.1) Active (crates.io: 2020/04/15, repository: 2020/07/28) yes yes yes Inspired by Elm
Cargo vec.svgKAS 0.14.0-alpha Experimental (0.4.1) Active (crates.io: 2020/05/07, repository: 2020/07/21) yes no unknown Embedding support is a goal for the project.
Cargo vec.svgOrbTk 0.3.1-alpha4 Experimental (0.3.1-alpha3) Active (crates.io: 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

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 0.18.1 (home) GTK+ 3 no yes
Cargo vec.svgfltk 1.4.13 FLTK no yes
Cargo vec.svgimgui 0.11.0 Dear ImGui (imgui) yes no Has been used in some farily notable games
Cargo vec.svgrelm 0.24.1 GTK+ 3 (via Cargo vec.svggtk 0.18.1 ) no yes Inspired by Elm
Cargo vec.svgsciter-rs 0.5.58 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

References

  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