.NET MAUI no Desktop: Windows, macOS e um mercado gigante que muitos desenvolvedores ignoram

O .NET MAUI desktop é uma oportunidade que muitos desenvolvedores ainda não exploram, porque a primeira imagem que vem à cabeça quando se fala em .NET MAUI são aplicativos para Android e iPhone. Na prática, a mesma base tecnológica do mobile também cria aplicações desktop modernas para Windows e macOS.

Esse talvez seja um dos maiores diferenciais do ecossistema .NET hoje. Neste artigo, você entende como isso funciona em cada sistema, o papel dos componentes de terceiros e quando o Blazor Hybrid faz mais sentido.

O mercado desktop está longe de morrer

Nos últimos anos, surgiu a impressão de que tudo migraria para aplicações web. No entanto, isso não aconteceu.

Muitas empresas continuam usando aplicações desktop todos os dias, por exemplo:

  • ERPs
  • Sistemas hospitalares
  • Softwares industriais
  • Sistemas educacionais
  • Aplicações financeiras
  • Ferramentas de engenharia
  • Sistemas logísticos
  • Centrais de monitoramento
  • Automação comercial

Em muitos cenários, uma aplicação desktop ainda oferece vantagens importantes:

  • Melhor desempenho
  • Uso de múltiplos monitores
  • Integração com dispositivos locais
  • Experiência mais produtiva
  • Menor dependência do navegador
  • Maior controle sobre recursos do sistema operacional

Por isso, o desktop continua sendo um mercado extremamente lucrativo para quem desenvolve software corporativo. E é exatamente nesse espaço que o .NET MAUI desktop se encaixa.

Como o .NET MAUI desktop funciona

O .NET MAUI unifica as APIs de Android, iOS, macOS e Windows em uma única API. Assim, você escreve o código uma vez e ainda mantém acesso profundo a cada plataforma nativa.

Na prática, o seu código conversa com a camada de controles do MAUI. Em seguida, essa camada consome as APIs nativas de cada sistema, e o seu código também pode acessar essas APIs diretamente quando necessário.

No desktop, cada sistema usa uma tecnologia diferente por baixo. Enquanto o Windows usa o WinUI 3, o macOS usa o Mac Catalyst da Apple.

De acordo com a documentação de plataformas suportadas, o .NET MAUI desktop exige Windows 10 versão 1809 ou superior, Windows 11 ou macOS 12 ou superior.

Como criar um projeto .NET MAUI desktop

Antes de escrever código, você precisa da carga de trabalho (workload) do MAUI instalada no SDK. No Visual Studio, basta marcar a opção de desenvolvimento .NET Multi-platform App UI no instalador.

Pela linha de comando, o fluxo é igualmente simples:

# Instala a carga de trabalho do .NET MAUI no SDK
dotnet workload install maui

# Cria um novo projeto a partir do template padrão
dotnet new maui -n MyDesktopApp
cd MyDesktopApp

# Executa a versão Windows (WinUI 3)
dotnet build -t:Run -f net10.0-windows10.0.19041.0

# Executa a versão macOS (Mac Catalyst), a partir de um Mac
dotnet build -t:Run -f net10.0-maccatalyst

O template gera um único projeto com vários frameworks de destino. Assim, o mesmo código compila para Android, iOS, Mac Catalyst e Windows, e você escolhe o alvo com a opção -f.

Se o foco for apenas o .NET MAUI desktop, você pode remover os alvos mobile da propriedade TargetFrameworks do .csproj. Dessa forma, o build fica mais rápido e o projeto mais enxuto.

.NET MAUI desktop no Windows com WinUI 3

No Windows, o .NET MAUI usa o WinUI 3 como tecnologia nativa de interface. Isso significa acesso a recursos modernos da plataforma Microsoft:

  • Múltiplas janelas
  • Notificações nativas
  • Integração com o Windows 11
  • Controles modernos
  • APIs do Windows App SDK
  • Melhor suporte para telas de alta resolução

O resultado é uma aplicação desktop real, e não apenas um navegador encapsulado. Além disso, o MAUI no Windows executa sobre o CLR do .NET, o mesmo runtime das aplicações de servidor.

Para empresas com aplicações antigas em Windows Forms ou WPF, o .NET MAUI desktop surge como alternativa interessante de modernização. Também abre caminho para outras plataformas, inclusive o Linux, que hoje conta com um backend experimental baseado em GTK4 no repositório dotnet/maui-labs, ainda sem suporte oficial da Microsoft.

