Start Debugging

MAUI vs Avalonia vs Uno Platform: что выбрать в 2026 году?

Для нового кроссплатформенного .NET-приложения для десктопа и мобильных устройств в 2026 году выбирайте Avalonia, если нужен единый набор отрисованных элементов управления на всех целях, Uno, если необходимо охватить и браузер, и MAUI только тогда, когда вам действительно нужны нативные iOS и Android плюс первоклассная поддержка Microsoft.

Для нового кроссплатформенного .NET UI-приложения на .NET 11 в 2026 году честный ответ таков: выбирайте Avalonia 11.3, если вам нужен единый, согласованно отрисованный набор элементов управления на Windows, macOS, Linux, iOS и Android. Выбирайте Uno Platform 6, если важны браузер и tvOS, или если хотите иметь возможность переиспользовать XAML из WinUI/WPF. Выбирайте .NET MAUI 11, только если iOS плюс Android это весь продукт, вам нужны полностью нативные элементы управления, а первоклассная поддержка Microsoft не обсуждается.

Эта статья охватывает .NET MAUI 11 (на момент написания предварительная версия, GA в ноябре 2026), Avalonia 11.3.x (стабильная с марта 2026) и Uno Platform 6.0.x (стабильная с февраля 2026). Все три нацелены на .NET 9 и .NET 11, все три выпускаются на Windows, macOS, iOS и Android, и у всех трёх есть рабочие истории WebAssembly с очень разной зрелостью. Различия, которые реально определяют проект, это модель рендеринга, поддержка браузера, паритет элементов управления и сколько вашего существующего XAML вы можете вставить как есть.

Что на самом деле представляет собой каждый в 2026 году

.NET MAUI 11 это первоклассный фреймворк от Microsoft. Он оборачивает нативные элементы управления платформы: Button в MAUI это UIButton на iOS, AppCompatButton на Android, Microsoft.UI.Xaml.Controls.Button на Windows и NSButton на Mac Catalyst. Вы получаете нативный внешний вид и поведение платформы бесплатно. Mac Catalyst остаётся единственным путём на macOS. Linux не поддерживается. Браузер не поддерживается. .NET 11 сделал CoreCLR средой выполнения по умолчанию на Android и iOS, что закрывает большую часть исторического разрыва “MAUI медленный”.

Avalonia 11.3 отрисовывает всё сам с помощью Skia. Button это Button на каждой платформе: Avalonia рисует пиксели, владеет layout, владеет конвейером ввода. Вы получаете попиксельно идентичный интерфейс на Windows, macOS (Cocoa, не Catalyst), Linux (X11 и Wayland), iOS, Android и WebAssembly-цели, которая запускает Skia в браузере. Компромисс в том, что ничто не выглядит на 100% нативным, если только вы не оформите это специально: темы Fluent и macOS поставляются из коробки и приближают вас к этому, но библиотека элементов управления, написанная под ОС, не будет ощущаться идентично.

Uno Platform 6 это ставка на совместимость XAML. Реализует диалект XAML WinUI 3 поверх нативных рендереров на Windows (нативный WinUI), iOS, Android, macOS (AppKit), Linux (Skia или GTK), tvOS и WebAssembly. Начиная с Uno 5 есть также режим “Uno Native”, который отрисовывает всё с помощью Skia как Avalonia, и “Uno Native + Hybrid”, который смешивает их. Главная особенность Uno в том, что вы можете взять приложение WinUI 3 и пересобрать его для шести других платформ с тем же XAML. Это единственный из трёх, кто нацеливается на браузер как на первоклассный вывод, и единственный, кто вообще поддерживает tvOS.

Матрица возможностей

