Remix.run Logo
lazypenguin a day ago

I think the Rust community is sleeping on the potential of iced for traditional desktop gui. I monitor the gui space in Rust closely and have seen many toolkits come and go. In my opinion a desktop gui library/framework needs to solve two things to be useful: architecture and advanced widgets.

egui has served me well and is eagerly recommended in "what gui should I use" threads since it solves the widget problem well in an easy-to-use package. However, any sufficiently advanced application ends up needing a nice architecture to maintain development speed and enjoyment. I've found whether using egui/slint/fltk/etc. you end up having to roll your own system. When you start needing things like undo/redo you suspiciously start architecting something that smells like the elm architecture.

Iced is the only Rust toolkit that I track that solves the architecture part upfront. The message pattern is hugely powerful but it is hard to appreciate until you've really gotten in the weeds on larger applications. Once iced reaches a point where there is an advanced set of widgets available I suspect its popularity will rise accordingly.

As a comparison, one of the most successful desktop gui toolkit of all times (Qt Widgets) solved the architecture/widget duality long ago with the signal/slot system and advanced widgets like treeviews, datagrid, etc. Since then we must have had hundreds of "desktop" toolkits across all languages that can draw buttons and dropdowns but nobody has toppled the king yet for building advanced desktop GUIs (although there were a few close competitors in C# with WPF and Java with Swing they only solved the widget part in my opinion). I like to think iced can take this mantle one day, best of luck to them and congrats on the 0.14 release.

chironjit 3 hours ago | parent | next [-]

It feels a little cringe how Elm and the "Elm way of thinking" is so heavily emphasised, but after using Iced, IMO this is probably one of the best gui models without having to implement signals or message passing or IPCs like Dioxus/Tauri does with frontend/backend. Other key advantages Iced has includes daemon mode, native ability to use multi threading and also multi-window support

That said, for actually building most apps, what's more important is likely ease of learning and using the framework, platform/OS support, publishing support, etc, none of which Iced itself directly address.

bikelang a day ago | parent | prev | next [-]

In case you’re not aware - Pop!_OS has built their cosmic desktop environment on top of iced.

Klonoar 13 hours ago | parent [-]

On their fork of Iced.

They contribute back but it’s a notable distinction.

0manrho 5 hours ago | parent | prev | next [-]

> When you start needing things like undo/redo you suspiciously start architecting something that smells like the elm architecture.

Well Iced itself claims to be inspired by the Elm Arch, so that checks out (see the first line under the Overview section of the Readme https://github.com/iced-rs/iced )

satvikpendem 21 hours ago | parent | prev [-]

Alternatively, Flutter desktop with flutter_rust_bridge works great. Sure, not fully Rust, but Flutter has way more packages on the GUI side than, I'd say, all of the Rust GUIs combined, simply due to how much older it is.

k_bx 19 hours ago | parent | next [-]

I'd rather use Tauri with any web front-end like React (which we do in my company)

airstrike 20 hours ago | parent | prev [-]

and it's slow as molasses, at least in my experience