<div dir="auto">Thanks for the overview Brian! I've never heard of Avalonia UI, but I'll be glad to look into it, I'm glad to have a reason to practice C#. I wonder why Microsoft is working on MAUI though if Avalonia seems more mature and feature-full, at least on a surface level?<div dir="auto"><br></div><div dir="auto">I can't compare it to the other options, but I've been very happy with Flutter so far. </div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 18, 2023, 3:20 PM Brian Sturgill <<a href="mailto:c.brian.sturgill@gmail.com">c.brian.sturgill@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><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/" target="_blank" rel="noreferrer">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/" target="_blank" rel="noreferrer">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/" target="_blank" rel="noreferrer">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" target="_blank" rel="noreferrer">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/" target="_blank" rel="noreferrer">https://kivy.org/</a><br> Does not use native controls.<br> BeeWare<br> <a href="https://beeware.org/" target="_blank" rel="noreferrer">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" target="_blank" rel="noreferrer">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>
</blockquote></div>