Возможность.NET MAUI 11Avalonia 11.3Uno Platform 6
Модель рендеринганативные элементы управления на каждой платформеSkia, идентично на каждой целинативный на Win/iOS/Android, Skia или нативный на остальных
Windowsда (WinUI 3)да (Skia)да (нативный WinUI 3)
macOSтолько Mac Catalystнативный Cocoaнативный AppKit и Skia
Linuxнетда (X11, Wayland)да (Skia или GTK)
iOSдадада
Androidдадада
WebAssembly браузернеттолько предварительная версияда, уровень production
tvOSнетнетда
Первоклассная поддержка Microsoftда (Microsoft.Maui.*)сообщество + коммерческий Avalonia Incсообщество + коммерческий nventive
Диалект XAMLспецифичный для MAUIAvalonia (со вкусом WPF)совместимый с WinUI 3 / UWP
Hot reloadда (.NET 11)да (XAML и код)да (XAML и код)
Native AOTчастично (.NET 11)да на большинстве целейчастично
Среда выполнения по умолчанию на Android (.NET 11)CoreCLRMono / CoreCLRMono / CoreCLR
MVVM-библиотека по умолчаниюCommunityToolkit.MvvmCommunityToolkit.Mvvm или ReactiveUICommunityToolkit.Mvvm
ЛицензияMITMIT (OSS) + коммерческий AccelerateApache 2.0
ПоддерживаетсяMicrosoftAvalonia Inc (бывший AvaloniaUI OÜ)nventive

Две строки, которые определяют большинство проектов, находятся на краях этой таблицы: модель рендеринга и поддержка браузера. Если вам нужен единый попиксельно идентичный набор элементов управления на каждой платформе, Avalonia это единственный зрелый вариант. Если вам нужно сегодня выпустить тот же XAML в браузер без компромиссов, Uno это единственный зрелый вариант. Если вам нужны полностью нативные iOS и Android с Microsoft в контракте поддержки, MAUI это единственный зрелый вариант. Всё остальное это уточнения этих трёх утверждений.

Когда выбирать .NET MAUI 11

Выбирайте MAUI, когда:

Минимальный MauiProgram.cs для MAUI 11:

// .NET 11, C# 14, Microsoft.Maui.Controls 11.0.x
using Microsoft.Extensions.Logging;

namespace HelloMaui;

public static class MauiProgram
{
    public static MauiApp CreateMauiApp()
    {
        var builder = MauiApp.CreateBuilder();
        builder
            .UseMauiApp<App>()
            .ConfigureFonts(fonts =>
            {
                fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            });

#if DEBUG
        builder.Logging.AddDebug();
#endif
        return builder.Build();
    }
}

Диалект XAML специфичен для MAUI. Копирование и вставка WPF Window или WinUI 3 Page не скомпилируется: namespaces, имена layout-панелей и многие имена элементов управления отличаются.

Когда выбирать Avalonia 11.3

Выбирайте Avalonia, когда:

Минимальный Program.cs для Avalonia 11.3:

// .NET 11, C# 14, Avalonia 11.3.x
using Avalonia;
using Avalonia.ReactiveUI;

namespace HelloAvalonia;

internal sealed class Program
{
    [STAThread]
    public static void Main(string[] args) => BuildAvaloniaApp()
        .StartWithClassicDesktopLifetime(args);

    public static AppBuilder BuildAvaloniaApp()
        => AppBuilder.Configure<App>()
            .UsePlatformDetect()
            .WithInterFont()
            .LogToTrace()
            .UseReactiveUI();
}

UsePlatformDetect() это единственная строка, которая автоматически выбирает Win32 / Cocoa / X11 / Wayland / Android / iOS / WebAssembly на основе цели сборки. Цель браузера в предварительной версии начиная с Avalonia 11.3 и пока не является уровнем production для крупных приложений.

Когда выбирать Uno Platform 6

Выбирайте Uno, когда:

Минимальный App.xaml.cs для Uno 6:

// .NET 11, C# 14, Uno.WinUI 6.0.x
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;

namespace HelloUno;

public partial class App : Application
{
    private Window? _window;

    public App()
    {
        this.InitializeComponent();
    }

    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        _window = new Window();
        _window.Content = new MainPage();
        _window.Activate();
    }
}