Aplicação .NET MAUI desktop executando no Windows com interface nativa construída sobre o WinUI 3
No Windows, o MAUI entrega uma aplicação nativa, e não um navegador encapsulado.

Janelas múltiplas no .NET MAUI desktop

Um recurso típico de desktop é abrir várias janelas ao mesmo tempo. No Windows, o MAUI suporta isso sem configuração adicional.

Para abrir uma nova janela, basta criar um objeto Window e chamar o método OpenWindow:

// Abre uma segunda janela com a página de relatórios
var reportWindow = new Window(new ReportPage());
Application.Current?.OpenWindow(reportWindow);

// Traz a janela para frente (Windows e Mac Catalyst)
Application.Current?.ActivateWindow(reportWindow);

Também é possível definir posição e tamanho da janela principal na inicialização. Para isso, sobrescreva o método CreateWindow da classe App:

public partial class App : Application
{
    public App()
    {
        InitializeComponent();
    }

    // Define tamanho e posição iniciais no Windows e no Mac Catalyst
    protected override Window CreateWindow(IActivationState? activationState) =>
        new Window(new AppShell())
        {
            Width = 1280,
            Height = 800,
            X = 100,
            Y = 100
        };
}

.NET MAUI desktop no macOS com Mac Catalyst

No macOS, o .NET MAUI usa o Mac Catalyst. Essa tecnologia da Apple leva aplicações construídas com UIKit para o desktop e complementa com APIs do AppKit quando necessário.

Na prática, a mesma aplicação roda em MacBook Air, MacBook Pro, Mac Mini, iMac e Mac Studio. Além disso, ela compartilha grande parte do código com Android e iPhone.

Para empresas com usuários nos dois ecossistemas, isso reduz drasticamente o custo de desenvolvimento. Vale lembrar que compilar para macOS exige um Mac, assim como acontece no iOS.

Para habilitar janelas múltiplas no Mac Catalyst, o projeto precisa de uma classe SceneDelegate e de um ajuste no Info.plist. Já no Windows, como vimos, esse passo não existe.

A Apple comercializa, em média, entre 20 e 26 milhões de Macs por ano. Com o .NET MAUI e o Mac Catalyst, seu aplicativo pode alcançar esse mercado sem manter uma equipe exclusiva para macOS.

Além disso, os usuários do ecossistema Apple estão acostumados a pagar assinaturas mensais por aplicativos, então fica a dica para quem pensa em monetizar um app .NET MAUI desktop.

Código específico de cada plataforma

Mesmo compartilhando quase tudo, às vezes você precisa de um comportamento só no Windows ou só no Mac. Nesse caso, a compilação condicional resolve:

public static class DesktopFeatures
{
    public static string GetStorageFolder()
    {
#if WINDOWS
        // Caminho usado apenas no Windows
        return Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData);
#elif MACCATALYST
        // Caminho usado apenas no Mac Catalyst
        return FileSystem.AppDataDirectory;
#else
        return FileSystem.AppDataDirectory;
#endif
    }
}

Outra opção é colocar arquivos nas pastas Platforms/Windows e Platforms/MacCatalyst, que só compilam para o alvo correspondente. O artigo sobre código específico por plataforma no .NET mostra também a classe OperatingSystem.

O ideal é manter esses trechos pequenos e isolados. Assim, a maior parte do código continua compartilhada, e cada diferença de plataforma fica concentrada em um único ponto fácil de testar e de manter.

O verdadeiro poder do .NET MAUI desktop está no compartilhamento

O grande benefício do MAUI não é apenas criar interfaces. Na verdade, o principal ganho está no reaproveitamento de:

  • Regras de negócio
  • Integrações
  • Serviços
  • APIs
  • Banco de dados
  • Validações
  • ViewModels
  • Casos de uso

Em muitos projetos corporativos, mais de 80% da aplicação pode ser compartilhada entre plataformas. Consequentemente, isso reduz tempo de desenvolvimento, custos de manutenção, quantidade de bugs e complexidade da arquitetura.

Um ponto importante é organizar o código para que esse compartilhamento aconteça. Por exemplo, deixe regras de negócio e ViewModels em bibliotecas de classes sem dependência de UI, e o .NET MAUI desktop apenas consome essas bibliotecas.

O papel dos componentes de terceiros

