Find GUI library

Hello everyone,
Currently, I am writing my first Rust project, which is HTTP proxy, but with ability to edit the request/response, replay them, etc. If you are familiar with Burp Suite - you know what I am talking about. The UI there is pretty complex with the multitude of tools, configurations and extensions.
I might do the GUI differently, but I need to be confident that the library can handle the emerging complexity.
What GUI libraries/frameworks are available to do this kind of UI?

Criteria:

  1. I need to add things like text editor, tabs, tabs inside tabs, dropdowns, text fields, buttons, menus, etc. to the GUI and do the layout. Also things like progressbars would be nice
  2. the GUI library/framework has to work on Windows, Linux & Mac.
  3. I would prefer the GUI library/framework not to be Electron, Webrender or Node-based. Something more minimalistic, but powerful (iui or iced maybe?) as compared to something like QT or GTK, but I will use them (QT, GTK or web) if I have to.

I checked:

  1. https://areweguiyet.com/
  2. https://github.com/rust-unofficial/awesome-rust#gui
  3. https://crates.io/categories/gui
  4. https://users.rust-lang.org/search?q=gui

It seems like there are options, but a lot of them are in very early stages of development and I am a bit lost on what to choose.

I would appreciate any recommendations on this.

2 Likes

Although still in it's alpha stages, I think tauri looks very promising.

From their Github:

Tauri is a tool for building tiny, blazing fast binaries for all major desktop platforms. You can use any front-end framework that compiles to HTML,JS and CSS for building your interface.

However it is based on webview, from which you've said that it wouldn't be your first choice, if I've understood correctly.

My personal opinion on this: If I build something GUI-related, I try to build the UI layer with web technologies. For me this is way easier than other technologies, ecspecially due to the big ecosystem around it.

Thanks for the suggestion. I generally agree, that building UIs with web technologies is fast and all the components are already done and I need to stick them together.
But, in my subjective opinion, the desktop apps built with web technologies don't feel as fast and snappy as native apps. I had a fair share of time spent in desktop Skype, Slack, Teams, Atom, VSCode, Discord, Steam, Riot and so on. While some of them do a good job to increase performance (VSCode and Discord), they still don't feel fast and others just feel slow and dumb.
And when I compare them to a GUI program like OBS Studio or Telegram Desktop, I know I want something like the latter.
Aside from my subjective opinion on this, I may need to implement multi monitor setup. This is a long-standing problem for VSCode, for example.
Also, I'd like to keep the system resources usage down. I don't like how much RAM is wasted by the same VSCode (with just 2 small files open and a couple of extensions, I get 0.5-1Gb while idle easily) and Burp (Java) is also a memory hog.
Web-based UI may be optimized by using Webassembly, which plays nicely with rust. Is there maybe a library that allows to write a GUI in rust, compile it to wasm and then use whatever renderer (webview, webrender, etc.)?

1 Like

Gui in Rust does generally not have very many good options. Besides games and web stuff, I've only really seen successful things that used gtk-rs, and it's not a nice library to use, although it does seem to work.

Maybe a webassembly path then? Is there something where I write the GUI in Rust and run the produced wasm in whatever browser engine?
I am not very fond of writing lots of Javascript or pulling big JS frameworks along.

You can indeed use wasm.

Maybe you are looking for Yew? It's a GUI library for the Web in Rust and based on wasm.

There is also a RealWorld Yew example where you can see how the framework is used in a real app (RealWorld is basically an open source Medium clone that has been implemented in various frameworks and languages, Rust + Yew is one of them).

1 Like

You can look at fltk wrapper if you need something small.

1 Like

I like Nuclear but trouble is, how drawing on background.
Impossible

Ok, here is another one: druid
It's a real native UI library in Rust, made by the awesome folks at xi-editor.
Of course, the framework is also very much work-in-progress.

1 Like

If you change:

https://crates.io/categories/gui
               ↓↓
https://crates.rs/categories/gui

you will get lib.rs's GUI category, which has more crates. Still, there aren't great GUIs for Rust yet.

I find Seed to be a compelling rust to wasm UI library.

From the Seed web site:

Influences

[Seed] is strongly influenced by Elm, React, and Redux. The overall structure of Seed apps mimicks that of The Elm Architecture.

There are already several Rust/WASM frameworks; why add another?

I'm distinguishing Seed through clear examples and documentation, and using wasm-bindgen / web-sys internally. I started this project after being unable to get existing frameworks working due to lack of documented examples, and inconsistency between documentation and published versions. My intent is for anyone who's proficient in a frontend framework to get a standalone app working in the browser within a few minutes, using just the quickstart guide.

Seed has a RealWorld demo app, helpful for comparing to Yew.

1 Like

Build a rest api and and serve a front with it. That's the most advance gui tool you will find.
You can even write it in rust and then build as web assembly.

But do not fall for Qt or GTK binding, it will feel strange and not complet. Use tool specifically design for what you intend to do.

1 Like

I thought about wasm, but I find that it may be difficult, because I will be displayjng a lot of html in the app and I don't want to render the wrong one. I only want to render the GUI, not the stuff I will be proxying though it.
So this may be a concern

@alice @Canadadry @gihrig @janriemer So this is a great concern for me to use web technologies for GUI in an app that is supposed to be used for breaking web technologies.
I don't want to deal with XSS popping up in my app, I want to pop it in the target app.

@janriemer Druid may also be a good fit, but I looked up the documentation and it doesn't seem to have a way to create tabs and I need to create a lot of those.
tauri uses HTML/CSS/JS stack, so out of consideration for the abovementioned reason.

Only for this reason I'm considering Qt or maybe something lighter (e.g. fltk, iui or iced).