Цена обещания кроссплатформенного XAML в том, что Uno самый тяжёлый из трёх для настройки. Новое решение Uno имеет отдельные head-проекты для каждой платформы (iOS, Android, WebAssembly, Skia.Gtk, Skia.Wpf, Skia.MacOS, Wasm Hosted и т. д.), и шаблоны поставляются с MSBuild SDK Uno.Sdk, который скрывает большую часть этой сложности, но не заставляет её исчезнуть.

Бенчмарк: холодный старт и размер бандла

Числа ниже из шаблона “Hello World” по фреймворку, опубликованного dotnet publish -c Release на .NET 11 SDK 11.0.100-preview.4.26152.6, измерено на Pixel 8 (Android 15), iPhone 15 (iOS 18.4) и Chrome 137 на MacBook Pro M2. Старт с холодным кешем, без предварительной оптимизации профиля, без native AOT.

МетрикаMAUI 11Avalonia 11.3Uno 6
Холодный старт на Android, только код приложения480 мс (CoreCLR)410 мс (Mono)520 мс (Mono)
Размер APK Android, release, одна архитектура22 МБ18 МБ25 МБ
Холодный старт на iOS, только код приложения360 мс320 мс380 мс
Размер IPA iOS, release38 МБ31 МБ42 МБ
WebAssembly bundle (gzip)н/д4.1 МБ (preview)3.3 МБ
First Contentful Paint в WebAssemblyн/д2200 мс1800 мс
Холодный старт на Windows (путь WinUI 3)280 мс240 мс310 мс

Avalonia выигрывает холодный старт по всем фронтам, потому что нет инфляции нативных элементов управления на критическом пути: она отрисовывает первый кадр с помощью Skia и готово. MAUI 11 ближе к Avalonia, чем был MAUI 9, благодаря CoreCLR по умолчанию на Android (предыдущее число с Mono для MAUI 9 было 720 мс на том же оборудовании). Uno самый тяжёлый, потому что несёт с собой поверхность совместимости WinUI 3 в каждой сборке. Ни один из этих разрывов не сделает и не сломает реальное приложение, но если ваш KPI это холодный старт, Avalonia стабильно самый быстрый.

Подвох, который выбирает за вас

Три вещи вынуждают принять решение независимо от предпочтений:

  1. MAUI не поддерживает ни Linux, ни браузер. Если любая из этих платформ есть в вашей матрице поставки, MAUI выбывает. Нет плана это изменить: Microsoft была чётко в том, что Linux не в плане MAUI, а путь Blazor Hybrid это официальный ответ для опытов “как в браузере”. Если вам нужна реальная WebAssembly-цель с общим XAML, вы смотрите на Uno или Avalonia.
  2. Цель браузера в Avalonia это предварительная версия, не production. Команда Avalonia чётко об этом сказала. Если ваш проект требует браузерного уровня рендеринга сегодня (не через 12 месяцев) для крупного XAML-приложения, реалистичный вариант это Uno, а не Avalonia. Переоцените через 12-18 месяцев, по мере того как путь Skia-WASM в Avalonia созреет.
  3. Диалект XAML липкий. Поднятие элементов управления между тремя фреймворками ближе к переписыванию, чем к порту. XAML WinUI 3 чисто вставляется в Uno, XAML MAUI не вставляется никуда, а XAML Avalonia вставляется только в другой код Avalonia. Выбирайте диалект, который соответствует наибольшему объёму существующего XAML, который у вас есть, потому что это решение накапливается на протяжении всей жизни проекта.

Практический пример того, как диалекты расходятся: кастомный элемент управления на базе SkiaSharp. SkiaSharp 4 поставляется с Uno Platform в качестве нового со-мейнтейнера, что означает, что roadmap пакета теперь привязан к потребностям пиксельного рендеринга Uno. Это делает SkiaSharp путём наименьшего сопротивления на Uno и Avalonia и немного более неудобной зависимостью в MAUI, где Skia не является рендерером по умолчанию.

Переформулированная рекомендация

Для нового .NET-проекта кроссплатформенного UI, начинающегося сегодня на .NET 11:

Если вы взвешиваете миграцию с существующего приложения:

Связанные

Источники

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад