Introducing .NET MAUI – One Codebase, Many Platforms

David Ortinau

Welcome to .NET Multi-platform App UI. This release marks a new milestone in our multi-year journey to unify the .NET platform. Now you and over 5 million other .NET developers have a first-class, cross-platform UI stack targeting Android, iOS, macOS, and Windows to complement the .NET toolchain (SDK) and base class library (BCL). You can build anything with .NET.

Join us at Microsoft Build 2022 where we’ll give you a tour of all the updates for building native apps for any device with .NET and Visual Studio. » Learn more.

This is just the beginning of our journey to create a desktop and mobile app experience that delights .NET developers. For the next phase, the foundation is now established for the broader .NET ecosystem to bring plugins, libraries, and services from .NET Framework and the old project system to .NET 6 and SDK style projects. Among those available today are:

syncfusion controls for dot net maui telerik controls for dot net maui
DevExpress controls for dot net maui grial kit controls for .NET MAUI
AndroidX AlohaKit CommunityToolkit.MVVM CommunityToolkit.Maui CommunityToolkit MauiCompat CommunityToolkit Markup.MauiCompat DevExpress Facebook FreshMvvm.Maui Google APIs for iOS Google Play Services Client Libraries GrialKit MauiAnimation Microsoft.Maui.Graphics MR.Gestures Prism.Maui Plugin.Fingerprint Plugin.InAppBilling Plugin.StoreReview Plugin.ValidationRules ReactiveUI.Maui Shiny SkiaSharp Syncfusion Telerik UI for .NET MAUI TemplateUI User Dialogs

For help moving libraries to .NET 6, check out the recent guest blog posts detailing experiences shipping .NET MAUI libraries from Michael Rumpler (MR.Gestures) and Luis Matos (Plugin.ValidationRules).

The .NET MAUI workload is fully supported under the Current release schedule of 18 months, and will be serviced at the same monthly cadence as .NET. Our ongoing focus for .NET MAUI continues to be quality, resolving known issues and prioritizing issues based on your feedback. This also includes the workloads we ship for building applications that exclusively target Android, Android Wear, CarPlay, iOS, macOS, and tvOS directly using the native toolkits from .NET, and the supporting libraries AndroidX, Facebook, Firebase, Google Play Services, and SkiaSharp.

With .NET MAUI you can achieve no-compromise user experiences while sharing more code than ever before. .NET MAUI uses native UI via the premier app toolkits provided by each platform, modern developer productivity, and our fastest mobile platform yet.

Native UI, No Compromise

The primary goal of .NET MAUI is to enable you to deliver the best app experience as designed specially by each platform (Android, iOS, macOS, Windows, and Tizen thanks to collaboration with Samsung), while enabling you to craft consistent brand experiences through rich styling and graphics. Out of the box, each platform looks and behaves the way it should without any additional widgets or styling required to mimic. For example, .NET MAUI on Windows is backed by WinUI 3 the premier native UI component that ships with the Windows App SDK.

app UI on all four supported platforms

Use C# and XAML to build your apps from a rich toolkit of more than 40 controls, layouts, and pages. Upon the Xamarin shoulders of mobile controls, .NET MAUI adds support for multi-window desktop applications, menu bars, and new animation capabilities, borders, corners, shadows, graphics, and more. Oh, and the new BlazorWebView which I’ll highlight below.

Image controls sample png

Read more in the .NET MAUI documentation about controls: pages, layouts, and views.

Accessibility First

One major advantage of using native UI is the inherited accessibility support that we can build upon with semantic services to make it easier than ever to create highly accessible applications. We have worked closely with customers to redesign how we develop for accessibility. From these conversations we have designed .NET MAUI semantic services for controlling:

  • Properties such as description, hint, and heading level
  • Focus
  • Screen reader
  • Automation properties

Read more in the .NET MAUI documentation about semantic services for accessibility.

Beyond UI

.NET MAUI provides simple APIs to access services and features of each platform such as accelerometer, app actions, file system, notifications, and so much more. In this example, we configure “app actions” that add menu options to the app icon on each platform:

    new AppAction("current_info", "Check Current Weather", icon: "current_info"),
    new AppAction("add_location", "Add a Location", icon: "add_location")

