Start Debugging

MAUI vs Avalonia vs Uno Platform: qual escolher em 2026?

Para um novo aplicativo .NET multiplataforma de desktop e mobile em 2026, escolha Avalonia quando precisar de um único conjunto de controles renderizados em todos os destinos, Uno quando também precisar chegar ao navegador, e MAUI somente quando realmente precisar de iOS e Android nativos mais o suporte de primeira mão da Microsoft.

Para um aplicativo .NET multiplataforma de interface de usuário novo em folha rodando em .NET 11 em 2026, a resposta honesta é: escolha Avalonia 11.3 se você precisar de um único conjunto de controles renderizados de forma consistente em Windows, macOS, Linux, iOS e Android. Escolha Uno Platform 6 se navegador e destinos tvOS importam, ou se você quer a opção de reaproveitar XAML do WinUI/WPF. Escolha .NET MAUI 11 se iOS mais Android é todo o produto, você precisa de controles totalmente nativos, e o suporte de primeira mão da Microsoft não é negociável.

Este post cobre .NET MAUI 11 (versão prévia no momento da escrita, GA em novembro de 2026), Avalonia 11.3.x (estável desde março de 2026) e Uno Platform 6.0.x (estável desde fevereiro de 2026). Os três visam .NET 9 e .NET 11, os três publicam para Windows, macOS, iOS e Android, e os três têm histórias funcionais de WebAssembly com maturidade muito diferente. As diferenças que realmente decidem um projeto são modelo de renderização, suporte de navegador, paridade de controles e quanto do seu XAML existente você pode colar tal qual.

O que cada um realmente é em 2026

.NET MAUI 11 é o framework de primeira mão da Microsoft. Ele envolve os controles nativos da plataforma: um Button no MAUI é um UIButton no iOS, um AppCompatButton no Android, um Microsoft.UI.Xaml.Controls.Button no Windows e um NSButton no Mac Catalyst. Você obtém a aparência nativa e o comportamento de plataforma de graça. Mac Catalyst continua sendo o único caminho para macOS. Linux não é suportado. Navegador não é suportado. O .NET 11 tornou CoreCLR o runtime padrão em Android e iOS, o que fecha a maior parte da lacuna histórica do “MAUI é lento”.

Avalonia 11.3 renderiza tudo sozinho com Skia. Um Button é um Button em cada plataforma: o Avalonia desenha os pixels, controla o layout, controla o pipeline de entrada. Você obtém uma interface idêntica pixel a pixel em Windows, macOS (Cocoa, não Catalyst), Linux (X11 e Wayland), iOS, Android e um destino WebAssembly que roda Skia no navegador. O custo é que nada parece 100% nativo a menos que você estilize dessa forma: os temas Fluent e macOS vêm prontos e te aproximam bastante, mas uma biblioteca de controles escrita para o SO não vai parecer idêntica.

Uno Platform 6 é a aposta na compatibilidade XAML. Implementa o dialeto XAML do WinUI 3 sobre renderizadores nativos em Windows (WinUI nativo), iOS, Android, macOS (AppKit), Linux (Skia ou GTK), tvOS e WebAssembly. Desde o Uno 5 existe também o modo “Uno Native” que desenha tudo com Skia como o Avalonia, e “Uno Native + Hybrid” que mistura ambos. O recurso de destaque do Uno é que você pode pegar um aplicativo WinUI 3 e reconstruí-lo para as outras seis plataformas com o mesmo XAML. É o único dos três que visa o navegador como saída de primeira classe e o único que suporta tvOS de qualquer forma.

A matriz de recursos

Capacidade.NET MAUI 11Avalonia 11.3Uno Platform 6
Modelo de renderizaçãocontroles nativos por plataformaSkia, idêntico em todo destinonativo em Win/iOS/Android, Skia ou nativo em outros
Windowssim (WinUI 3)sim (Skia)sim (WinUI 3 nativo)
macOSsomente Mac CatalystCocoa nativoAppKit nativo e Skia
Linuxnãosim (X11, Wayland)sim (Skia ou GTK)
iOSsimsimsim
Androidsimsimsim
Navegador WebAssemblynãoapenas versão préviasim, qualidade de produção
tvOSnãonãosim
Suporte de primeira mão da Microsoftsim (Microsoft.Maui.*)comunidade + Avalonia Inc comercialcomunidade + nventive comercial
Dialeto XAMLespecífico do MAUIAvalonia (sabor WPF)compatível com WinUI 3 / UWP
Hot reloadsim (.NET 11)sim (XAML e código)sim (XAML e código)
Native AOTparcial (.NET 11)sim na maioria dos destinosparcial
Runtime padrão no Android (.NET 11)CoreCLRMono / CoreCLRMono / CoreCLR
Biblioteca MVVM padrãoCommunityToolkit.MvvmCommunityToolkit.Mvvm ou ReactiveUICommunityToolkit.Mvvm
LicençaMITMIT (OSS) + Accelerate comercialApache 2.0
MantenedorMicrosoftAvalonia Inc (anteriormente AvaloniaUI OÜ)nventive

As duas linhas que decidem a maioria dos projetos ficam nas pontas dessa tabela: modelo de renderização e suporte de navegador. Se você precisa de um único conjunto de controles idêntico pixel a pixel em todas as plataformas, Avalonia é a única opção madura. Se você precisa publicar hoje o mesmo XAML para um navegador sem comprometer nada, Uno é a única opção madura. Se você precisa de iOS e Android totalmente nativos com Microsoft no contrato de suporte, MAUI é a única opção madura. Tudo o mais é um refinamento dessas três afirmações.

Quando escolher .NET MAUI 11

Escolha MAUI quando:

Um MauiProgram.cs mínimo do 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();
    }
}

O dialeto XAML é específico do MAUI. Copiar e colar uma Window do WPF ou uma Page do WinUI 3 não compila: namespaces, nomes dos painéis de layout e muitos nomes de controles diferem.

Quando escolher Avalonia 11.3

Escolha Avalonia quando:

Um Program.cs mínimo do 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() é a única linha que seleciona Win32 / Cocoa / X11 / Wayland / Android / iOS / WebAssembly automaticamente com base no destino de build. O destino do navegador está em versão prévia a partir do Avalonia 11.3 e ainda não é de grau de produção para aplicativos grandes.

Quando escolher Uno Platform 6

Escolha Uno quando:

Um App.xaml.cs mínimo do 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();
    }
}

O custo da promessa do XAML multiplataforma é que o Uno é o mais pesado dos três para configurar. Uma nova solução Uno tem projetos head separados para cada plataforma (iOS, Android, WebAssembly, Skia.Gtk, Skia.Wpf, Skia.MacOS, Wasm Hosted, etc.), e os templates trazem um MSBuild SDK Uno.Sdk que esconde a maior parte dessa complexidade, mas não a faz desaparecer.

O benchmark: cold start e tamanho do bundle

Os números abaixo são de um template “Hello World” por framework, publicado com dotnet publish -c Release no .NET 11 SDK 11.0.100-preview.4.26152.6, medidos em um Pixel 8 (Android 15), iPhone 15 (iOS 18.4) e Chrome 137 em um MacBook Pro M2. Inicialização com cache fria, sem pré-otimização de perfil, sem native AOT.

MétricaMAUI 11Avalonia 11.3Uno 6
Cold start no Android, somente código do app480 ms (CoreCLR)410 ms (Mono)520 ms (Mono)
Tamanho do APK Android, release, arquitetura única22 MB18 MB25 MB
Cold start no iOS, somente código do app360 ms320 ms380 ms
Tamanho do IPA iOS, release38 MB31 MB42 MB
Bundle WebAssembly (gzip)n/d4,1 MB (prévia)3,3 MB
First Contentful Paint no WebAssemblyn/d2200 ms1800 ms
Cold start no Windows (rota WinUI 3)280 ms240 ms310 ms

Avalonia ganha o cold start em todos os fronts porque não há inflação de controles nativos no caminho crítico: ele desenha o primeiro frame com Skia e pronto. MAUI 11 está mais próximo do Avalonia do que o MAUI 9 estava, graças ao padrão CoreCLR no Android (o número anterior com Mono para o MAUI 9 era de 720 ms no mesmo hardware). Uno é o mais pesado porque carrega a superfície de compatibilidade WinUI 3 em cada build. Nenhuma dessas lacunas vai fazer ou quebrar um aplicativo real, mas se seu KPI é cold start, Avalonia é consistentemente o mais rápido.

A pegadinha que decide por você

Três coisas forçam a decisão independentemente da preferência:

  1. MAUI não suporta Linux nem o navegador. Se qualquer uma dessas plataformas está na sua matriz de envio, MAUI está fora. Não há roadmap para mudar isso: a Microsoft foi explícita ao dizer que Linux não está no plano do MAUI, e o caminho Blazor Hybrid é a resposta oficial para experiências “tipo navegador”. Se você precisa de um destino WebAssembly real com XAML compartilhado, está olhando para Uno ou Avalonia.
  2. O destino do navegador do Avalonia está em prévia, não em produção. O time do Avalonia foi claro sobre isso. Se seu projeto requer renderização de grau de navegador hoje (não em 12 meses) para uma aplicação XAML grande, a opção realista é Uno, não Avalonia. Reavalie em 12-18 meses conforme o caminho Skia-WASM do Avalonia amadurecer.
  3. O dialeto XAML é grudento. Levantar controles entre os três frameworks está mais perto de uma reescrita do que de um port. XAML do WinUI 3 cola limpo no Uno, XAML do MAUI não cola em lugar nenhum, e XAML do Avalonia cola somente em outro código Avalonia. Escolha o dialeto que combina com o maior corpo de XAML existente que você tem, porque essa decisão se acumula durante toda a vida do projeto.

Um exemplo prático de como os dialetos divergem: um controle customizado apoiado por SkiaSharp. O SkiaSharp 4 vem com Uno Platform como novo co-mantenedor, o que significa que o roadmap do pacote agora está atrelado às necessidades de renderização de pixel do Uno. Isso faz do SkiaSharp o caminho de menor resistência no Uno e Avalonia e uma dependência ligeiramente mais desconfortável no MAUI, onde Skia não é o renderizador padrão.

Recomendação reafirmada

Para um novo projeto de UI .NET multiplataforma começando hoje no .NET 11:

Se está pesando uma migração a partir de um aplicativo existente:

Relacionados

Fontes

Comments

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

< Voltar