The state of building user interfaces in Rust

(areweguiyet.com)

45 points | by mahirsaid 2 days ago

8 comments

  • jph 21 minutes ago
    #1 thing helping me with GUI Rust is sccache for crate compilation caching. and #2 is building independent-compilable subcrates. This improves build times by 10x.

    Also shoutout to ratatui because even though it's technically a TUI not GUI, it's superb.

  • holgerno 18 minutes ago
    I’ve really enjoyed and leaned into building desktop apps with GPUI in the last months. Vibe engineered my apps but feel snappy and fast
  • segphault 52 minutes ago
    I’ve been really impressed with GPUI, particularly with Longbridge’s open source component library which provides a bunch of shadcdn-alike widgets that are really well implemented and come with a bunch of tailwind-like helper functions that make layout easy.

    The downside is that the dependency stack you need to do gui programming with rust is massive and the compile times are brutal. You can’t beat the application performance, though. It’s crazy how nice it feels compared to bloated electron apps.

    The question of “are we gui yet” is definitely yes, at least on the desktop. The problem is that developers are too lazy to build apps with anything other than web frameworks.

    • vovavili 42 minutes ago
      For me it's not so much laziness, as more of a lack of desire to rely on a framework that Zed core team still feels to be not ready for a general release. Electron just happens to be the least worst way to make an aesthetically pleasing cross-platform desktop app, but the performance trade-off is a major pain point.

      GPUI getting the public release greenlight will no doubt be a turning point for desktop GUI development. All it took is a small team of gifted developers to dogfood their own GUI toolkit and get some much-needed VC backing. The future looks very bright.

  • DASD 21 minutes ago
    To extend this, what's the state of accessibility for user interfaces built in Rust?
  • neonstatic 6 minutes ago
    I am heavily invested in Iced. I feel it's a good framework. On a number of occasions it forced me to rethink how to structure my program to match Iced's model. I find the framework very performant and the resulting program easy to prototype and expand upon. I don't do any web development at all, but if I had to, I'd check out Elm, knowing that Iced is inspired by it.

    Strengths:

      - Message passing model with separate Model and View paths
      - Async / Sync landscape (sync on the GUI thread, tasks / subscriptions for async stuff with messages returned to the GUI thread)
      - Writing custom Widgets is quite easy! In 0.14 stateful widgets got a revamp and they are quite nice
      - Performance is great
      - Despite being very capable, the framework is not that large. Learning it is not a daunting task
      - Documentation might be sparse, but due to how it's written, I was able to just read the code and understand how it works without issue
    
    Downsides include:

      - Lots of changes between releases (still pre 1.0)
      - Theming. Despite being (somewhat) recently reworked, it's still overcomplicated imo
      - The layouting engine is tricky to use and I fight with it much more than I should. Quite often widgets do not show up at all or take too much space because I didn't use the right combination of `Length` variants for `width` and `height` of the widget (and/or its children)
      - Some interfaces seem a bit weird (I am specifically thinking about overlays)
      - There is some confusion regarding what should go in the application state and what should be held in Widget's state. The interfaces are clearly defined here, but what can be / should be done is often found out in practice (perhaps I lack experience here)
  • Severian 1 hour ago
    Uhhh.. for a page thats about GUIs, this seems awfully sparse for the actual look and feel of said GUIs.

    How about some screenshots?

    Its very difficult to compare X to Y anywhere on this site. Its just an aggregator, not really an exemplary resource.

    • entrope 1 hour ago
      The answer to the question posed in the site's domain name is "no", unfortunately.

      It looks like it just grabbed the intro to each project's self-description, but blurbs like "Zero-cost ultra-high-performance declarative DOM library using FRP signals" would be worth very little even with screenshots.

    • NoboruWataya 1 hour ago
      Yes, I think it's trying to be comprehensive (as far as possible) rather than detailed. Given the amount of frameworks listed, including representative screenshots or comparisons for each would be a substantial effort.

      The best primer on the current(ish) state of GUI programming in Rust, IMO, is this article from 2025 which is linked on that page: https://www.boringcactus.com/2025/04/13/2025-survey-of-rust-...

    • zipy124 1 hour ago
      Is that actually needed? Styling is largely a user decision. They might have defaults yes, but if you looked at a raw HTML page with no CSS styling, you might come to the conclusion that websites have an ugly GUI...
      • qweqwe14 1 hour ago
        It absolutely is. Defaults matter, most developers just want a GUI for their app that doesn't look like ass. Almost no one wants to mess with styling.
        • fragmede 1 hour ago
          That's why developers have UI/UX and design experts assigned to them. That's why Figma exists. CSS was an attempt to not have to deal with styling. It failed, and landed in the other direction.
      • bla3 1 hour ago
        This is the mindset that gives you Java-Style GUIs.
    • hirako2000 1 hour ago
      Perhaps it's to show how fragmented the community is.
  • jokethrowaway 1 hour ago
    my 2 cents:

    egui is the clear winner for making desktop applications. I've built a complex application recently (think of it like an AI powered image editor, doing plenty of editor logic and communicating with several python backends for the AI part) and it's been smooth sailing. It would be nice to have a family of components that look native on every platform but nowadays the desktop experience is anyway wildly inconsistent (and web-centric).

    Using qt bindings is a good option too, but depending on non rust code means you are more likely to catch some weird crash. My experience with Qt in Rust is years old, so I can't comment on stability.

    For frontend development, leptos is really nice and it feels familiar coming from react - but the whole chain is too heavy, your target directory quickly balloons to GBs and that's unacceptable, especially if you have several frontend projects.

    I vibe coded a proof of concept leptos (including islands) with a minimal runtime and no dependencies and the size was much more contained. There is margin for improvements but today I would stick with solid.js for frontend development.

    The other big hurdle for Rust on the web is the need to compile to wasm. That means that any Rust application will be heavier than a similar app in another JS framework. If we could target js instead of wasm, maybe we could have apps with small bundles.

    • ghosty141 31 minutes ago
      > Using qt bindings is a good option too, but depending on non rust code means you are more likely to catch some weird crash. My experience with Qt in Rust is years old, so I can't comment on stability.

      Qt QML is already annoying in C++ since you have to juggle 2 lifetime systems, c++ manual lifetime management and QMLs QML engine (aka gargabe collection).

    • nopurpose 52 minutes ago
      Did immediate mode guis solve (in)accessibility problem they used to be really bad at?
  • sourcegrift 1 hour ago
    qmetaobject-rs gives you the best of both worlds: logic in rust, UI in arguably world's best cross platform framework Qt.
    • rjh29 1 hour ago
      As a "batteries included" framework Qt is undoubtably amazing but I used it on a project recently and it struck me as dated compared to Flutter or React Native. Maybe I'm doing it wrong but I had to write a lot of boilerplate C++ even when using QML. The layout engine feels byzantine. The state management is mostly manual. Flutter is a lot more consistent, reactive, and all done in one way (Dart) and it supports hot reload natively. It was a more pleasant experience overall.
    • aquariusDue 57 minutes ago
      I'm a bit out of the loop but I checked out the GitHub repo [0] and while the authors moved onto Slint the crate is still actively maintained. That said I also looked at the latest commits and that threw me down a rabbit hole of finding out that the main maintainer has a blog where he wrote about using Sailfish OS as a daily driver [1] and imagine my surprise when he revealed that he actually co-maintains a Signal client app for SailfishOS too. I looked into the GitLab repo for that app [2] and I gleefully discovered that it's mostly written in Rust, the Cargo.toml contains a dependency to qmetaobject-rs too.

      All that is to say that I'm glad there's another way to get Rust on mobile aside from stuff like flutter_rust_bridge.

      [0] https://github.com/woboq/qmetaobject-rs

      [1] https://www.rubdos.be/2026/04/17/my-sailfish-os-journey-apps...

      [2] https://gitlab.com/whisperfish/whisperfish