Image platform integrations png

Read more in the .NET MAUI documentation about accessing platform services and features.

Easily Customized

Whether you’re extending the capabilities of .NET MAUI controls or establishing new platform functionality, .NET MAUI is architected for extensibility, so you never hit a wall. Take, for example, the Entry control – a canonical example of a control that renders differently on one platform. Android draws an underline below the text field, and developers often want to remove that underline. With .NET MAUI, customizing every Entry in your entire project is just a few lines of code:

Microsoft.Maui.Handlers.EntryHandler.Mapper.ModifyMapping("NoUnderline", (h, v) =>
    h.PlatformView.BackgroundTintList = ColorStateList.ValueOf(Colors.Transparent.ToPlatform());

android default entry control compared to a styled entry control

Here is a great recent example of creating a new Map platform control by Cayas Software. The blog post demonstrates creating a handler for the control, implementation for each platform, and then making the control available by registering it in .NET MAUI.

.ConfigureMauiHandlers(handlers =>

Image maui maps png

Read more in the .NET MAUI documentation about customizing controls with handlers

Modern Developer Productivity

More than being a technology that can build anything, we want .NET to also accelerate your productivity using common language features, patterns and practices, and tooling.

.NET MAUI uses the new C# 10 features introduced in .NET 6, including global using statements and file scoped namespaces – great for reducing clutter and cruft in your files. And .NET MAUI takes multi-targeting to a new level with “single project” focus.

Image code side by side png

In new .NET MAUI projects, the platforms are nestled away in a subfolder giving focus to your application where you spend the majority of your effort. Within your project’s Resources folder you have a single place to manage your app’s fonts, images, app icon, splash screen, raw assets, and styling. .NET MAUI will do the work to optimize them for each platform’s unique requirements.

solution explorer showing platform and resources folders

Multi-project vs Single project Structuring your solution with Individual projects for each platform is still supported, so you can choose when the single project approach is appropriate for your applications.

.NET MAUI uses the builder pattern made popular with Microsoft.Extensions libraries in ASP.NET and Blazor applications as a single place to initialize and configure your app. From here, you can provide .NET MAUI with your fonts, tap into platform specific lifecycle events, configure dependencies, enable specific features, enable vendor control toolkits, and more.

public static class MauiProgram
    public static MauiApp CreateMauiApp()
        var builder = MauiApp.CreateBuilder();
            .ConfigureFonts(fonts =>
                fonts.AddFont("Segoe-Ui-Bold.ttf", "SegoeUiBold");
                fonts.AddFont("Segoe-Ui-Regular.ttf", "SegoeUiRegular");
                fonts.AddFont("Segoe-Ui-Semibold.ttf", "SegoeUiSemibold");
                fonts.AddFont("Segoe-Ui-Semilight.ttf", "SegoeUiSemilight");

        return builder.Build();
public static class ServicesExtensions
    public static MauiAppBuilder ConfigureServices(this MauiAppBuilder builder)
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Windows.NativeAudioService>();
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.Android.NativeAudioService>();
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.MacCatalyst.NativeAudioService>();
        builder.Services.TryAddSingleton< Platforms.MacCatalyst.ConnectivityService>();
#elif IOS
        builder.Services.TryAddSingleton<SharedMauiLib.INativeAudioService, SharedMauiLib.Platforms.iOS.NativeAudioService>();


        builder.Services.AddScoped<ListenTogetherHubClient>(_ =>
            new ListenTogetherHubClient(Config.ListenTogetherUrl));

        return builder;

Read more in the .NET MAUI documentation about app startup with MauiProgram and single project.

Bringing Blazor to Desktop and Mobile

.NET MAUI is also great for web developers looking to get in on the action with native client apps. .NET MAUI integrates with Blazor, so you can reuse existing Blazor web UI components directly in native mobile and desktop apps. With .NET MAUI and Blazor, you can reuse your web development skills to build cross-platform native client apps, and build a single UI that spans mobile, desktop, and web.

.NET MAUI Blazor on mobile, desktop, and web

.NET MAUI executes your Blazor components natively on the device (no WebAssembly needed) and renders them to an embedded web view control. Because your Blazor components compile and execute in the .NET process, they aren’t limited to the web platform and can leverage any native platform feature, like notifications, Bluetooth, geo-location and sensors, filesystem, and so much more. You can even add native UI controls alongside your Blazor web UI. This is an all new kind of hybrid app: Blazor Hybrid!

Getting started with .NET MAUI and Blazor is easy: just use the included .NET MAUI Blazor App project template.

.NET MAUI Blazor app template

This template is all setup so you can start building a .NET MAUI Blazor app using HTML, CSS, and C#. The Blazor Hybrid tutorial for .NET MAUI will walk you through building and running your first .NET MAUI Blazor app.

Or add a BlazorWebView control to an existing .NET MAUI app wherever you want to start using Blazor components:

<BlazorWebView HostPage="wwwroot/index.html">
        <RootComponent Selector="#app" ComponentType="{x:Type my:Counter}" />

Blazor Hybrid support is also now available for WPF and Windows Forms so you can start modernizing your existing desktop apps to run on the web or to run cross platform with .NET MAUI. The BlazorWebView controls for WPF and Windows Forms are available on NuGet. Check out the Blazor Hybrid tutorials for WPF and Windows Forms to learn how to get started.

To learn more about Blazor Hybrid support for .NET MAUI, WPF, and Windows forms, check out the Blazor Hybrid docs.

Optimized for Speed

.NET MAUI is designed for performance. You have told us how critical it is for your applications to start as quickly as possible, especially on Android. The UI controls in .NET MAUI implement a thin, decoupled handler-mapper pattern over the native platform controls. This reduces the number of layers in the rendering of UI and simplifies control customization.

The layouts in .NET MAUI have been architected to use a consistent manager pattern that optimizes the measure and arrange loops to more quickly render and update your UI. We have also surfaced layouts pre-optimized for specific scenarios such as HorizontalStackLayout and VerticalStackLayout in addition to StackLayout.

From the very beginning of this journey, we set a goal to improve startup performance and maintain or reduce app size as we transitioned to .NET 6. At the time of GA, we’ve achieved a 34.9% improvement for .NET MAUI and 39.4% improvement in .NET for Android. Those gains extend to complex apps as well; the .NET Podcast sample application began with a startup of 1299ms and at GA measures 814.2ms, a 37.3% improvement since Preview 13.

The settings are enabled by default to provide a release build with these optimizations.

Image android release settings

Stay tuned for a deep-dive blog post on what we have done to achieve these results.

Get Started Today

To get started using .NET MAUI on Windows, install or update Visual Studio 2022 Preview to version 17.3 Preview 1.1. In the installer, choose the workload “.NET Multi-platform App UI development”.

dot net maui workload in visual studio installer

To use .NET MAUI on Mac, install the new Visual Studio 2022 preview for Mac (17.3 Preview 1).

Visual Studio 2022 will GA .NET MAUI tooling support later this year. On Windows today you can accelerate your dev loop with XAML and .NET Hot Reload, and powerful editors for XAML, C#, Razor, and CSS among others. Using the XAML Live Preview and Live Visual Tree, you can preview, align, inspect your UI, and edit it while debugging. .NET MAUI’s new single project experience now includes project property pages for a visual editing experience to configure your apps with multi-platform targeting.

On Mac, you can today load single project and multi-project .NET MAUI solutions to debug with a beautiful, new native Visual Studio 2022 for Mac experience. Other features for enhancing your productivity developing .NET MAUI applications will ship in subsequent previews.

We recommend getting started updating your libraries to .NET MAUI and creating new .NET MAUI projects today. Before diving headlong into converting Xamarin projects to .NET MAUI, review your dependencies, the state of Visual Studio support for .NET MAUI, and the published known issues to identify the right time to transition. Keep in mind that Xamarin will continue to be supported under the modern lifecycle policy, which states 2 years from the last major release.


We need your feedback

We’d love to hear from you! As you encounter any issues, file a report on GitHub at dotnet/maui.


With .NET MAUI, you can build native applications for Android, iOS, macOS, Tizen, and Windows from a single codebase using the same productivity patterns practiced all across .NET. The thin and decoupled UI and layout architecture of .NET MAUI together with single project features enable you to stay focused on one application instead of juggling the unique needs of multiple platforms. And with .NET 6, we’re shipping performance improvements not only for Android, but all across the breadth of platform targets.

Less platform code, more shared code, consistent standards and patterns, lightweight and performant architecture, mobile and desktop native experiences – this is just the beginning. We look forward to seeing libraries and the broader ecosystem come alongside .NET MAUI in the following months to define a new era of cross-platform application development for .NET developers that empowers you and your organization to achieve more.


Discussion is closed. Login to edit/delete existing comments.

  • Peter Vrenken 0


    Just curious, now .NET MAUI has matured the cross-platform web/mobile/desktop/2D side of IT, is there any chance that Microsoft is also considering making .NET MAUI available to the likes of Unity 3D? In other words, using well-known, enterprise grade application architectures to make it easier for mainstream developers to work on 3D applications as well? And at the same time boosting forward 3D applications by infusing and standardizing patterns & practices? It might be quite an intruiging catalyst to see that both 2D and 3D applications can be developed/layered using the same principles. Just imagine a XAML + MVVP/MVU powered application architecture making sense of the ECS hierarchy in a radically fresh, converging, and well understood way. This might just be what the Metaverse needs ;-).

    Anyway, just my two pennies – keep up the great work!

    Kind regards from Germany,

    Peter Vrenken

  • First Last 0

    Is there a GUI builder? like JavaFx has Scenebuilder.. MS used to have something pretty decent for WinForms…

    Seems like now its a just giant mess of libraries and third party licenses and nothing actually good.

    Flutter 3 is looking pretty decent for doing all this stuff better now.

    I want to be able to target Linux (because Windows 11 is garbage) Android, Web and Win10)… Why do I have to use UNO? It just seems like a massive oversight again.

    What is MS making that uses MAUI to prove its useful?

    C# Is good I like it, sadly it seems MS completely dropped the ball when it comes to making GUI’s.. both its OS which is increasingly becoming a train wreck of awful.. and the tooling for making anything decent quickly is literally a joke.

    • David OrtinauMicrosoft employee 0

      There is no drag-and-drop designer for .NET MAUI in Visual Studio. The combination of hot reload, live preview, and the visual tree plus property editor are a potent recipe for productive UI iteration, and where we are currently investing.

    • Denis Kotov 0

      I feel the same way that I am excited about MAUI, but also understand all it disadvantages:
      1. No pixel perfect UI components drawn on single canvas like Flutter, Uno, Avalonia did
      2. No support of Linux
      3. Probably again lots of bugs and hard to extend due to bugs in underlying platforms (in Xamarin there was lots of unknown issues due to specific platform behaviour)

      and etc.

      • John 0
        1. Most business solutions don’t want or need pixel perfect, they want platform specific. If you are writing games then yes I would agree
        2. That is a concern for many, but not all. I can’t quantify that, but Linux doesn’t even come onto our radar (or any company I have worked in for the last 20 years).
        3. That’s possible, but probable? Maui (apparently) resolves a number of fundamental layout issues that XF had. Let’s see if that is actually true before jumping to conclusions.
        • Rod Macdonald 0

          I wouldn’t agree that companies don’t need pixel perfect. It’s absolutely essential on any front most end.

          • John 0

            I haven’t seen a single use case that an entry box needs to be exactly the same position on iOS and Android, or a label, or a button.
            You can’t get pixel perfect with different size devices in the same OS, so why would this be required cross platform (unless writing games)?
            I want Entry boxes to look native on each platform, same with buttons and all other controls.

        • Rod Macdonald 0

          John, in fairness to your last comment (which I can’t seem to be able to reply to), pixel perfect in my book is being able to precisely position, size and change the look of any component on a design surface, not to expect components to look precisely the same without making platform specific changes. And as you say, why would one want a bunch of components not to assume the look and feel of the specific OS underneath? That said, reading the comments on this blog, it sounds as though Flutter has achieved just that.

  • Ian Boyd 0

    Any plans to add a listview control?

    You know, rows, columns, horizontal and vertical scrollbars, resizable columns, column sorting, column headers, virtual mode to allow hundreds of thousands of items, cut-off cell text replaced with ellipses…

    • David OrtinauMicrosoft employee 0

      Today we have ListView which is primarily for vertical, single column lists, CollectionView which does handle grids and grouping, and then BindableLayout which is for non-virtualized repeating of UI.

      What you’re describing sounds like a DataGrid, and your best option for that right now is from one of the component vendors which I list in the blog. Most if not all are currently offering free options right now. This control is often requested, so we will be considering it in the future. It is not currently on our roadmap.

  • Kamran Shahid 0

    It is announced that it is in GA (general availability) while template is still not available on latest VS 2022 update (17.2.2)
    As per my thinking we shouldn’t need 17.3.preview… release for enabling it in VS 2022. It should be now available in latest VS 2022 patch rather then any preview version

    • David OrtinauMicrosoft employee 0

      The tooling just wasn’t ready to GA yet and needs more cycles to complete. As I’ve mentioned elsewhere, the feedback from preview customers was that enabling the ecosystem of libraries to upgrade to .NET 6 was critical to their .NET MAUI projects, so we chose to release the SDK despite the tooling remaining in preview. We’ll be aligned on GA releases in the not too distant future.

      • Vassilios Pallis 0

        So if it’s not ready, then why are you calling it “GA”?

        • John 0

          It’s Maui that is GA, not the Visual Studio version that you might use with it.
          You don’t have to use Visual Studio of course, some developers use command line. Not me, Im happy using the preview version of VS.

  • Maik Lathan 0

    Congratulations MAUI Team but there is room for improvement to fulfill your statement “journey to create a desktop and mobile app experience that delights .NET developers”:

    • Starting Hello World MAUI Windows App from Visual Studio 2022 Version 17.3.0 Preview 1.1 tooks around 5-6 seconds (Core i9 @ 2.4GHz, 64 GB Ram, SSD)
    • No trimming for a MAUI Windows App possible, not supported
    • PublishSingleFile causes a 140 MB MAUI Windows App file for just a main window with one button and a label
    • A PublishSingleFile MAUI Windows App executable can’t be started from the shell (Explorer, Windows Terminal) … nothing happens, no error, no process (Windows 10 Pro 21H2 19044.1706)

    I’m interested in building professional windows apps with rich, modern UI with briliant concepts of .NET. The gigantic file sizes and hundreds of DLLs for Windows Apps, without PublishSingleFile, is problematic in a time when we also want to develop sustainable software. MAUI advertises that it is native for each platform. A 140 MB Windows App file for a main window with 2 controls does not fit into the picture. Does anybody have some tips how can I improve on the above observations? Am I doing something wrong?

    • Eduardo Naretto 0

      Great observations and keen on seeing if someone will actually answer this.

      • David OrtinauMicrosoft employee 0

        Totally agree, we have not arrived.

        This is most if not all on the way. We have been waiting for alignment of pieces to adopt a faster mode of debugging WinUI, and the trimming work is on the backlog to be done. App size is being profiled and we’ll get that down.

    • Eric Lynch 0

      Oh boy, am I glad I read this post! This is very disappointing.

      I’m working on a project with an Azure/SQL Server back-end.

      I was enthusiastically hoping to use MAUI so I could share some of the same class libraries on the client-side. However, the lack of a regular (non-preview) version of Visual Studio coupled with the size and performance issues you mention make that a non-starter.

      Much as I hate to, I’ll probably be stuck writing Dart/Flutter apps on the client-side. I don’t think I can wait for Q3 (or later) to roll around before I ship.

      • John 0

        Performance issues? The person was running from within the IDE, you cannot equate that with release build configuration.
        If you are referring to debugging on Windows of a windows app, then yes that can be improved but 5-6 seconds is not a long time. In my experience after the initial compile, subsequent compiles are much quicker.

  • jamal ibrahim 0

    Migration from Xamarin Forms to .NET MAUI

    In My current project, all of my projects Libraries are in PCL format(Target Framework – .NET Portable) only. I have few questions related to .NET MAUI Migration.

    Question 1: Do I need to convert those library projects into .NET Standard – Target Framework before migrating to .NET MAUI? or it is not necessary to convert those chances.

    Question 2: Xamarin Forms PCL to .NET MAUI migration, will it be supported directly?

    I have asked these questions in below forum as well, But I yet get any response from anyone. Experts please kindly answer.



    • David OrtinauMicrosoft employee 0

      Hi Jamal,

      You may be ok with the PCLs, but I recommend moving them to .NET Standard to ensure compatibility. Your compile times will improve as a benefit too. Check for a guide on migrating them. It’s been a while, but I recall there was a right-click migration option in Visual Studio.

      The .NET Upgrade Assistant looks like it supports converting PCLs in the process which should also apply to .NET MAUI conversions.

      • jamal ibrahim 0

        Thanks David, for your information.

  • Roberto Mencia Franco 0

    Is this the release of MAUI?
    It feels really awkward that the final release of the product only runs on a pre-release version of VS2022, only.

    It would kind of make sense that it’s released on a non-preview version of VS17.3, fully tested and not on a pre-release version of VS 17.3. Even though, with the number of bugs VS2022 has been released so far in every version, preview or not doesn’t make much of a difference.

    • David OrtinauMicrosoft employee 0

      .NET MAUI is a product of .NET and can run entirely independent of Visual Studio. We would love to have aligned the SDK GA with .NET MAUI supported features in both Visual Studio 2022 on Windows and Mac, however the timing didn’t align. Our priority in this SDK release is to move the ecosystem of Xamarin libraries forward from .NET Framework to .NET 6, and to provide the SDK to app developers that have told us they are ready despite the preview tooling. We’ll get aligned on GA releases soon, and from there on out expect to remain that way.

      • Vassilios Pallis 0

        How soon?
        “Later this year” is not soon enough.
        Actually, we were waiting for so long for May 2022 to come to get a “GA Ready” version that runs only with VS 2022 RC !!!
        This is not a GA version, we can’t have BETAS in our production machines, sorry.

  • 7alken 0

    Hello, kindly please, do you think that MAUI currently allows to write mobile/desktop app where can be used “camera control” to take pictures, either platform specific or having live camera preview/stream into window? I am trying to find ABSOLUTELLY EASIEST way to do something like this and frankly, closest till now was to try PowerApps features, but this has other quirks – as its low code… (fast to drop something quick and dirty for mobile/desktop but quite painfull to adapt declarative only mindset in more complex app still – but its really quick and easy to draft). I know that for XamarinForms is camera access possible somehow (not knowing XF well though too) but this also doesnt allow to make it as desktop app, right? UI perfection is not issue, only the acceptable working UI and easy coding of logic.

    So are some such camera controls for MAUI possible now? Some example?

    • David OrtinauMicrosoft employee 0

      A cross-platform camera control isn’t yet available in the Community Toolkit, but is in process.

      You could try to use the Xamarin Community Toolkit MauiCompat library to access the CameraView there.

      Or you can create a custom control for using the camera on each platform. That’ll require writing platform code and doesn’t sound like what you’re eager to tackle.

  • 威尔 龙 0

    No linux support ? it’s beta, not GA

    • Vassilios Pallis 0

      It’s definitely BETA !!
      They even don’t support the RTM version of Visual Studio, and you are asking for Linux !!

    • David OrtinauMicrosoft employee 0

      What would you like Linux for? If app building, what kind of apps and what platforms will they target?

  • Martin 0

    Congratulations for GA. Do you plane deeper integration of drawn controls ? I know there is an experiment called Maui.Graphics.Controls, but the repo is not much active last months.

    • David OrtinauMicrosoft employee 0

      Look at AlohaKit. We definitely want to continue investing in the experiment of Graphic.Controls and encourage contribution and feedback.

Feedback usabilla icon