Uma das grandes vantagens do ecossistema .NET é a maturidade dos fornecedores de componentes. Diferentemente de muitas plataformas novas, o desenvolvedor MAUI tem acesso a bibliotecas extremamente robustas.

Entre os principais fornecedores estão Telerik, DevExpress e Syncfusion. Essas empresas oferecem dezenas de componentes prontos que aceleram significativamente o desenvolvimento.

Telerik

A Telerik oferece uma suíte de controles para MAUI voltada a aplicações de negócio, com grids, gráficos e formulários.

Componentes da Telerik para .NET MAUI desktop exibindo grids e gráficos em uma aplicação corporativa
Exemplo de controles da Telerik para MAUI.

DevExpress

A DevExpress também mantém uma biblioteca de componentes para MAUI, com foco em controles de dados e visualização.

Controles da DevExpress para MAUI com listas de dados e painéis de visualização
Exemplo de controles da DevExpress para MAUI.

Syncfusion

Por fim, a Syncfusion completa o trio com uma coleção ampla de controles para MAUI, de gráficos a visualizadores de documentos.

Componentes da Syncfusion para .NET MAUI desktop com dashboards, gráficos e indicadores
Exemplo de controles da Syncfusion para MAUI.

Exemplos de componentes prontos

Os grids avançados trazem agrupamento, ordenação, filtros, exportação para Excel e virtualização. Já os dashboards oferecem gráficos, indicadores, KPIs e visualizações analíticas.

Os controles corporativos incluem calendários, agenda, scheduler, PDF Viewer, Document Viewer, Data Forms, TreeView e diagramas. Além disso, há componentes de relatórios com exportação para PDF e Excel e suporte a impressão.

Em muitos casos, funcionalidades que levariam semanas para serem construídas entram no projeto em poucas horas. Esse ganho de produtividade pesa muito em sistemas corporativos no .NET MAUI desktop.

Quando o Blazor Hybrid pode ser uma escolha ainda melhor

Existe outro ponto muito interessante dentro do ecossistema MAUI: o Blazor Hybrid. Muitos desenvolvedores não sabem, mas é possível usar .NET MAUI, Blazor, HTML, CSS e Razor Components dentro da mesma aplicação nativa.

No Blazor Hybrid, os componentes Razor executam nativamente no processo .NET. Em seguida, eles renderizam a interface em um WebView embutido por meio de um canal de interoperabilidade local, sem WebAssembly e sem servidor.

O controle responsável por isso é o BlazorWebView. Ele aponta para a página raiz da aplicação Blazor:

<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:local="clr-namespace:MyDesktopApp"
             x:Class="MyDesktopApp.MainPage">

    <!-- Hospeda os componentes Razor dentro da janela nativa -->
    <BlazorWebView HostPage="wwwroot/index.html">
        <BlazorWebView.RootComponents>
            <RootComponent Selector="#app" ComponentType="{x:Type local:Components.Routes}" />
        </BlazorWebView.RootComponents>
    </BlazorWebView>

</ContentPage>

Vale destacar que os aplicativos .NET MAUI com Blazor exigem um controle WebView atualizado em cada plataforma. Portanto, confira os requisitos na documentação antes de distribuir a aplicação para máquinas mais antigas.

No Windows, o WebView usa o WebView2, baseado no Chromium do Microsoft Edge. Já no Mac Catalyst, ele usa o WKWebView, baseado no WebKit do Safari, então vale testar o visual nas duas plataformas.

Aplicação .NET MAUI desktop com Blazor Hybrid renderizando componentes Razor em HTML e CSS
Com o Blazor Hybrid, HTML e CSS convivem com recursos nativos na mesma aplicação.

Para conhecer melhor o modelo de componentes, veja a visão geral do Blazor.

Uma excelente opção para interfaces pixel perfect

Em alguns projetos, a prioridade é atingir um layout extremamente fiel ao design. É o caso de fintechs, aplicativos de delivery, aplicações de streaming, redes sociais e sistemas com design muito elaborado.

Nesses cenários, o Blazor Hybrid pode ser uma excelente alternativa. Afinal, ele aproveita todo o poder de HTML, CSS, Flexbox, Grid Layout e animações CSS.

Essas tecnologias têm décadas de maturidade e permitem um controle visual extremamente refinado. Enquanto o MAUI tradicional usa controles nativos, o Blazor Hybrid oferece uma liberdade visual muito maior.

MAUI tradicional ou Blazor Hybrid no .NET MAUI desktop

A resposta correta é: depende do objetivo do projeto. Por isso, vale comparar os dois caminhos lado a lado.

Critério MAUI tradicional Blazor Hybrid
Ideal para Sistemas corporativos, aplicações internas, softwares administrativos e apps de produtividade Apps com design altamente customizado e interfaces pixel perfect
Interface Controles nativos de cada plataforma HTML e CSS renderizados em WebView
Equipe Experiência com XAML e C# Experiência em desenvolvimento web
Reaproveitamento Lógica compartilhada entre mobile e desktop Componentes compartilhados também com sistemas web
Principais vantagens Integração com o sistema operacional e experiência consistente em cada plataforma Layout flexível e grande velocidade de desenvolvimento

Em outras palavras, o MAUI tradicional brilha quando a experiência nativa importa mais. Já o Blazor Hybrid vence quando o visual e o reuso de componentes web pesam mais.

Nada impede combinar os dois. Uma mesma página pode ter controles nativos e um BlazorWebView, então o .NET MAUI desktop permite misturar as abordagens conforme a tela.

Uma oportunidade que poucos estão enxergando

Grande parte dos desenvolvedores foca exclusivamente em aplicativos para App Store e Google Play. Enquanto isso, milhares de empresas continuam precisando de sistemas desktop, aplicações corporativas, ferramentas administrativas, soluções internas e dashboards operacionais.

Com o .NET MAUI, você atinge Android, iPhone, Windows (WinUI 3) e macOS (Mac Catalyst). Além disso, ainda pode combinar tudo com Blazor Hybrid quando o projeto exigir uma interface extremamente personalizada.

Para quem já domina C#, ASP.NET Core e o ecossistema .NET, isso representa uma oportunidade rara. Ou seja, você desenvolve soluções completas para praticamente qualquer dispositivo com a mesma stack tecnológica.

O resultado não é apenas um aplicativo multiplataforma. Na prática, é a possibilidade de entregar uma plataforma inteira para o cliente, alcançando celular, tablet, notebook e desktop com um único conjunto de conhecimentos.

Se você ainda está decidindo entre tecnologias multiplataforma, o comparativo .NET MAUI vs Flutter ajuda a entender as diferenças de filosofia.

Conclusão sobre o .NET MAUI desktop

Se você chegou até aqui, já percebeu que o desktop continua enorme. Além disso, o .NET MAUI desktop é uma porta realista para criar aplicações modernas para Windows e macOS, reaproveitando grande parte do que você já domina no ecossistema .NET.

Com WinUI 3 no Windows, Mac Catalyst no macOS e o Blazor Hybrid como alternativa visual, você escolhe a abordagem certa para cada projeto. Agora, o próximo passo é sair do "entendi o potencial" e ir para o "vou construir de verdade".

Quer se aprofundar? Baixe o eBook

Para ajudar você a acelerar, preparei um eBook com um guia direto ao ponto para começar, ou evoluir, com .NET MAUI. Ele também ajuda a tomar melhores decisões entre MAUI tradicional e Blazor Hybrid.

Baixe o eBook aqui

Capa de divulgação do eBook Fundamentos do .NET MAUI do balta.io
eBook gratuito com os fundamentos do .NET MAUI.

FAQ

O .NET MAUI cria aplicações desktop de verdade?

Sim. No Windows ele usa o WinUI 3 e no macOS usa o Mac Catalyst, gerando aplicações nativas, e não navegadores encapsulados.

Quais versões de Windows e macOS são suportadas?

O MAUI suporta Windows 10 versão 1809 ou superior, Windows 11 e macOS 12 ou superior via Mac Catalyst.

O .NET MAUI roda no Linux?

Não oficialmente. Existe um backend experimental baseado em GTK4 no repositório dotnet/maui-labs, mantido pela comunidade e sem suporte oficial da Microsoft.

Preciso de um Mac para gerar a versão macOS?

Sim. A compilação para Mac Catalyst e iOS exige um Mac com Xcode.

O Blazor Hybrid usa WebAssembly?

Não. Os componentes Razor executam nativamente no processo .NET e apenas renderizam a interface em um WebView embutido.

Posso misturar controles nativos e Blazor na mesma aplicação?

Sim. O BlazorWebView é um controle como outro qualquer, então ele convive com controles nativos na mesma página.