GUI frameworks for .NET – Part 6: Uno Platform
The last part of the series on GUI frameworks for .NET introduces Uno, another platform-neutral framework, and summarizes the entire series.
(Image: KI/iX)
- Dr. Holger Schwichtenberg
The Uno Platform is another cross-platform GUI framework for .NET and the direct competitor of Avalonia from Part 5. It has existed since 2018 as an open source project (Apache 2.0 license) of the Canadian company of the same name based in Montréal, with around 30 employees.
Uno applications run on Windows from Windows 7, on all Linux distributions for which .NET 7.0 or higher is available, macOS (Desktop and Catalyst, from version 10.15), iOS from version 11, Android from version 5 and in all WebAssembly-capable browsers. There is also a NuGet package for Tizen, but it does not appear in the platform list on GitHub or in the documentation because it is not up to date.
Uno is based on the eXtensible Application Markup Language (XAML), as are the Windows Presentation Foundation (WPF), the Windows UI Library (WinUI), WinUI 3, .NET Multi-Platform App UI (MAUI) and Avalonia/Avalonia XPF. However, the syntax of XAML in Uno is not based on WPF-XAML, but on WinUI-XAML including SVG rendering.
(Image:Â coffeemill/123rf.com)
Improved classes in .NET 10.0, Native AOT with Entity Framework Core 10.0 and more: Dr. Holger Schwichtenberg and other speakers at the online conference betterCode() .NET 10.0 on November 18, 2025 will provide information on these topics, followed by six full-day workshops on topics such as C# 14.0, the use of AI and web APIs.
New possibilities since Uno Platform 6.0
Before the release of Uno version 6.0 on May 7, 2025, developers had the choice between compatibility with UWP with WinUI 2 in the Windows.UI.Xaml namespace or WinUI 3 in the Microsoft.UI.Xaml namespace. There are therefore two Uno packages: Uno.UI for UWP-XAML (there is no version 6.0 here anymore) and Uno.WinUI for WinUI-3-XAML (there is a version 6.0 here). As the Uno development team generates Uno.WinUI automatically from Uno.UI, the functions of both packages are almost identical. With version 6.0, Uno now recommends migrating to WinUI 3. Uno also puts an end to hosting in a GTK shell in version 6.0.
On Windows, however, Uno version 6.0 still offers four options for the shell: WPF, Win32, Windows App SDK (in which case the application only runs from Windows 10 version 19041) or X11, if Windows Subsystem for Linux 2 is available with a corresponding Linux distribution. In contrast to the WPF shell, the Win32 shell offers trimming (tree shaking), which reduces the application size during deployment. Self-contained apps, which include the .NET runtime environment and all required libraries and therefore do not require prior installation of the .NET Runtime, are also only possible with Win32 hosting. However, compilation with the native AOT compiler is not yet possible. "Native AOT compilation is on the roadmap," said Sasha Krsmanovic, Chief Marketing Officer at Uno, in an interview. It remains to be seen whether the four hosting options on Windows will remain. "The future of WPF will depend on usage by our clients and community, which is the case for all the components of Uno Platform," says Sasha Krsmanovic.
The Media Player and WebView2 controls for displaying HTML content have been available since Uno 6.0. However, even version 6.0 of Uno is not 100 percent compatible with Microsoft's WinUI interfaces. For example, Uno lacks the ListBox, MapControl, Hub, SemanticZoom, RichTextBlock, VirtualizingStackPanel, ParallaxView and AnnotatedScrollBar controls.
A list of differences between WinUI controls and Uno controls can be found in the documentation. There are also marginal differences in the XAML syntax. For example, the DependencyObject type in Uno is an interface instead of a class as in Microsoft. On Android, iOS and macOS, the inheritance sequence for the UIElement base class differs from the Microsoft implementation.
As with Avalonia, rendering in Uno Platform 6.0 is based on the Skia Graphics Library from Google via SkiaSharp from the Mono project (see Figure 1) – except for hosting in the Windows app on Windows, where the DirectX-12-based rendering engine of the SDK is used (see also Part 2 of the series). Before Uno 6.0, native renderers were used on iOS and Android, which are still available as options.
Before Uno 6.0, XAML was always implemented in HTML and CSS in the web browser (with many <div> elements). These rendering options are still available in Uno 6.0; however, Skia rendering is now also the standard in the browser. Figures 2 and 3 show a comparison of HTML and Skia rendering. With Skia rendering, Uno applications, just like Avalonia applications, look the same on all platforms, unlike .NET MAUI (see part 3 of the series), which offers a platform-specific look and feel by relying on the platform-specific rendering.
(Image:Â Uno Platform)