<div dir="ltr"><div>Primary Criterion: Must work on Linux, Windows and MacOS desktops.</div><div><br></div><div>I want to use this to make open-source desktop apps.<br></div><div><br></div><div>--</div><div><br># What I believe about cross-platform UIs as of 2003-12-18.<br><br>Cross-platform and cross-language:<br>Â Â wxWidgets: (Windows, Linux, MacOS, *BSD)<br>Â Â Â Â <a href="https://www.wxwidgets.org/">https://www.wxwidgets.org/</a><br>Â Â Â Â Uses native controls, bindings in a huge number of languages.<br>Â Â Â Â It lags on mobile, iOS in progress.<br>Â Â Â Â Apps feel dated, even though wxWidgets take steps to use latest<br>Â Â Â Â Â Â controls on Windows.<br>Â Â Â Â Linux toolkits support is great, but alas, those toolkits are also<br>Â Â Â Â Â Â looking dated.<br>Â Â Â Â Haven't done recent measurements, but is rather fat (disk/memory)<br>Â Â Â Â Â Â unless you are using it directly in C++.<br>Â Â Â Â Basically you have a language, wrapping a huge toolkit, which<br>Â Â Â Â Â Â wraps native controls. It kind of has to be fat.<br>Â Â <br>Dart only:<br>Â Â Flutter (Windows, Linux, MacOS, iOS, Android)<br>Â Â Â Â <a href="https://flutter.dev/">https://flutter.dev/</a><br>Â Â Â Â Does not use native controls.<br>Â Â Â Â Most modern looking of all the options.<br>Â Â Â Â Has the smallest runtime to lug around.<br>Â Â Â Â Â Â (Still not that small - 20M on Linux). <br>Â Â <br>Dotnet only:<br>Â Â (These obviously have to deal with the rather large .NET runtime.)<br>Â Â Avalonia (Windows, Linux [Gtk], MacOS, iOS, Android)<br>Â Â Â Â <a href="https://avaloniaui.net/">https://avaloniaui.net/</a><br>Â Â Â Â Does not use native controls.<br>Â Â Â Â If you liked Microsoft's WPF, you want to look at this one.<br>Â Â Â Â Alas, doesn't seem to be nearly as popular as I think it should be.<br>Â Â Microsoft MAUI (Windows, MacOS, iOS, Android)<br>Â Â Â Â <a href="https://dotnet.microsoft.com/en-us/apps/maui">https://dotnet.microsoft.com/en-us/apps/maui</a><br>Â Â Â Â MacOS "support" is really just for iOS app on MacOS.<br>Â Â Â Â Uses native controls.<br>Â Â Â Â Windows support is said to be buggy. (Shocking, really.)<br><br>Python only:<br>Â Â (These obviously have to deal with the huge Python runtime.)<br>Â Â (Remember that Windows and maybe even MacOS will need Python to be installed.)<br>Â Â (One would have to seriously consider using venv for app distributions.)<br>Â Â Kivy<br>Â Â Â Â <a href="https://kivy.org/">https://kivy.org/</a><br>Â Â Â Â Does not use native controls.<br>Â Â BeeWare<br>Â Â Â Â <a href="https://beeware.org/">https://beeware.org/</a><br>Â Â Â Â Does not use native controls.<br>Â Â Â Â <br>Java VM:<br>Â Â (These obviously have to deal with the rather large Java/Kotlin/Compose runtime.)<br>Â Â JetBrains/compose-multiplatform (Windows, Linux, MacOS, Android)<br>Â Â Â Â <a href="https://github.com/JetBrains/compose-multiplatform">https://github.com/JetBrains/compose-multiplatform</a><br>Â Â Â Â Is Kotlin based (from JetBrains). Uses Google's Jetpack Compose.<br>Â Â Â Â iOS support is in alpha.<br>Â Â Â Â This toolkit has not really taken off yet, but it could.<br>Â Â Â Â I am not certain, but it seems not to be using native controls.<br>Â Â Â Â However, it appears you can use some native controls with the<br>Â Â Â Â toolkit.<br>Â Â Â <br>Â Â Â There are a number of older toolkits, AWT, SWT, etc. but none seem<br>Â Â Â to have really gained traction.<br><br>Notes:<br>Â Â Native controls yea, or nay?<br>Â Â Native controls behave exactly like the user expects and blends in well.<br>Â Â Not using native controls reduces bloat, gives pixel perfect accuracy<br>Â Â across platforms and often is faster. (Native controls sets have gained<br>Â Â bloat with time.)<br>Â Â <br>Â Â Most popular for mobile is 1) Flutter, 2) MAUI.<br>Â Â React Native, Phone Gap, and Cordova are being left behind.<br>Â Â <br>Â Â I personally (for my open source desktop app work) am going with Flutter.<br>Â Â My second choice would have been wxWidgets, not sure what language though.<br>Â Â <br>Â Â I will be using Material Design with Flutter as most people have seen it<br>Â Â and it doesn't look like any of the native platforms. Looking _like_<br>Â Â native when you're not, often leads to confusion.<br>Â Â Â Â <br>Â Â I don't consider JavaScript things here. They are all quite bloated.<br>Â Â Their popularity has decreased rapidly in recent times.<br>Â Â Electron is still the leader here if you want to go that route.<br>Â Â (Before going there, take a look at the memory footprint of VSCode or Atom.)<br>Â Â <br>Â Â Also, not included is React Native which is complicated.<br>Â Â It isn't really "native" in any meaningful sense.<br>Â Â It was heavily used for a while but has been declining.<br>Â Â <br>Â Â I am only considering open source solutions here, so Qt is not<br>Â Â included (not free outside of Linux).<br></div><div><div><br><span class="gmail_signature_prefix">-- </span><br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><br><div>Brian</div><div><br></div></div></div></div></div>