Start Debugging

MAUI vs Avalonia vs Uno Platform: ¿cuál elegir en 2026?

Para una nueva aplicación .NET multiplataforma de escritorio y móvil en 2026, elige Avalonia cuando necesites un único conjunto de controles renderizados en todos los destinos, Uno cuando también debas llegar al navegador, y MAUI solo cuando realmente necesites iOS y Android nativos más soporte de primera mano de Microsoft.

Para una aplicación .NET multiplataforma de interfaz de usuario nueva sobre .NET 11 en 2026, la respuesta honesta es: elige Avalonia 11.3 si necesitas un único conjunto de controles renderizados de manera consistente en Windows, macOS, Linux, iOS y Android. Elige Uno Platform 6 si el navegador y los destinos tvOS importan, o si quieres la opción de reutilizar XAML de WinUI/WPF. Elige .NET MAUI 11 si iOS más Android es todo el producto, necesitas controles totalmente nativos, y el soporte de primera mano de Microsoft no es negociable.

Este artículo cubre .NET MAUI 11 (versión preliminar al momento de escribir, GA en noviembre de 2026), Avalonia 11.3.x (estable desde marzo de 2026) y Uno Platform 6.0.x (estable desde febrero de 2026). Las tres apuntan a .NET 9 y .NET 11, las tres se publican en Windows, macOS, iOS y Android, y las tres tienen historias funcionales de WebAssembly con madurez muy distinta. Las diferencias que realmente deciden un proyecto son el modelo de renderizado, el soporte del navegador, la paridad de controles y cuánto XAML existente puedes pegar tal cual.

Qué es cada uno en 2026

.NET MAUI 11 es el framework de primera mano de Microsoft. Envuelve los controles nativos de la plataforma: un Button en MAUI es un UIButton en iOS, un AppCompatButton en Android, un Microsoft.UI.Xaml.Controls.Button en Windows y un NSButton en Mac Catalyst. Obtienes la apariencia nativa y el comportamiento de la plataforma sin costo. Mac Catalyst sigue siendo el único camino hacia macOS. Linux no es compatible. El navegador no es compatible. .NET 11 hizo de CoreCLR el runtime predeterminado en Android e iOS, lo que cierra la mayor parte de la brecha histórica de “MAUI es lento”.

Avalonia 11.3 renderiza todo por sí mismo con Skia. Un Button es un Button en cada plataforma: Avalonia dibuja los píxeles, controla el layout, controla el pipeline de entrada. Obtienes una interfaz idéntica píxel a píxel en Windows, macOS (Cocoa, no Catalyst), Linux (X11 y Wayland), iOS, Android, y un destino WebAssembly que ejecuta Skia en el navegador. El intercambio es que nada se ve 100% nativo a menos que lo diseñes así: los temas Fluent y macOS vienen incluidos y te acercan bastante, pero una biblioteca de controles escrita para el sistema operativo no se sentirá idéntica.

Uno Platform 6 es la apuesta por la compatibilidad XAML. Implementa el dialecto XAML de WinUI 3 sobre renderizadores nativos en Windows (WinUI nativo), iOS, Android, macOS (AppKit), Linux (Skia o GTK), tvOS y WebAssembly. Desde Uno 5 también existe el modo “Uno Native” que dibuja todo con Skia como Avalonia, y “Uno Native + Hybrid” que mezcla ambos. La característica estrella de Uno es que puedes tomar una aplicación WinUI 3 y reconstruirla para las otras seis plataformas con el mismo XAML. Es el único de los tres que apunta al navegador como salida de primera clase y el único que admite tvOS en absoluto.

La matriz de características

Capacidad.NET MAUI 11Avalonia 11.3Uno Platform 6
Modelo de renderizadocontroles nativos por plataformaSkia, idéntico en cada destinonativo en Win/iOS/Android, Skia o nativo en otros
Windowssí (WinUI 3)sí (Skia)sí (WinUI 3 nativo)
macOSsolo Mac CatalystCocoa nativoAppKit nativo y Skia
Linuxnosí (X11, Wayland)sí (Skia o GTK)
iOS
Android
Navegador WebAssemblynosolo versión preliminarsí, calidad de producción
tvOSnono
Soporte de primera mano de Microsoftsí (Microsoft.Maui.*)comunidad + Avalonia Inc comercialcomunidad + nventive comercial
Dialecto XAMLespecífico de MAUIAvalonia (sabor WPF)compatible con WinUI 3 / UWP
Hot reloadsí (.NET 11)sí (XAML y código)sí (XAML y código)
Native AOTparcial (.NET 11)sí en la mayoría de destinosparcial
Runtime predeterminado en Android (.NET 11)CoreCLRMono / CoreCLRMono / CoreCLR
Biblioteca MVVM predeterminadaCommunityToolkit.MvvmCommunityToolkit.Mvvm o ReactiveUICommunityToolkit.Mvvm
LicenciaMITMIT (OSS) + Accelerate comercialApache 2.0
Respaldado porMicrosoftAvalonia Inc (anteriormente AvaloniaUI OÜ)nventive

Las dos filas que deciden la mayoría de los proyectos están en los extremos de esta tabla: modelo de renderizado y soporte del navegador. Si necesitas un único conjunto de controles idéntico píxel a píxel en cada plataforma, Avalonia es la única opción madura. Si necesitas publicar hoy el mismo XAML en un navegador sin compromisos, Uno es la única opción madura. Si necesitas iOS y Android totalmente nativos con Microsoft en el contrato de soporte, MAUI es la única opción madura. Todo lo demás es un refinamiento de esas tres afirmaciones.

Cuándo elegir .NET MAUI 11

Elige MAUI cuando:

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

El dialecto XAML es específico de MAUI. Copiar y pegar una Window de WPF o una Page de WinUI 3 no compilará: namespaces, nombres de paneles de layout y muchos nombres de controles difieren.

Cuándo elegir Avalonia 11.3

Elige Avalonia cuando:

Un Program.cs mínimo de 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() es la única línea que selecciona Win32 / Cocoa / X11 / Wayland / Android / iOS / WebAssembly automáticamente según el destino de compilación. El destino del navegador está en versión preliminar a partir de Avalonia 11.3 y aún no es de grado de producción para aplicaciones grandes.

Cuándo elegir Uno Platform 6

Elige Uno cuando:

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

El costo de la promesa de XAML multiplataforma es que Uno es el más pesado de los tres para configurar. Una nueva solución Uno tiene proyectos head separados para cada plataforma (iOS, Android, WebAssembly, Skia.Gtk, Skia.Wpf, Skia.MacOS, Wasm Hosted, etc.), y las plantillas incluyen un MSBuild SDK Uno.Sdk que oculta la mayor parte de esa complejidad pero no la hace desaparecer.

El benchmark: arranque en frío y tamaño del paquete

Los números a continuación son de una plantilla “Hello World” por framework, publicada con dotnet publish -c Release en .NET 11 SDK 11.0.100-preview.4.26152.6, medida en un Pixel 8 (Android 15), iPhone 15 (iOS 18.4) y Chrome 137 en una MacBook Pro M2. Arranque con caché en frío, sin preoptimización de perfil, sin native AOT.

MétricaMAUI 11Avalonia 11.3Uno 6
Arranque en frío Android, solo código480 ms (CoreCLR)410 ms (Mono)520 ms (Mono)
Tamaño APK Android, release, arquitectura única22 MB18 MB25 MB
Arranque en frío iOS, solo código360 ms320 ms380 ms
Tamaño IPA iOS, release38 MB31 MB42 MB
Bundle WebAssembly (gzip)n/a4.1 MB (preliminar)3.3 MB
First Contentful Paint en WebAssemblyn/a2200 ms1800 ms
Arranque en frío Windows (ruta WinUI 3)280 ms240 ms310 ms

Avalonia gana el arranque en frío en todos los frentes porque no hay inflación de controles nativos en el camino crítico: dibuja el primer fotograma con Skia y se acabó. MAUI 11 está más cerca de Avalonia de lo que estaba MAUI 9, gracias al predeterminado CoreCLR en Android (el número anterior con Mono para MAUI 9 era 720 ms en el mismo hardware). Uno es el más pesado porque carga la superficie de compatibilidad WinUI 3 en cada build. Ninguna de estas brechas hará o romperá una aplicación real, pero si tu KPI es el arranque en frío, Avalonia es consistentemente el más rápido.

El obstáculo que decide por ti

Tres cosas fuerzan la decisión independientemente de la preferencia:

  1. MAUI no soporta Linux ni el navegador. Si cualquiera de esas plataformas está en tu matriz de envío, MAUI está fuera. No hay roadmap para cambiar esto: Microsoft ha sido explícito en que Linux no está en el plan de MAUI, y el camino Blazor Hybrid es la respuesta oficial para experiencias “tipo navegador”. Si necesitas un destino WebAssembly real con XAML compartido, estás mirando Uno o Avalonia.
  2. El destino del navegador de Avalonia es preliminar, no de producción. El equipo de Avalonia ha sido claro al respecto. Si tu proyecto requiere renderizado de grado de navegador hoy (no en 12 meses) para una aplicación XAML grande, la opción realista es Uno, no Avalonia. Reevalúa en 12-18 meses a medida que el camino Skia-WASM de Avalonia madure.
  3. El dialecto XAML es pegajoso. Levantar controles entre los tres frameworks está más cerca de una reescritura que de un port. El XAML de WinUI 3 se pega limpiamente en Uno, el XAML de MAUI no se pega en ninguna parte, y el XAML de Avalonia solo se pega en otro código Avalonia. Elige el dialecto que coincida con el mayor cuerpo de XAML existente que tengas, porque esa decisión se acumula durante toda la vida del proyecto.

Un ejemplo práctico de cómo divergen los dialectos: un control personalizado respaldado por SkiaSharp. SkiaSharp 4 se publica con Uno Platform como nuevo co-mantenedor, lo que significa que el roadmap del paquete está ahora atado a las necesidades de renderizado de píxeles de Uno. Eso convierte a SkiaSharp en el camino de menor resistencia en Uno y Avalonia y en una dependencia ligeramente más incómoda en MAUI, donde Skia no es el renderizador predeterminado.

Recomendación reformulada

Para un nuevo proyecto de UI multiplataforma .NET que empiece hoy sobre .NET 11:

Si estás sopesando una migración desde una aplicación existente:

Relacionados

Fuentes

Comments

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

< Volver