Cross-platform user interface frameworks

Cross-platform user interface frameworks

Today, there are many user interface technologies in the market, claiming to be platform independent or cross platform. While this is generally true, there are lots of technical differences and it is not easy to choose the right technology for a given use case.

In this article, we introduce a set of common „big“ frameworks and explain their advantages and disadvantages, we have identified during our development activities.

Embedded frameworks to work with restricted resources were deliberately omitted. There will be another article focusing on embedded UI frameworks.

Here’s our personal list. The order doesn’t imply any statement on quality or usefulness of the listed frameworks. They have different approaches addressing different requirements. So its up to you to make a choice 🙂

Flutter

Flutter is a framework developed and maintained by Google. It can be run on the major desktop and mobile platforms, as web applications as well as on embedded targets by using a custom embedder. All controls are drawn by the framework using skia. Flutter apps are programmed using the Dart language that’s also developped by Google. Flutter was first released in 2017 and is released under the new BSD licence.

Summary:
– Maintainer: Google
– Language: Dart
– Platforms: Android, iOS,Linux, Mac, Windows, Embedded, Web
– Licence: New BSD
– Drawing: Skia
– First Release: 2017

Pros and Cons:
– Pro: Application rendering won’t differ across platforms
– Con: Necessity to learn new Dart language

Xamarin.Forms

Deprecated! Xamarin support will end on May 1, 2024 for all Xamarin SDKs
Use .NET MAUI or another C# framework instead.

.NET MAUI

Maui is a framework developed and maintained by the .NET foundation that was founded by Microsoft as open source organization. It is the successor to the deprecated Xamarin.Forms framework where support will end in may 2024. It can be run on the major mobile platforms, macOS and Windows. Same as its predecessor the framework is meant to look native on every platform. For this it uses native controls where possible and provides a feature set, that provides only the set of options that are available on all supported platforms. This sometimes makes customization of controls rather hard or even forces you to implement your own controls. If you are targeting a platform agnostic look for your app, Maui is probably the wrong choice. Even if you use only the default styles the app will look different on every platform. Maui apps are programmed using C# and the same XAML dialect as Xamarin.Forms and can leverage the huge pool of C# libraries. Some platform specific features need to be addressed separately, but can all be done in the same assembly. Maui was first released in 2022 and is released under the MIT licence.

Summary:
– Maintainer: .Net Foundation (Microsoft)
– Language: C# / XAML
– Platforms: Android, iOS, Windows, macOS
– Licence: MIT
– Drawing: native controls
– First Release: 2022

Pros and Cons:
– Pro: Provided by Microsoft
– Pro: Native look on every platform
– Pro: Commercial support
– Con: Big workload to make app look good on each platform (platform specific styles)

Uno Platform

Uno Platform is a framework developed and maintained by nventive. It can be run on the major desktop and mobile platforms, as web applications as well as on embedded targets by using embedded Linux and a framebuffer device. All controls are drawn using platform specific drawing machanisms like UIKit on mac, or Skia on Linux. The exception is Windows where WinUI3 is used in the background. This sometimes leads to diverging behaviour between Windows builds and builds for other platforms, where Uno Platform doesn’t implement the underlying mechanisms exactly the same as WinUI3. Uno Platform apps are programmed using C# and the UWP XAML dialect and can leverage the huge pool of C# libraries. Some platform specific features need to be addressed separately, but can all be done in the same assembly. Uno was developped since 2013 as a closed source project and was completely opensourced in 2018 under the Apache licence.

Summary:
– Maintainer: nventive
– Language: C# / XAML
– Platforms: Android, iOS,Linux, Mac, Windows, embedded Linux Framebuffer, Web
– Licence: Apache
– Drawing: on Windows WinUI3, others self drawn (Skia, mac UIKit, WASM, …)
– First Release: 2013 / 2018

Pros and Cons:
– Pro: Renders Controls the same as WinUI3 would => Application rendering won’t differ across platforms
– Pro: Commercial support
– Con: Does some things different to WinUI3 wich leads to inconsistent behaviour on different platforms

Avalonia UI

Avalonia UI is a framework developed and maintained by AvaloniaUI OÜ. It can be run on the major desktop and mobile platforms, as web applications as well as on embedded targets by using embedded Linux and a framebuffer device. All controls are drawn by the framework using skia. Uno Platform apps are programmed using C# and can leverage the huge pool of C# libraries. Some platform specific features need to be addressed separately, but can all be done in the same assembly. Avalonia UI apps are programmed using C# and XAML. They can leverage the huge pool of C# libraries. Some platform specific features need to be addressed separately, but can all be done in the same assembly. The XAML is mostly the same as the dialect used for WPF (Windows Presentation Foundation) applications. Initialy it was developed as multi platform version of WPF for different desktop environments. This makes migration to this framework rather easy for WPF developers. Avalonia UI was first released in 2013 and is developed under the MIT licence.

Summary:
– Maintainer: AvaloniaUI OÜ
– Language: C# / XAML
– Platforms: Android, iOS,Linux, Mac, Windows, embedded Linux Framebuffer, Web
– Licence: MIT
– Drawing: Skia
– First Release: 2013

Pros and Cons:
– Pro: Application rendering won’t differ across platforms
– Pro: Easy migration for WPF (Windows Presentation Foundation) developers
– Pro: Commercial support
– Con: Smaller community libraries for controls

Qt

Qt is a framework developed and maintained by Qt Project. It can be run on the major desktop and mobile platforms, as web applications as well as on embedded targets with graphics support. It directly renders all controls using OpenGL, Direct3D, Vulkan or other Graphics APIs. Qt apps are developped in C++ that requires more caution upon object creation and destruction than other frameworks in managed languages. On the other hand it might have some performance advantages if used correctly. Qt was first released in 1995 and is developed partialy as proprietary software and partially under GPL3, LGPL3 and LGPL2.1

Summary:
– Maintainer: Qt Project
– Language: C++ / QML
– Platforms: Android, iOS,Linux, Mac, Windows, Embedded, Web
– Licence: Mixed: LGPL, GPL, or proprietary
– Drawing: ObenGL, Direct3D, Vulkan, …
– First Release: 1995

Pros and Cons:
– Pro: Portable to lots of platforms with performant C++ code
– Pro: QML rendering won’t differ across platforms
– Pro: Commercial support
– Con: Restrictive licence
– Con: C++ not a managed language