| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | AB | AC | AD | AE | AF | AG | AH | AI | AJ | AK | AL | AM | AN | AO | AP | AQ | AR | AS | AT | AU | AV | AW | AX | AY | AZ | BA | BB | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | EGUI | Cushy | Iced | MakePadUI | Floem | Vizia | Freya | Zng | Notes | Pax | Notes | Slint | Yew | Relm4 | Tk | Flutter | Crux | QMetaObject | Ribir | ||||||||||||||||||||||||||||||||||||
2 | Url | https://github.com/emilk/egui | https://crates.io/crates/zng | https://www.pax.dev/ | https://github.com/slint-ui/slint/tree/master/api/rs/slint | https://yew.rs/ | https://relm4.org/ | https://peterlane.codeberg.page/rstk/ | https://github.com/redbadger/crux | https://ribir.org/ | |||||||||||||||||||||||||||||||||||||||||||||
3 | Repo | https://github.com/khonsulabs/cushy | https://github.com/iced-rs/iced/tree/master/examples | https://github.com/makepad/makepad | https://github.com/lapce/floem | https://github.com/vizia/vizia | https://github.com/marc2332/freya | https://github.com/zng-ui/zng | https://github.com/paxengine/pax | https://github.com/slint-ui/slint | https://github.com/yewstack/yew | https://codeberg.org/peterlane/rstk/ | https://github.com/fzyzcjy/flutter_rust_bridge | https://github.com/redbadger/crux | https://github.com/woboq/qmetaobject-rs | https://github.com/RibirX/Ribir | |||||||||||||||||||||||||||||||||||||||
4 | Docs | https://cushy.rs/v0.4.0/guide/ | https://book.iced.rs/index.html | https://makepad.notion.site/Makepad-Architecture-v1-1-e7937c8893074cb79f687a792b5e7495 | https://docs.rs/floem/latest/floem/ | https://book.vizia.dev/ | https://book.freyaui.dev/index.html | https://zng-ui.github.io/doc/zng/index.html | https://docs.slint.dev/latest/docs/rust/slint/ | https://relm4.org/book/stable/introduction.html | https://oooutlk.github.io/tk/intro.html | https://docs.flutter.dev/ | https://ribir.org/docs/introduction/ | ||||||||||||||||||||||||||||||||||||||||||
5 | Intro video | https://www.youtube.com/@ectonDev | https://www.youtube.com/watch?v=XrR4VCKB0cQ | https://www.youtube.com/watch?v=rC4FCS-oMpg | https://www.youtube.com/watch?v=crI_raloHgo | https://youtu.be/WBcv4V-whHk | https://www.youtube.com/watch?v=cWCZms92-1g&t=5s | ||||||||||||||||||||||||||||||||||||||||||||||||
6 | Status | Active, Less experimental than others | Active, Experimental | Active | Active, Experimental | Primary driver is Lapce which intends to switch to Xilem | Experimental | Yes | Yes | Experimental for Desktop | Yes | Unmaintained (archived repo) | Yes | Yes | Alpha | ||||||||||||||||||||||||||||||||||||||||
7 | Runtime | winit | wgpu, winit | wgpu/winit | Own / Native | skia+(winit|baseview) | Webrender | Pax-runtime | Custom | winit/gpu | |||||||||||||||||||||||||||||||||||||||||||||
8 | Focus | Native/Web | Desktop apps | Simple/toy desktop apps. | Desktop apps | Desktop apps | Desktop/Mobile/Web | Web-style apps | Embedded | Desktop is not ready. | Web apps | App core, not UI | |||||||||||||||||||||||||||||||||||||||||||
9 | Mode/Architecture | Immediate mode | Reactive | ELM | Immediate mode (sort-of) | Reactive | Reactive (lens) | Reactive (dioxus) | Reactive (?) | ||||||||||||||||||||||||||||||||||||||||||||||
10 | License | MIT/Apache | MIT/Apache | MIT | MIT | MIT | MIT | MIT | Paid? | Confusing/misleading FAQ | MIT | ||||||||||||||||||||||||||||||||||||||||||||
11 | Tests | Very bad | `cargo test` runs 0 tests | Very bad | `cargo test` runs 0 tests | Some | |||||||||||||||||||||||||||||||||||||||||||||||||
12 | occurences of `#[test]` | 31 | But some are actually for the GUI! | 7 | 44 (excluding `lib` folder) | Mostly untested | 127 | 88 | 99 | 101 | |||||||||||||||||||||||||||||||||||||||||||||
13 | Coverage | Very bad | Very bad | Very bad | Very bad | Very bad | |||||||||||||||||||||||||||||||||||||||||||||||||
14 | No. of Dependencies for example | 300+ | 268 | Tour | 85 | 293 | widget gallery | 275 | widget gallery | 476 | ui | 420-540 | `window` and `multi` | Gallery | 113 | TodoMVC | |||||||||||||||||||||||||||||||||||||||
15 | Contributors | 473 | 6 | Tiny community. | 221 | Fairly active community in discord | 41 | Only 5 active forks, can't find any examples on github with a 'makepad-widgets' cargo dependency | 50 | 28 | Small community, but fairly active | 22 | 2 | 6 | 410 | 14 | |||||||||||||||||||||||||||||||||||||||
16 | Github Dependents | 17968 | https://github.com/emilk/egui/network/dependents | 22 | https://github.com/khonsulabs/cushy/network/dependents | ||||||||||||||||||||||||||||||||||||||||||||||||||
17 | Year created | 2018 | 856bbf4dae4a69693a0324da34e8b0dd3754dfdf | 2023 | 2019 | 2021 | Initial commit on 2021/09/17 | 2019 | |||||||||||||||||||||||||||||||||||||||||||||||
18 | tabbed-document-ui example url | https://github.com/hydra/egui-tabbed-document-ui-example | https://github.com/hydra/cushy/tree/tabbed-document-ui-example-with-elm/examples/tabbed-document-ui | https://github.com/hydra/iced/tree/tabbed-document-ui-example/examples/tabbed_document_ui | https://github.com/hydra/makepad/tree/tabbed-document-ui/examples/tabbed_document_ui | https://github.com/hydra/floem/tree/tabbed-document-ui/examples/tabbed-document-ui | https://github.com/hydra/vizia/blob/tabbed-document-example/examples/tabbed_document.rs | ||||||||||||||||||||||||||||||||||||||||||||||||
19 | Native file-picker | No | Has example | Yes | via rfd | Yes | Maybe | See FileDialog | Yes | No, use rfd | Yes | No | |||||||||||||||||||||||||||||||||||||||||||
20 | Native error dialogs | No | Yes | via rfd | Yes | No | Yes | No | |||||||||||||||||||||||||||||||||||||||||||||||
21 | Window control (title, full screen, focus, minimize, drag) | Minimal (size, icon, resize) | Some | Yes | focus, full-screen, etc. | No | |||||||||||||||||||||||||||||||||||||||||||||||||
22 | Multi-window | Yes | Yes | Yes | See 'multiwindow' example | No | |||||||||||||||||||||||||||||||||||||||||||||||||
23 | Image support | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Good | ? | |||||||||||||||||||||||||||||||||||||||||||||
24 | SVG support | Yes | via egui_extras | Maybe | No examples | Yes | Yes | Yes | Maybe | Uses webrender, but no example found. | |||||||||||||||||||||||||||||||||||||||||||||
25 | Markdown support | Yes | No | Yes | 288 deps | Maybe | Incomplete | No | Yes | No | Yes | ? | ? | ||||||||||||||||||||||||||||||||||||||||||
26 | Clipboard | Yes | Yes | Yes | Yes | ctrl+c/x/v works in string/text widget | Yes | see 'shader_editor' example | |||||||||||||||||||||||||||||||||||||||||||||||
27 | Localization/Internationalization | Yes | In-progress | See https://github.com/khonsulabs/cushy/issues/187 See https://github.com/khonsulabs/cushy/pull/226 | No | No | No | Not on roadmap. | Yes | Called i10n | Yes | Yes | ? | ? | |||||||||||||||||||||||||||||||||||||||||
28 | Visual editor | No | No | No | Not yet | No | No | No | No | Yes | Pax Create (Commercial), Pax Designer | No | No | ||||||||||||||||||||||||||||||||||||||||||
29 | Responsive layout | Yes | But see below. | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||||||||||||||||||||||||||||||||||||||||||||
30 | Keyboard navigation | Yes | a bit funky | Yes | Very good | Bad | On roadmap | No | Yes | some issues with focus in lists and drop down. incorrect keys used for section, etc. | Some | Doesn't behave well in widget gallery example | No | Good | |||||||||||||||||||||||||||||||||||||||||
31 | Keyboard control (shortcuts, etc) | Yes | See 'keymap' example. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
32 | Dynamic views/containers/stacks | Yes | Yes | Yes | Yes | see `src/views/dyn_*.rs` | Not explicitly | See implementations of List/TabView/etc. | |||||||||||||||||||||||||||||||||||||||||||||||
33 | Event system | No | Maybe | Yes for widgets | Yes | ||||||||||||||||||||||||||||||||||||||||||||||||||
34 | Custom events | N/A | No | ||||||||||||||||||||||||||||||||||||||||||||||||||||
35 | Components/Widgets | Minimal | Minimal | https://docs.rs/floem/latest/floem/widgets/index.html#functions | Good | Good | Many | See zng-wgt-* crates | Minimal | See pax-std components. | None! | https://docs.flutter.dev/reference/widgets | |||||||||||||||||||||||||||||||||||||||||||
36 | Button | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |||||||||||||||||||||||||||||||||||||||||||||
37 | Toggle buttons (e.g. 'Bold' on/off) | Not sure | |||||||||||||||||||||||||||||||||||||||||||||||||||||
38 | System menus | Yes | No | No | On roadmap | No | There's Menu and MenuBar | Not 'native', but they exist. | No | use 'muda' crate | Yes | No | |||||||||||||||||||||||||||||||||||||||||||
39 | Context menus | Yes | No | On roadmap | No | Yes | Maybe | ||||||||||||||||||||||||||||||||||||||||||||||||
40 | Text label | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||||||||||||||||||||||||||||||||||||||||||||||
41 | Slider | Yes | Yes | Yes | Yes | But clicking left/right doesn't work as expected | Yes | Yes | Yes | example in 'text' example | Yes | Yes | Yes | ||||||||||||||||||||||||||||||||||||||||||
42 | Radio | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||||||||||||||||||||||||||||||||||||||||||||
43 | Drop-down/Pop-up | Yes | Called ComboBox | No | Planned | Yes | aka 'pick_list' | Yes | Yes | Yes | See also 'PickList', which has an arrow. | Yes | Yes | Yes | Yes | ||||||||||||||||||||||||||||||||||||||||
44 | Typing to search | No | No | See 'pick_list' example. | No | No | No | No | |||||||||||||||||||||||||||||||||||||||||||||||
45 | Combobox | No | No | No | Yes | No | Yes | No | |||||||||||||||||||||||||||||||||||||||||||||||
46 | Typing into Combo to search | Yes | See 'combo_box' example. | Yes | No | ||||||||||||||||||||||||||||||||||||||||||||||||||
47 | Lists/Tables | Yes | Yes | No | Yes | Simple and Enhanced | Lists only | Yes | Yes | ||||||||||||||||||||||||||||||||||||||||||||||
48 | Sorting | No | DIY, or use 3rd party crates like egui-data-tables | No | No | Yes | Yes | ||||||||||||||||||||||||||||||||||||||||||||||||
49 | Multicolumn | Yes | No | No | No | Yes | Yes | ||||||||||||||||||||||||||||||||||||||||||||||||
50 | Selection | No | DIY, or use 3rd party crates like egui-data-tables or egui-selectable-table | ||||||||||||||||||||||||||||||||||||||||||||||||||||
51 | Treeview column in list | No | No | No | No | No | |||||||||||||||||||||||||||||||||||||||||||||||||
52 | Tabs | Yes | No | but see `iced_aw` crate | Yes | Yes | see `src/views/tab.rs` | Yes | Yes | ? | Yes | ||||||||||||||||||||||||||||||||||||||||||||
53 | with dynamic content | Possible to roll-your-own using a `Switcher` | No tab-bar implementation. | Yes | No, static only | No? | No example | ||||||||||||||||||||||||||||||||||||||||||||||||
54 | Toolbars | No | No | No | No | No | No toggle button | No | But see ToggleButton and Buttons | No | No? | ||||||||||||||||||||||||||||||||||||||||||||
55 | Resizable | Yes | Yes | Yes | Yes | Yes | Yes | ? | Yes | ||||||||||||||||||||||||||||||||||||||||||||||
56 | Tooltip | Yes | Yes | No | Yes | see `src/views/tooltip.rs` | Yes | On buttons, etc. | Yes | ||||||||||||||||||||||||||||||||||||||||||||||
57 | Treeview | Yes, but not-built-in. | No real tree, but it's possible to use collapsible headers. See also: egui_ltreeview crate | No | Yes | No | Maybe | see file_explorer example | No | ||||||||||||||||||||||||||||||||||||||||||||||
58 | Splitter with Handle | Yes | No | Maybe | See 'pane_grid' example. | Limited | No dedicated view, but see draggable_sidebar.rs example | No | No | ||||||||||||||||||||||||||||||||||||||||||||||
59 | Documentation | Repo and API only | |||||||||||||||||||||||||||||||||||||||||||||||||||||
60 | Book | No | Yes | Minimal | No | No | Yes | Limited | Yes | ||||||||||||||||||||||||||||||||||||||||||||||
61 | Architecture overview | A little in the API docs for Widget | Minimal | One page in the book, but only covers user-facing view/update cycle | Yes, but outdated. | Not linked from website. | No | Yes | No | Not in dioxus either | |||||||||||||||||||||||||||||||||||||||||||||
62 | Developer friendlyness | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
63 | Discoverability | Poor | often you have to use <something::method>() instead of 'instance.method', but you don't know what 'something' is. | Poor | often you have to use <something::method>() instead of 'instance.method', but you don't know what 'something' is. | Bad | Uses a DSL | Ok | Good | Poor | e.g. no macro auto-complete in `rsx!()`, poorly documented properties. | Bad | Uses `.slint` DSL. | ||||||||||||||||||||||||||||||||||||||||||
64 | IDE auto-complete | Yes | Pure rust, no DSL, but see above | Yes | Pure rust, no DSL | Yes | Pure rust, no DSL, but see above | No | Yes | Yes | No (though better in dioxus 0.6 apparently) | ||||||||||||||||||||||||||||||||||||||||||||
65 | API coherency | Bad | Confusing. Many ways you can attempt to do something, most resulting in failure. e.g. layout, sense and styling APIs. | Good | Good | ||||||||||||||||||||||||||||||||||||||||||||||||||
66 | Ease of use / Intuitive API | Poor | Despite advertising itself as 'egui aims to be the easiest-to-use Rust GUI library' it is in fact far from easy to use. | Mostly very good | Poor | ||||||||||||||||||||||||||||||||||||||||||||||||||
67 | Temporal coupling | Some | It's immediate mode... | No | no 'reactive' / 'effects', etc. | Some | Unintelligable! (See hooks, use_memo, use_reactive, use_effect, etc) | ||||||||||||||||||||||||||||||||||||||||||||||||
68 | GUI testability | Maybe ok | see 'egui_kittest' | Some | some examples have tests | Maybe ok | Non existent | Non existent | Poor? | No examples have tests. | |||||||||||||||||||||||||||||||||||||||||||||
69 | Disk space (target folder) | 7.5GB for tabbed_document_ui | 18GB after cargo build and running a few examples. | 1.7GB to run the ui_zoo example | Requires over 22GB of free space to run `cargo test` | ||||||||||||||||||||||||||||||||||||||||||||||||||
70 | Thoughts | Requires C to build, NO. | Mobile/game-centric, not rust | ||||||||||||||||||||||||||||||||||||||||||||||||||||
71 | Repo-layout | Good | Good | Good | Bad | Contains library + IDE + experiments | Good, with crates | Good | Good | Good | |||||||||||||||||||||||||||||||||||||||||||||
72 | Examples | Very good | Good | Good | Ok | Some real-apps too | Good | Good | Some don't work or are unfinished or contain commented out code | Good | Ok | Minimal | No UI examples, mostly game/animation/graphic focussed | ||||||||||||||||||||||||||||||||||||||||||
73 | Other observations and issues | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
74 | It's immediate mode, ui code is mixed in with application logic. | Widgets look like 'game/web' widgets, not desktop widgets. | Some issues with text selection when selecting from the right | Cannot find DSL documentation via crates/readmes/etc | Severe lack of documentation; no details on architecture, views, event system, etc. | Immature project | Frustrating developer experience. e.g. 'rules of hooks', panics, router, etc. | ||||||||||||||||||||||||||||||||||||||||||||||||
75 | Lots of real-world apps | No real-world examples | No good example showing how to structure a non-trivial application into re-usable components/modules, each with their own state. | Decent looking widgets | No 'getting started' guide or book. | Lack of documentation | Bad documentation when it comes to the dioxus framework, no overview of dioxus. | ||||||||||||||||||||||||||||||||||||||||||||||||
76 | UI layout painful and code gets very very nested, very very quickly. 3rd part crates exist for 'css-like' layout, like egui_taffy, but then you'll have 2 pardymes of layout and interop to deal with. | No documentation regarding application state. | Most example simple have a single giant 'Message' enum and single 'state' struct, each with everything bundled togetherwhich does not scale. See 'Tour' example (`enum Message` and `struct Tour` respectively). | Codebase feels unfocussed and messy. e.g. `cx_api.rs` has 'cpu_cores`, `begin_video_playback` and `set_key_focus` | No documentation for signals or effects. | Cancerous 'Data` trait | Makes too many assumptions about the knowledge or experience of developers. | ||||||||||||||||||||||||||||||||||||||||||||||||
77 | Default look/feel is nice. | Unfinished styling system. | Decent amount of widgets and some decent examples, but not easy to find. | Severely lacking in documentation. | No documentation for layout/sizing/stying. | Unable to work out where to store state in a real-world project | Examples are not self contained (no cargo.toml) | ||||||||||||||||||||||||||||||||||||||||||||||||
78 | Very capable | Very helpful developers, responsive to feedback. | Helpful community | Very unfinished. | Rendering issues (odd 1px borders/artifacts) | Rendering overflow issues. | Minimal or no 'why' or 'what' comments in examples. | ||||||||||||||||||||||||||||||||||||||||||||||||
79 | No task/event/async/threading system, roll-your-own | Nice codebase | Much useless API documentation likely due to enforced documentation linting, often the documentation just repeats the method name, args and return value with little to no useful information. e.g. `widget::diff` | Lots of commented out code. | Event bleed-through issues | Community too small, only a couple of reference projects | Bad for rapid prototyping when state is involved. | ||||||||||||||||||||||||||||||||||||||||||||||||
80 | Comprehensive amount of widgets | Key aspects entirely undocumented, e.g. Events and event propogation. | Community slow to respond, questions go unanswered for days. | Various elements don't behave as expected (lists, drop-down, etc) | Various elements don't behave as expected (lists, tabview, popup) | Very helpful developers, responsive to feedback. | |||||||||||||||||||||||||||||||||||||||||||||||||
81 | Pain with the '... is not implemented for ...' when building views. | Very helpful developers, responsive to feedback. | Very helpful developers, responsive to feedback. | ||||||||||||||||||||||||||||||||||||||||||||||||||||
82 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
83 | Suitability for complex dynamic desktop apps | Maybe, but much care needs to be taken to structure the application | BAD, due to tiny community and too-experimental nature. | Passable, but making it looks nice is a lot of work. | Maybe in the future, not now. | Passable, unless you need i18n | BAD | BAD | |||||||||||||||||||||||||||||||||||||||||||||||
84 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
85 | Overall feeling after attempting to write test case. (A window with multi languages, tool bar (open, new, select language dropdown), tabs, agnostic document container, 'home' content, 'document' with state) | Usable. Requires the use of 3rd party crates for localization/i18n | Definately usable, but missing many widgets. Was able to add Localization support. Was able to combine it with an ELM like archicture for user-interactions. | As with other frameworks, managing state is the primary failure point. The non-native looking styling is also a huge time-sink. Frustrating experience. | Maybe OK in the future, but right now it's unfinished, opaque, and frustrating. | Passable.more success than with Vizia or Freya when it came to having state-per-tab. | Failed, initially OK, but ultimately frustrating. | Failed, initially frustrating, worse with time not better. | |||||||||||||||||||||||||||||||||||||||||||||||
86 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
87 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
88 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
89 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
90 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
91 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
92 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
93 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
94 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
95 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
96 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
97 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
98 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
99 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
100 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||