Get the top HN stories in your inbox every day.
bryanlarsen
mritchie712
have you built anything with it? We're using Tauri, but Dioxus looks very interesting.
terhechte
I recently build this side project with Dioxus:
https://terhechte.github.io/twitvault/
Here's a review of the experience of using it:
https://www.reddit.com/r/rust/comments/zegv2e/comment/izb6nl...
ianpurton
Can you let me know about incremental compile times?
Basically with the HTML frameworks that use macros I'm getting incremental builds 10 seconds or more. Did you experience the same?
FullyFunctional
It's beautiful!
OT: it seemed like an awesome application so I ran it but a few seconds into importing I got
"Rate limit for Tweet Replies reached. Waiting 18446744072038294844 seconds"
I'm not going to live nearly long enough for that!
ADD: and there's no cancel button or anyway way to stop it.
anon23anon
Does Dioxus run in a webview on mobile? That's how I'm reading the docs.
bryanlarsen
In theory it doesn't have to. In practice, yes.
My comment said that rust had a great cross-platform story, not Dioxus. If I was doing cross-platform rust I'd use cacao for iOS, Dioxus for web front end, et cetera.
bryanlarsen
I have, but nothing used by more than 3 people.
undefined
ink404
kotlin is a decent choice as well
bryanlarsen
True. I forgot about the family of languages that will transpile to Javascript. That gives most of them a good web front end story, and of course Kotlin has a good iOS story.
logicalshift
I've been working a 2D rendering toolkit that increasingly looks to me like it probably deserves a mention on these lists: https://github.com/logicalshift/flo_draw (but I'm not on Reddit...). Layers, vector sprites, dynamic textures and a streaming API that fits well with 'reactive' designs are amongst the features that make it stand out from what else is out there. It's super simple to get going too.
Started life as a rendering layer for FlowBetween so I could put in whatever looked like it was 'winning' later on but wound up writing my own renderer as there wasn't anything quite there yet. Still has that design so another unique thing is that it's possible to use the same API with whatever rendering layer you want.
Speaking of FlowBetween, one thing I have wanted to do for ages is to get rid of the platform-specific GUIs and use something universal. It should be easy because FlowBetween sends straightforward instructions to an independent GUI layer, but I keep bouncing off for a few reasons:
- it's a big ole task so I definitely want to pick something that's stable and also lets me hedge my bets in terms of being easy to migrate away from
- most commonly, FlowBetween needs pressure data from tablets and a lot of frameworks just don't do that (this is also in a terrible state in browsers)
- lots of GUI crates are designed as frameworks and so try to dictate the entire design of any app that uses them, which is no good for FlowBetween which tries to keep its internal design choices independent of its choice of GUI
At the moment, I suspect that some sort of imgui framework is best along with an entirely manual implementation of tablet pointer data: fits with my existing design and isn't 'contagious' in a way that could make it hard to migrate to something else later on.
smasher164
One thing I'd like to see are Rust bindings for wxWidgets. Contrary to the prevailing opinion, I think wrappers over native toolkits are a fine approach for cross-platform development.
zackbrown
> Contrary to the prevailing opinion
I'm not sure this is the prevailing opinion. It may be something of a "vocal minority" opinion, but it does seem more common in the Rust community than elsewhere. The closer you get to traditional native app designers and developers, the more you'll hear the opinion that native look & feel (not to mention accessibility) is important to embrace.
IMO an ideal solution is to offer both: 1. to wrap native toolkits for things like text and UI controls, and 2. to enable canvas-drawn virtual controls, for those who would prefer to create their own widgets. These approaches can be enabled in parallel through an extensible widget/component system.
pizza234
There are pros and cons to the non-/native approaches.
Writing effective cross-platform application is harder than one would think. Some time ago there was a discussion on HN where a WxWidgets maintainer stepped in to explain why some WxWidget programs were apparently inconsistent across O/S, and the explanation was that they were developed naively (I think one needs to use specific spacing abstractions, but I don't remember with exactness).
For my personal development, I use non-native (which is easier to develop), however, on large scale, it'd be a tough decision.
WxWidget was my favorite in the past (again, for personal development), however, the bindings are very spotty, which prevents adoption for several languages (wiki page: https://en.wikipedia.org/wiki/List_of_language_bindings_for_...).
nu11ptr
I think after years of agreeing with you I might actually disagree in 2022. I also prefer native widgets, but the problem is native programs have changed. It used to be they all looked very sterile and had 80-90% of the same widgets as every other OS, but if you look at apps today they are all much more media centric. Whether electron or native it is very common to have things like a "side bar" and other very specific widgets. These don't translate well to cross platform native widgets. I think Flutter might have the right approach with its fluent UI and macos libraries. I suspect the resulting app would look much more native in this day and age.
smasher164
I agree that GUIs have gotten more complicated nowadays, but I don't think the existence of platform-specific APIs is mutually exclusive with cross-platform abstractions. If anything, you should be able to specialize behavior for a certain platform.
nu11ptr
I agree, but no one has done it successfully either. In wxWidgets any non-native widgets look very out of place. Some of the ones on Qt do as well. Neither of them that I've seen try to map to the more exotic widgets, but invent some of their own.
api
Take wxWidgets and wrap or modify it to implement a reactive programming model. No need to reinvent the lower levels and wrappers around native widgets are better for many use cases.
smasher164
It looks like the author of wxRust is attempting another go at bindings with https://github.com/kenz-gelsoft/wxRust2.
dfgdfgffd
Sadly Rust for WinUI3/UWP/XAML for Windows GUI - actually modern UIs on Windows - was abandoned or explicitly removed from Rust API bindings by MS.
The listed library only uses the ancient win32 api
pjmlp
Doesn't surprise me, the folks behind it are the same that caused the deprecation from C++/CX, the very first time that Microsoft had something comparable to C++ Builder in productivity for C++ RAD GUI development.
It got replaced with C++/WinRT, which basically requires one to code like in the good old days of Visual C++ 6.0 alongside ATL, editing IDL files without any kind of VS tooling support and manually merging generated code.
Even the eldery MFC has better VS tooling support and COM authoring APIs than C++/WinRT.
Rust/WinRT is even years away from the C++/WinRT "productivity" in its current state, let along what .NET tooling provides, which by the way is also worse than UWP with .NET Native (e.g. no designer available, and no AOT support).
The reality is that only WinDev folks actually care enough about WinUI, the rest of us have moved on burned by these rewrites, and only a few hardcore advocates keep showing up their community calls.
onphonenow
Which is a massive bummer because win ui stuff w designer etc used to be great and performed better than a lot of electron stuff and was easy to develop - but they have seriously trashed their ecosystem there
pjmlp
Yeah, if you browse around the public repos, and occasional community calls, it really seems that whoever is still around has no idea (experience) of what are the features of the frameworks they are trying to replace, and asking for yet another rewrite on top of all of those done since Windows 8 is trivial.
Anyone that is still around beyond WinDev themselves just has too much sunk down cost into WinUI to switch for something else, even pre-Windows 8 stacks.
yenhoo
Sadly?
I prefer desktop Windows programs to be gdi/win32, they are often the most thought out and optimized for actual desktop paradigms (i.e mouse+keyboard+high res screen) without giant margins, padding and whitespace everywhere and makes use of proper desktop class widgets like treeviews, listviews, tabs, etc.
mm007emko
Exactly. Haters gonna hate me but I really liked Windows.Forms (and C#) for development line-of-business desktop apps.
pjmlp
Nah, still quite good, although I personally would go with WPF, Forms is also quite good for what still matters on Windows desktop, just note that on the new runtime (.NET Core) there are still some issues with the out of process designer.
dfgdfgffd
Windows offers multiple and mixed paradigms though, so ideally the UI needs to be able to adapt to and handle these paradigms
nickpp
Any idea why?! I find that the modern WinUI is impossible to use from any language other than .NET.
withinrafael
We yanked it because, sadly, XAML/WinUI is squarely designed to be used with C# and Visual Studio.
See also: https://github.com/microsoft/windows-rs/issues/2153#issuecom...
Santosh83
Perhaps that's the plan?
fsloth
win32 api is pretty good. I don't see why you would want anything else for native app development. If you want to use the modern stuff it's far better to develop the UI frontend using Microsoft tools in C# and then use Rust as the backend. In this sense Rust story is not worse than C++ or C.
If a person wants a native gui I guess QT would be worth investigating as well (unless one is concerned by the license).
zozbot234
Isn't that what the windows-rs crate is for? Doesn't seem abandoned.
yencabulator
It sure is abandoned: https://github.com/microsoft/windows-app-rs#this-repository-...
dohdhdaa
Unless a Rust OS is created with an official toolkit, Rust apps will always exist on a platform that already has a native toolkit. Any custom framework will always feel wrong and out of place.
I use macOS, so apps should be written with AppKit. For Linux they should either be GTK or Qt, depending on desktop. Recreating widgets from scratch with GPU rendering is doomed to feel wrong to users.
virtualritz
> Recreating widgets from scratch with GPU rendering is doomed to feel wrong to users.
So following your argument, pretty much all apps I use on macOS are 'wrong' as far as GUI goes.
Off the top of my head from what I use most of the time: Maya, Houdini, Blender, Fusion360, Resolve, Darktable, Slack, Discord, VSCode. Not a single one of them uses native Cocoa widgets. And I couldn't care less.
Some of these are top of the line apps for 2D/3D content creation on that platform.
If the vendors of these apps can afford to not care about UI nativeness, why should any single one or small group of developers working their asses off on GUI crates for Rust? Mostly unpaid no less.
rollcat
> Not a single one of them uses native Cocoa widgets. And I couldn't care less.
Meanwhile I do care. My main reason being: macOS offers fantastic facilities for inspecting and scripting the native GUIs, think using the web inspector or GreaseMonkey, but across the entire OS - but of course it breaks e.g. on Electron apps. Other people will cite help menu integration, custom key shortcuts, accessibility (not only for the disabled), and - yes, resource usage. I remember being productive on a system with 256M of RAM, and before that - 4M, and before that - 64k. It's frustrating to see so much progress wasted, I shouldn't need to close ALL of the chat apps just to run StableDiffusion more smoothly.
smoldesu
Maybe Apple should write libraries for their GUI toolkits, then. It's awfully hard to beg people to write native apps for you when people need to learn a new language to do it.
lelanthran
> So following your argument, pretty much all apps I use on macOS are 'wrong' as far as GUI goes.
MacOS apps feel pretty wrong to me.
Some don't remember which screen they should be on, and always go to that screen at a predetermined size and geometry (tkdiff).
Others expand incorrectly to full-screen (macvim) when moved to a different screen.
VSCode doesn't behave like the native apps.
The list goes on, I'm short on time.
> And I couldn't care less.
You caring or not doesn't make the problem go away - native widgets always feel less wrong than non-native widgets.
virtualritz
My main counter argument would be that most of the tasks I do on macOS require/are better done full screen.
And if you are on macOS doing any kind of design work, this is your mode of working. People using Photoshop or any 2D/3D DCC etc. You use all the screen space real estate on any number of screens you have. But even if I write code I run VSCode in full screen. If I have a dual screen setup I usually have one screen with two code editors, mini map & folders + terminal on screen two. But that's it.
But even assuming you run apps side by side/stacked whatever so you could actually visually see how non-native/different they look. Is that the real issue on macOS today? Personally the main gripe I have is that -- and kindly pardon the tangent -- macOS native window management is shite. One of the first things people that come from a *nix desktop buy/install, when they switch to macOS, is a proper (possibly tiling) window manager.
But back to widgets/look: in DCC apps the main sort of dialog you interact with are attribute editors where you change properties of an object or node.
I like to refer to an issue on the egui crate which has some of the best out-of-the-box support for this kind of widget composition[1].
Apple Human Interface (AHI) guidelines do not have any handrails on how these attribute editors should look or be done. The best you can do is go with dialog AHI guidelines and these fall short for this sort of window. I can go into great detail here why but it's beside the point. If you read my comment on the egui issue I linked above (same handle I use on HN) you may get an idea where I am coming from.
Most Human Computer Interface (HCI) guidlines for various platforms are based on typical late 90's early 2k desktop apps.
They were never updated to reflect on newer paradigmns for UX that evolved in recent years. Blame the fragmentation of the desktop and Electron & co.
IMHO this is the first problem the OS vendors need to solve before we can blame developers of UI libs to not make them look 'native enough'.
hollerith
>Maya, Houdini, Blender, Fusion360, Resolve, Darktable, Slack, Discord, VSCode. Not a single one of them uses native Cocoa widgets.
Also Firefox and Chrome and their forks (e.g., Brave).
bobajeff
It seems to me Mac users care about using native UI toolkits more so than Linux or even Windows users. I would suppose that has to do with how polished and integrated that platform is.
As a Linux user I really don't care if you use GTK for the UI. I've long given up on customizing the look and feel of my system to the point that application integration matter.
troad
For many decades, there have existed commercial apps native to the Apple ecosystem, often from small/mid-sized studios, which would use native UI to signal their premium craftsmanship. I think that for many long-time Mac users, seamless/native UI is still a signal of quality in third-party software. However, this sentiment is moribund. That entire market is now dwarfed by the ecosystem of “cross-platform apps” (formerly Windows ports, now usually web apps) and Unixy OSS tools; all the while the Mac App Store now peddles lots of native-UI apps of deeply questionable quality.
mistrial9
long ago, the integrated feeling of Apple MacOS was a great selling point; decades later, daily use of the web, more phone than desktop, Windows low-bar junk and other factors change the equation.
If a smart user here today says that recent network-centric apps are OK with him visually, then maybe they are OK?
twoodfin
I think Apple made a strategic error when they failed to embrace DOM/browser engine-based toolkits like Electron on the Mac. If they had applied their leverage, of which they have plenty, the technical challenges of better native integration and support for the wide range of traditional Mac affordances would seem to have been quite manageable.
meindnoch
This. It’s so lame when UI elements can’t hang outside the bounds of the window (i.e. menus, tooltips, dropdowns, popovers) because everything is rendered like a game…
nicoburns
There's no reason Rust toolkits can't use separate windows for elements like menus and tooltips, and I know this is planned for at least some of the toolkits discussed in the post.
bsder
The problem right now the separation of concerns for GUIs is a complete shitshow on ALL platforms.
Even such "simple" tasks as how to composite a window, a video in that window, and a floating menu over that window are not very well specified in any OS (try resizing that window and watch the fun). Or, for example, your floating menu--should the parent window resize itself and paint with transparent pixels in the extra area or should that menu be a separate "window"? And, what does being a "window" even mean?
Add into that the fact that we really should be making multithreaded GUI systems at this point and it's very clear that GUIs are stuck in a local minimum that's really hard to get out of because GUI systems require so many lines of code.
meindnoch
Window resizing works perfectly fine on macOS if you use the native AppKit framework. It’s only when you try to embed a whole different world (Qt, GTK, Flutter, Electron) in your window via an opaque OpenGL/Metal surface that things break/lag/distort on resizing the window, which again is another reason to stay away from these cross-platform GUI shims.
I don’t really see the reason for multithreaded UIs either. A single UI thread works perfectly fine if you move your business logic off to a separate thread. Most people are just too lazy to do that, and start developing their app with the business logic running synchronously on the UI thread; which works for a while, but eventually reaches a point where it starts blocking the UI event loop; then they try bandaging it by moving certain pieces to a background thread and they shoot themselves in the foot with thread-safety issues. The way to solve this is not by making the UI framework multi-threaded… Simply be disciplined with UI ↔ business logic separation from the get go and all these problems go away. Yes, I know it’s so tempting to call the database directly from the button click handler - but don’t do it.
Strom
What you are talking about has nothing to do with custom vs native controls. Instead it's a question of using a single or multiple windows.
There are Rust GUI toolkits like Druid with custom controls that have elements outside the bounds of the main window.
bitexploder
The only cross platform toolkit that pulls it off well is Java. IntelliJ feels good on every platform. Qt apps can also feel native if a little effort is put into it. Rust GUI frameworks are one of its weaker areas IMO.
ptx
The next time you use a Swing app, look for these examples of how it "pulls it off well":
* The first time any particular window is opened, Swing draws the contents but then changes its mind about the window size, recalculates the layout and then redraws the contents again slightly differently.
* When Swing creates a window, you can sometimes observe how creates it in the wrong spot and then moves it to where it was supposed to be created.
* Alt-tabbing quickly between two windows in a Swing application doesn't always work. It sometimes just glitches and leaves you in the window you started with. (Confirmed just now on Windows 10 with Java 17. The bug has been there for many, many years.)
* When opening a submenu of a menu, Swing does nothing to handle the problem of the menu closing again as you're moving towards it but accidentally mouse over an adjacent item. Platform GUI toolkits solve this either with a delay or by tracking the direction of the movement. IntelliJ implements its own menu bar to make this work.
* Try to find an example of a window that is resizable in only one direction or only up to a certain maximum size. As far as I can tell, this is not possible in Swing, and applications handle this limitation by designing all UIs to be resizable even when it doesn't make any sense.
chrismorgan
I have never had anything other than a terrible experience with a Java app, under Windows, Linux (in GNOME 2 and Unity most of a decade ago, i3, or Sway). They always disregard platform conventions in both look and feel to a painful extent. But I will declare that I haven’t ever used IntelliJ, and I have no idea what it uses for its UI. But out of the box, Qt seems vastly better at matching platform look and feel, and generally gives you decent control over matching or not to match your requirements.
josephg
I use intellij on Linux and macos.
It looks mostly ok, but on Linux it doesn’t support smooth scrolling (even though this is supported by gtk). You also can’t use the meta key (windows key / cmd) as a modifier key for keyboard shortcuts. So I can’t configure intellij to use all the keyboard bindings I’m used to from macos. Again, this isn’t a problem with other gtk apps. It’s just (apparently) a platform limitation of whatever Java toolkit they’re using.
So in my experience it’s 95% of the way there. I certainly prefer it over Xcode, but it has issues that native apps don’t have.
silon42
SWT was pretty good in my experience.
amatheus
Regarding Java I think that's more of a Jetbrains thing that IntelliJ feels good on every platform than Java per se. Contrast it with Netbeans for a more "pure" Java desktop experience.
cmrdporcupine
I've been an JetBrains (IntelliJ and these days CLion) user since about 2004 and what I'd say is this was a hard fought and slow incremental advancement. Back in the 00s, IDEA's UI experience was really sub-par and its foreign nature on the platform was very very clear.
It's amazing the amount of work JetBrains has put into this.
thiht
When it comes to Java GUIs, Intellij is the exception, not the rule.
bitexploder
Ahh, well, it is the only one I use so, just a slight bias there :-D
Kwpolska
It’s mostly an IntelliJ thing. All other Java apps are ugly and weird.
And there are non-native behaviors in IntelliJ too. For example you can’t close windows by double-clicking the window icon on Windows (a feature of Windows since Windows 1?).
nicoburns
> Unless a Rust OS is created with an official toolkit, Rust apps will always exist on a platform that already has a native toolkit.
If the toolkit is good enough it's entirely possible that a platform or platforms may adopt it as their native toolkit. In any case, these are really competing with electron which is already non-native. If Rust toolkits can get to electron-like quality but with lower resource usage and better hooks into the underlying platform then I'd consider that a success.
pjmlp
With exception of VSCode, the only Electron apps that I use are forced upon me due to work requirements.
All of them I glady ignore on private owned computers, or use the browser version, they are anyway Web apps.
madeofpalk
> In any case, these are really competing with electron which is already non-native
Use Electron and you'll get OS-native buttons and other form controls.
Strom
Can you provide any source/documentation on how to achieve this?
As far as I know Electron is based on Chromium. And Chromium doesn't use native controls, it has its own custom controls that sometimes look similar to native controls.
oDot
Some apps have their own unique look and that works quite well. Doesn't feel out of place for me.
d12bb
Depends. Highly specialized apps (Blender comes to mind) fare better using custom toolkits. Anything else probably should use the platform-native one, not only for looks (lots of really great mac-only apps use customized widgets, see Things as example), but feel and integration as well.
mroche
I feel like it's a spectrum. The simpler the app, the more likely it's better to try an integrate with a closer to native look. I always found the issue of "native" to be a bit funny to me as someone coming from the 3D/VFX space, since all of the applications are built to be multiplatform and don't give a hoot about "native". Consistency of the application experience across platforms trumps all. The number of people I've seen complain about this? Zero. Usually the only issues arise around file pickers (some have custom ones, others use platform ones which have differences).
Granted these applications boast a ridiculous amount of features and are incredibly complex putting them on the opposite end of the spectrum compared to simple GUIs and chat/productivity applications.
To me, it's nice that platforms provide native toolkits* to provide this level of integration. But I don't view any app as "native" unless it comes from the party making the platform, as they are really the only ones that actually have to adhere to their human interface guidelines to the fullest extent.
* On Linux this is more up-in-the-air. I personally don't consider GTK and Qt as native toolkits, but the foundational pairing for things like libadwaita and KDE Frameworks which provide the associated platform widgets and HIG. Using the toolkits directly is fine and will mostly work, but it's not the same as a "native" application.
ruph123
You can write GTK applications in Rust: https://www.gtk.org/docs/language-bindings/rust/
dpcx
You can, but its documentation is (was?) a horrid mess of C examples that make it quite difficult to navigate.
jeroenhd
This was my experience as well. Simple windows with a button that increments a number are nice and understandable but if you try to get more complex controls working, you run into docs.
With C code often being unreadable, I found that Vala applications often have readable examples of how to use UI components. However, tooling support for Vala is extremely limited so experimenting with existing code may be a annoying. That said, I've had good experiences with opening these projects in Gnome Builder (once it got updated to work on my computer again).
If your component of choice doesn't have a Vala example, I'd resort to reading the documentation. Reverse engineering the API from the docs is often quite doable if you first look at how a component you do understand.
I've had similar problems, but worse, when I tried mixing Rust and Qt. I've never used Qt before so that doesn't help, but I found the API even less predictable in many cases, with some docs and examples several versions out of date.
I'd seriously consider just shipping a WINE'd Windows binary (using a tool like https://winepak.github.io/) for Linux targets with the current state of Rust GUI platforms. The amount of game UI/custom UI libraries out there is impressive but they all feel terribly wrong when I try to use them, in the same way most Flutter apps are terrible to use on desktop.
thiht
> Any custom framework will always feel wrong and out of place
Pretty sure that's the wrong metric. Users don't care if the interface doesn't look exactly like the rest as long as it's good looking and feels familiar.
As a heavy VSCode user for example, I don't think it feels out of place on a mac for example. The UI is consistent in itself, and the UX is consistent with the global UX of the OS (more so than some native mac apps like Finder for instance).
The main reason I hated Java Swing apps was that they were ugly as hell, not that they didn't feel native.
Lichtso
Shameless self promotion plug, I developed a GPU accelerated 2D rendering framework in Rust as well. It even comes with an experimental UI framework on top, which you can try in the browser if you have WebGPU enabled:
terhechte
Hey, I just ran the showcase locally. That looks super cool! Awesome project!
Lichtso
Thanks!
You can also checkout the "feature/ui" branch in GIT [1] to get the UI framework prototype.
[1]: https://github.com/Lichtso/contrast_renderer/tree/feature/ui
jbk
How many of those actually look and behave like native and support accessibility correctly?
Strom
What even is "native" on Windows? Is it Win32? WinForms? WPF? UWP? WinUI? Windows App SDK? There's so many to choose from and they all look and behave differently.
pjmlp
Win32, WinForms, WPF are as good as it gets, and really the only ones that matter.
UWP is deprecated, althought it keeps being the one mostly used on Windows 11, as WinUI still isn't up to its game and keeps collecting issues across all their repos.
Windows App SDK is not a GUI framework, rather the new marketing name for Project Reunion, the porting of UWP runtime infrastructure on top of standard COM without sandoxing and application identity.
chronogram
Do you know which of those toolkits is used for the new Windows 11 Notepad? It's quite a bit more "laggy" to scroll in than the old Notepad that's still on the Server edition.
323
These days the native GUI for Windows is Electron.
pjmlp
Not quite, WebView2, which has the benefit of not dragging Chrome with every single application.
jbk
Many of those are native enough, meaning they inherit the style from the desktop (and not just emulate it), do they support accessibility and so on.
For example, QtWidgets is native and qml is not. WxWidgets is, electron is not.
izacus
Any of those will do as long as you don't drag in javascript crap.
zackbrown
This is a core design goal for Pax. https://www.pax-lang.org
Pax composites a layer of native text and form elements on top of a canvas drawing layer. This solves accessibility across platforms, as well SEO on the Web.
This approach also enables a lean runtime footprint (<100Kb, particularly useful when targeting Web) because the runtime doesn't need to reinvent text rendering, selection, input, etc.
Still early days — have made very little noise thus far; it's pre-alpha — but you can see what's cooking at https://docs.pax-lang.org/ and https://www.github.com/pax-lang/pax
jbk
It does not answer the native styling though…
zackbrown
Pax does solve this, but we're now discussing a different problem than element-level look-and-feel or accessibility. Three ways you can slice this with Pax, ft. pseudocode:
1. Conditional templating, like:
<SomeLayout>
if $is_android {
//Only render the back button for Android
<BackButton />
}
/* ... */
</SomeLayout>
2. Dynamic properties where Rust logic checks for the target platform, like: <SomeElement some_property={self.get_platform_specific_value()} />
3. Maintain a separate codebase (or different specific components) for each target platform, in the spirit of React NativeOr any mix of the above.
ogoffart
With Slint [https://slint-ui.com], our aim is to achieve native look and feel, and accessibility.
tpush
Native doesn't really exist on desktops except macOS, but accessibility is a good question.
bryanlarsen
The native bindings are the first section on the list, and they work well. If you're concerned about looking and behaving native just use those native bindings.
Macha
The native toolkits, and Qt. Gtk if you're on Linux
nicoburns
None yet, but that is being worked on.
rtpg
A pretty fun Rust GUI experienc is vgtk[0], which is doing a bunch of macro magic to give a "we're coding in React" vibe to GTK+. I don't really have a specific thing I want to code in a native GUI at the moment but if I did I think this would be the most tempting for me.
tristan957
FYI the project is called GTK, not GTK+, these days. They dropped it late in the 3.X cycle if I remember correctly.
fnord123
Relm4 is similar.
joshka
Anyone have a recommendation of what they'd use to run on a raspberry pi with a touch screen? My preference would be booting direct to the gui and having no other things running (i.e. X11 / etc.) as well as having a good development story for macOS. Is there something decent that enables this for rust? Bonus points for github example repos.
kevin_thibedeau
Qt is the most mature system for running on a framebuffer.
eYrKEC2
I second this. I wrote an internal Qt/QML app that ran on Windows, Linux, Android, and Raspberry Pis. We had ~20 Raspberry Pi's running this app in kiosk mode. If only KDAB/cxx-qt[1] were ready then, I would have done as much as possible in rust .
joshka
Neat. Thanks!
joshka
That's pretty much the conclusion I'd come to when doing initial research. Good to know that others think the same. Mostly this is for the somewhere in the future type project we all have.
eklavya
Flutter app with rust core works great too.
satvikpendem
Yep, to be honest I don't think Rust has the manpower that Flutter has when it comes to writing a fully cross platform GUI. I simply don't expect anyone to be able to match Flutter or other similar frameworks like Qt without spending a lot of time and a lot of money.
robertkrahn01
https://github.com/gabdube/native-windows-gui isn't in the list but is quite a polished option for building Windows specific GUIs. Seems to be the more mature option compared to winsafe.
the__alchemist
Of the UI toolkits listed, it seems like Egui is nicest to use. It's flexible, has a nice collection of built-in widgets, is compatible with 3D graphics APIs (like WGPU), and has a clean API.
Get the top HN stories in your inbox every day.
Shout out to Dioxus. It's a react clone that provides a really nice experience and can run a web GUI faster than React can. That's quite the accomplishment given the disadvantage of having to use shims to access the DOM.
If you want to choose a single language that can create native GUI's, Rust is probably your best or only choice. Other languages are lacking a good story for either the web or for iOS but Rust works well on both.