I use egui for my emulator and it is really good. It's very stable and small enough that you can find your way in without too much searching it. Its speed is pretty fast (I have to render things at under 1/50s).
For me egui, is totally mature as long as you don't need too much. The fun factor induced by the immediate mode and the GL rendering speeds are definitely a plus !
egui even has decent accessibility support on Windows and macOS via AccessKit [1]. AFAIK it's the first immediate-mode GUI to implement platform accessibility APIs. The key to that, of course, is that AccessKit creates and updates a retained accessibility tree. I'd like to thank Google for funding most of my work on AccessKit so far, including the egui integration, and Emil (the primary egui developer) for being so receptive to my PRs.
The challenge with egui is the theme. It looks ok, but isn't good enough for a commercial business app for example. Also, I believe it lacks a webview, so if you are in a pinch the only thing you can do is create your own widgets without a way to cheat and embed some web content. I would agree for certain types of apps it may be "good enough" (science, gaming, medical perhaps...anything where the UI is secondary to the 3D viewport)
Native look and feel is vastly overrated imo. Delphi and before it borland builder made for great UIs despite not looking native. To the point that when I came across that widget set, I knew I was in for a good UX. Still many bespoke interfaces, like at a brakes repair or small lumber yard chain use delphi and it works just fine.
As for the webview, thats a thing, but if you will have web access, you can target wasm, and make the egui interface embedded in the webpage instead of the other way round. But yeah, I don't see a webview being part of eframe/egui proper anytime soon because it treats wasm as a tier one target. You might see it supported third party the same way the efile crate supports open file dialogs but only for windows or linux builds.
Edit: dropping the demo link here for people to poke around. I'm curious what people use that is missing, and what people find unsuited to commercial use.
I mean no offense to the egui people because they have done amazing work, but it isn't that it isn't native, it is that it doesn't look good enough to ship something with it (other than a science/medical/gaming UI perhaps, but certainly not a business app). Gtk won't look native either on anything but Linux...at all, but at least is very professional looking in its default theme. Obviously what looks "good enough" is highly subjective.
UPDATE: True, it is themable, I just wish the default was a little more polished
You can skin it fully though. I have an app that looks nothing like the default theme. Customize it to your taste.
Note: I did have to implement some missing features for my purpose, so when I say “fully” I mean I had to spend a couple hours putting the features I wanted together. But in the end, it was a great result. Maybe this work should be turned into a PR, I dunno.
I still think the webview thing will be a long time coming if that is something you absolutely need. Best bet is probably something that renders the output of a web engine to gl to stuff in an eguingl window.
I've used such horribly themed business guis that my expectations are probably very skewed. If there are buttons and text windows, and neither of them move when I try to select them, I'll survive. My only explanation is kickbacks to the person that selected their purchase. The worst is when the text entry fields silently sanitize things sent to the server so you don't actually know what went into the database. Well, I guess the worst is that it didn't sanitize the entry at all and some of the characters had special meaning to the ancient backend...
> Edit: dropping the demo link here for people to poke around. I'm curious what people use that is missing, and what people find unsuited to commercial use.
As I alluded in my other comment, theming is possible but it's really limited if you expect anything close to what you'd typically expect. You can put borders and colors on frames, but it's pretty limited. For example, if you want to have a border with different colors on each edge, or a border on just one edge, you can't do that by default. I had to make a custom frame object that is a frame in a frame to make different sized borders, but it's still a single color.
I created a mockup in PowerPoint (my go to design app... I'm not a designer, but it has everything I need and I know how to use it), and I had a lot of difficulty getting the egui design to match my PP design, because PP actually has a fairly advanced styling engine with a ton of options, and I took advantage of those. So when I go to egui, the default theme didn't support the kinds of design elements I wanted to show.
But, like I said, you can make these things yourself with the egui building blocks without much trouble.
The other thing I found a little frustrating was chromeless windows. There's an example of this, but it didn't seem well supported. The idea is that when you turn off chrome, you can't resize or close your app. So then you have to add all that functionality back. There's a demo that shows this, but it seemed like a pain at the time to integrate into my app. I gave hoping it would be fixed soon, so I will revisit.
I don't think I know what most people typically expect. I don't know what chrome is, and I'm all for flexibility, but short of some crazy winamp skins in the late 90s, I've never noticed anything being particularly more fancy than amiga500 widgets. Win95 added something. Osx added a bit more, but a box with a label that reverse highlights when I select it is really all I'm expecting.
I rarely create guis, mostly just cli tools. Is there a good intro to basic ui theory so I bdont upset people with higher expectations in the rare event I do create one?
"Chrome" is the term for the OS provided border around the window. It offers anchoring points to resize the window; a place to click for dragging; as well as the buttons for closing, maximizing, minimizing. Without chrome, you can't do any of those things, so the window would be fixed in size and place. To get that functionality back, you have to manually code it into the app.
Fun fact: Chrome, the browser, is named ironically. Compared to other browsers at the time, Chrome had almost no chrome around the window content. That was one of the product's signature differences: its UI was so simple that there almost wasn't any UI, allowing users to focus entirely on the content. Thus, calling it Chrome was very funny.
The 2013 Chromebook Pixel followed this naming theme. The screen was so dense that you couldn't see the pixels.
Since you link to the the web demo, I want to caution people: yes, egui can run on the web, but treat that as a demo only done over the web for the convenience of not having to download and run it natively. If you’re making something, do not use egui if you want to actively target the web, because it’s really bad there in fundamentally unfixable ways (given egui’s architecture). Egui is quite compelling on non-web platforms, but it’s not suitable for web content or apps.
More details (including explanation and concrete examples of what’s fundamentally unfixable with egui’s approach to the web, most notably links and scrolling): https://news.ycombinator.com/item?id=33861831
> only done over the web for the convenience of not having to download and run it natively
Isn't that the entire point of web apps for a lot of people, both users and developers? I'm still planning on implementing a web backend for AccessKit sometime in the next year, to make this type of application ported to the web as accessible as the strongly canvas-based approach will allow.
But the fundamental limitations due to mismatched abilities are serious, so that important things are unavoidably just not right in infuriating ways. Games are the only category I can think of where egui can be acceptable on the web.
I didn't have any problems with fonts (I don't block Any), middle clicking opened in a new tab, egui supports context menus, just not the browsers (which is what I want from a webapp).
Font rendering is wrong, even if you aren’t an extremist like me. Stuff is just never going to feel right.
Middle clicking is wrong, it didn’t open in a background tab like it should have, and this is indicative of the fundamental problem, and you couldn’t right click on the link to get the browser’s context menu, which is what you want >99.998% of the time. Browser’s context menu is also rather important in things like text boxes.
Most people won’t be significantly affected by these issues, probably won’t even notice them, or disregard it if they do briefly. But quite a few will loathe your app, because it badly messes up their way of working in ways that no site on the internet does.
I honestly don't care what font a website uses, if it isn't fuzzy I won't notice it. I really dislike webapps that give me the browser context menu instead of their own custom one. I don't think I'd ever noticed middle click was a background tab, but I can see how that could annoy some people.
I’m talking about right-clicking on a link, for things like Copy Link, or Open Link in New Private Window. Or in a text box for Cut/Copy/Paste/spell-checking.
I need very flexible charting. While egui has some basic stuff builtin, I need something closer to what imgui-charts has (which makes imgui-rs a candidate for me, but probably not egui). A webview would also work as a fallback with a JS charting lib, but egui can't do that either.
Imgui-rs looks really good, thanks! Imgui does say it can output raw vertex buffers, so you could probably put imgui stuff in an egui gl frame and reskin egui to match the looks.
I've only kicked the wheels a bit on egui, but for plotting signals it seemed more than adequate. Its histograms looked fine too. The only thing I saw missing was 3d plotting and heat maps.
There are a few categories of apps that can get away with non-native look and feel, or even thrive based upon actively doing their own thing in ways that work better for what they are. Blender is a member of such a category. Most things are not.
(Games are the most obvious category. Blender belongs to what I might call 2D/3D design, a category which would include tools like GIMP, Inkscape, FreeCAD, Photoshop, Illustrator, AutoCAD—all ones that can go fairly fully native, but can also benefit from deliberate deviation in both look and feel.)
Concur. I've been using egui for interactive chemistry visualizations, and PC software that interacts with embedded devices to configure them, view system status etc. It's easy-to-use, integrates with 3D graphics easily, and is fast.
Agree with egui, although it is missing some widgets, they’re easy enough to build. But the real killer feature for me is that it’s cross platform including the web. Write once and compile to windows/Mac/Linux/web is finally here through Rust and egui.
I might even prefer it for cross-platform apps since startup time is so slow for GTK on Windows.