Fruits of my recent search for a cross-platform ui toolkit.
Brian Sturgill
c.brian.sturgill at gmail.com
Thu Dec 21 19:34:29 UTC 2023
Parts of MAUI are more mature than Avalonia. MAUI isn't really new, it is
Xamaran plus
UWP (made less hideously locked down). WINUI, which backs the Windows
portion of
MAUI, has many features not in MAUI. MAUI lets one call native WINUI,
Android, iOS and
(some) MacOS features at will.
Additionally Microsoft prefered native controls to be used on each platform.
Thus Microsoft largely ignores Avalonia
Alas Microsoft backed out of their original pledge to support Linux.
Brian
On Thu, Dec 21, 2023 at 12:19 PM Victor Mumford <victoremumford at gmail.com>
wrote:
> 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?
>
> I can't compare it to the other options, but I've been very happy with
> Flutter so far.
>
> On Mon, Dec 18, 2023, 3:20 PM Brian Sturgill <c.brian.sturgill at gmail.com>
> wrote:
>
>> Primary Criterion: Must work on Linux, Windows and MacOS desktops.
>>
>> I want to use this to make open-source desktop apps.
>>
>> --
>>
>> # What I believe about cross-platform UIs as of 2003-12-18.
>>
>> Cross-platform and cross-language:
>> wxWidgets: (Windows, Linux, MacOS, *BSD)
>> https://www.wxwidgets.org/
>> Uses native controls, bindings in a huge number of languages.
>> It lags on mobile, iOS in progress.
>> Apps feel dated, even though wxWidgets take steps to use latest
>> controls on Windows.
>> Linux toolkits support is great, but alas, those toolkits are also
>> looking dated.
>> Haven't done recent measurements, but is rather fat (disk/memory)
>> unless you are using it directly in C++.
>> Basically you have a language, wrapping a huge toolkit, which
>> wraps native controls. It kind of has to be fat.
>>
>> Dart only:
>> Flutter (Windows, Linux, MacOS, iOS, Android)
>> https://flutter.dev/
>> Does not use native controls.
>> Most modern looking of all the options.
>> Has the smallest runtime to lug around.
>> (Still not that small - 20M on Linux).
>>
>> Dotnet only:
>> (These obviously have to deal with the rather large .NET runtime.)
>> Avalonia (Windows, Linux [Gtk], MacOS, iOS, Android)
>> https://avaloniaui.net/
>> Does not use native controls.
>> If you liked Microsoft's WPF, you want to look at this one.
>> Alas, doesn't seem to be nearly as popular as I think it should
>> be.
>> Microsoft MAUI (Windows, MacOS, iOS, Android)
>> https://dotnet.microsoft.com/en-us/apps/maui
>> MacOS "support" is really just for iOS app on MacOS.
>> Uses native controls.
>> Windows support is said to be buggy. (Shocking, really.)
>>
>> Python only:
>> (These obviously have to deal with the huge Python runtime.)
>> (Remember that Windows and maybe even MacOS will need Python to be
>> installed.)
>> (One would have to seriously consider using venv for app
>> distributions.)
>> Kivy
>> https://kivy.org/
>> Does not use native controls.
>> BeeWare
>> https://beeware.org/
>> Does not use native controls.
>>
>> Java VM:
>> (These obviously have to deal with the rather large
>> Java/Kotlin/Compose runtime.)
>> JetBrains/compose-multiplatform (Windows, Linux, MacOS, Android)
>> https://github.com/JetBrains/compose-multiplatform
>> Is Kotlin based (from JetBrains). Uses Google's Jetpack Compose.
>> iOS support is in alpha.
>> This toolkit has not really taken off yet, but it could.
>> I am not certain, but it seems not to be using native controls.
>> However, it appears you can use some native controls with the
>> toolkit.
>>
>> There are a number of older toolkits, AWT, SWT, etc. but none seem
>> to have really gained traction.
>>
>> Notes:
>> Native controls yea, or nay?
>> Native controls behave exactly like the user expects and blends in
>> well.
>> Not using native controls reduces bloat, gives pixel perfect accuracy
>> across platforms and often is faster. (Native controls sets have
>> gained
>> bloat with time.)
>>
>> Most popular for mobile is 1) Flutter, 2) MAUI.
>> React Native, Phone Gap, and Cordova are being left behind.
>>
>> I personally (for my open source desktop app work) am going with
>> Flutter.
>> My second choice would have been wxWidgets, not sure what language
>> though.
>>
>> I will be using Material Design with Flutter as most people have seen
>> it
>> and it doesn't look like any of the native platforms. Looking _like_
>> native when you're not, often leads to confusion.
>>
>> I don't consider JavaScript things here. They are all quite bloated.
>> Their popularity has decreased rapidly in recent times.
>> Electron is still the leader here if you want to go that route.
>> (Before going there, take a look at the memory footprint of VSCode or
>> Atom.)
>>
>> Also, not included is React Native which is complicated.
>> It isn't really "native" in any meaningful sense.
>> It was heavily used for a while but has been declining.
>>
>> I am only considering open source solutions here, so Qt is not
>> included (not free outside of Linux).
>>
>
>>
>> --
>>
>> Brian
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.nclug.org/pipermail/nclug/attachments/20231221/bf950241/attachment.htm>
More information about the NCLUG
mailing list