Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The focus of .NET Multi-platform App UI (.NET MAUI) in .NET 11 is to improve product quality. For information about what's new in each .NET MAUI in .NET 11 release, see the following release notes:
- .NET MAUI in .NET 11 Preview 1
- .NET MAUI in .NET 11 Preview 2
- .NET MAUI in .NET 11 Preview 3
- .NET MAUI in .NET 11 Preview 4
- .NET MAUI in .NET 11 Preview 5
Important
Due to working with external dependencies, such as Xcode or Android SDK Tools, the .NET MAUI support policy differs from the .NET and .NET Core support policy. For more information, see .NET MAUI support policy.
In .NET 11, .NET MAUI ships as a .NET workload and multiple NuGet packages. The advantage of this approach is that it enables you to easily pin your projects to specific versions, while also enabling you to easily preview unreleased or experimental builds.
CoreCLR is the default runtime
Starting in .NET 11 Preview 4, CoreCLR is the default runtime on all .NET MAUI platforms for projects built with and targeting .NET 11. This unifies the runtime across .NET MAUI with benefits for debugging, profiling, Hot Reload, app size, and app performance. For a detailed overview of this transition, see the announcement blog post.
If you need to opt out of CoreCLR and use the Mono runtime instead, set $(UseMonoRuntime) to true in your project file:
<PropertyGroup>
<UseMonoRuntime>true</UseMonoRuntime>
</PropertyGroup>
Controls
.NET MAUI in .NET 11 includes control enhancements and deprecations.
Material 3 on Android
In .NET 11 Preview 4, the Android handlers for several core controls use Material 3 styling and behaviors out of the box, bringing them in line with modern Android design and unlocking the Material 3 theming system:
- ImageButton — see GitHub PR #33649.
- DatePicker — see GitHub PR #33651.
- Entry — see GitHub PR #33673.
- Slider — see GitHub PR #33603.

In .NET 11 Preview 5, the underlying Material 3 helper types (MauiMaterialEditText, MauiMaterialDatePicker, MauiMaterialPicker, MauiMaterialTimePicker, MauiMaterialTextView, MauiMaterialSearchBarTextInputLayout, MaterialActivityIndicator, and MauiMaterialContextThemeWrapper) are public so you can subclass them from your own handler customizations. For more information, see GitHub PR #35323 and Material 3.
LongPressGestureRecognizer
.NET 11 adds a built-in LongPressGestureRecognizer for handling long-press gestures. It supports a configurable press duration, a movement threshold to cancel the gesture if the user's finger moves too far, state tracking via GestureState, and command binding with Command and CommandParameter. For more information, see GitHub PR #33432.
<Image Source="dotnet_bot.png">
<Image.GestureRecognizers>
<LongPressGestureRecognizer Duration="500"
LongPressed="OnLongPressed" />
</Image.GestureRecognizers>
</Image>
void OnLongPressed(object sender, LongPressGestureRecognizerEventArgs e)
{
if (e.State == GestureState.Completed)
{
// Handle completed long press
}
}
Map
The Map control receives a significant set of enhancements in .NET 11 Preview 3:
Pin clustering
Enable pin clustering to group nearby pins at lower zoom levels. Set IsClusteringEnabled on the map and optionally assign a ClusteringIdentifier to each pin. Handle the ClusterClicked event to respond when a user taps a cluster.
<maps:Map IsClusteringEnabled="True"
ClusterClicked="OnClusterClicked" />
Custom pin icons
Pins can now display a custom image instead of the default marker by setting the ImageSource property:
var pin = new Pin
{
Label = "Custom pin",
Location = new Location(47.6062, -122.3321),
ImageSource = ImageSource.FromFile("custom_pin.png")
};
Custom JSON map styling (Android)
Apply a custom JSON style to the map on Android using the MapStyle property. This enables dark mode maps, hiding labels, or any styling supported by the Google Maps Styling API.
Map events and element properties
MapLongClicked— fires when the user long-presses on the map.Circle,Polygon, andPolylinenow raise click events (MapElementClick).MapElement.IsVisibleandMapElement.ZIndex— control element visibility and draw order.Pin.ShowInfoWindow()/Pin.HideInfoWindow()— programmatically show or hide a pin's info window.UserLocationChangedevent andLastUserLocationproperty — track the user's location in real time.
Animated MoveToRegion and MapSpan.FromLocations
MoveToRegion now supports animated transitions, and the new MapSpan.FromLocations() factory method creates a span that encompasses a collection of locations.
For more information, see GitHub PRs #29101, #33831, #33950, #33982, #33985, #33792, #33799, #33991, and #33993.
In .NET 11 Preview 5, the Map control gains a Windows implementation backed by Azure Maps. To use it, call UseMapServiceToken(...) in MauiProgram.cs with an Azure Maps subscription key. The Windows implementation supports MoveToRegion, map types, traffic, scrolling, zooming, and standard pins; some platform-only features such as user location, custom pin info windows, and map elements/shapes aren't supported on Windows. For more information, see GitHub PR #34138.
BoxView Fill
Starting in .NET 11 Preview 5, BoxView exposes a Fill property of type Brush. This aligns BoxView with the other shape primitives and means gradients and other brushes can paint a BoxView without a custom handler. BackgroundColor still works as before. For more information, see GitHub PR #31789.
<BoxView HeightRequest="120" CornerRadius="12">
<BoxView.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="1,1">
<GradientStop Color="#512BD4" Offset="0.0" />
<GradientStop Color="#0099CC" Offset="1.0" />
</LinearGradientBrush>
</BoxView.Fill>
</BoxView>
Animation
Cancel animations with CancellationToken
Starting in .NET 11 Preview 5, the ViewExtensions animation methods (FadeToAsync, RotateToAsync, ScaleToAsync, TranslateToAsync, and the relative variants) accept an optional CancellationToken. Passing a token lets you cancel a specific awaited animation without calling CancelAnimations, which cancels every animation on the element. The non-Async variants (FadeTo, RotateTo, and so on) are now marked [Obsolete] in favor of the Async-suffixed equivalents. For more information, see GitHub PR #33372 and Basic animation.
Accessibility
Back button accessibility label
Starting in .NET 11 Preview 5, you can set the accessibility label that screen readers (TalkBack, VoiceOver, Narrator) announce for the toolbar back button. NavigationPage defines a BackButtonAccessibilityLabel attached property, and BackButtonBehavior defines an AccessibilityLabel property for Shell apps. Both are independent of the visible back-button title, so you can keep the visible label short and still expose a descriptive spoken label. For more information, see GitHub PR #35011, NavigationPage, and Back button behavior.
Platform features
.NET MAUI's platform features have received some updates in .NET 11.
MonochromeFile for Android adaptive icons
Starting in .NET 11 Preview 4, single-project app icons can declare a dedicated monochrome layer for Android themed icons via a new MonochromeFile attribute on MauiIcon. This lets your themed icon use a different glyph than the foreground layer, instead of being a tinted reuse of it. For more information, see GitHub PR #34569.
iOS PostNotifications permission
Permissions.PostNotifications is now implemented on iOS, providing a cross-platform API for requesting notification authorization. Previously this permission was only functional on Android. Use it to request authorization before scheduling local notifications on iOS. For more information, see GitHub PR #30132.
var status = await Permissions.RequestAsync<Permissions.PostNotifications>();
if (status == PermissionStatus.Granted)
{
// Schedule notifications
}
Trimmable CSS
.NET MAUI CSS support is now fully trimmable. If your app doesn't use CSS stylesheets, the CSS infrastructure is trimmed away during publish, reducing app size. No code changes are needed — the linker removes unused CSS types automatically. For more information, see GitHub PR #33160.
Visual State Manager
InvalidateStyle and InvalidateVisualStates
Two new APIs make it easier to reapply styles and visual states that have been mutated in place:
VisualElement.InvalidateStyle()— forces a control to reapply its current Style, picking up any property changes made directly on the style object.VisualStateManager.InvalidateVisualStates(VisualElement)— reapplies the current visual state group setters, useful when visual state property values change at runtime.
These methods are especially useful for Hot Reload scenarios and dynamic UI updates where styles or visual states are modified without replacing the entire style object. For more information, see GitHub PR #34723.
// Mutate a style in place and force the control to pick up the change
var style = myButton.Style;
style.Setters.Add(new Setter { Property = Button.BackgroundColorProperty, Value = Colors.Red });
myButton.InvalidateStyle();
// Reapply visual states after changing a setter value
VisualStateManager.InvalidateVisualStates(myButton);
XAML
x:Code directive for inline C# in XAML
Starting in .NET 11 Preview 4, the XAML source generator supports an x:Code directive that lets you inline a small block of C# directly inside a XAML file. This makes it easier to keep view-local glue code next to the markup it serves without creating a code-behind partial just for a single helper. The EnablePreviewFeatures flag is required for this. For more information, see GitHub PR #34715.
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MyApp.MainPage">
<x:Code><![CDATA[
void OnButtonClicked(object sender, EventArgs e)
{
// inline C# method
}
]]></x:Code>
<Button Clicked="OnButtonClicked" Text="Click me" />
</ContentPage>
Compiled bindings inside DataTemplates
Starting in .NET 11 Preview 4, compiled bindings with explicit sources defined inside a DataTemplate now resolve correctly, fixing a regression that broke TapGestureRecognizer bindings inside CollectionView items in .NET 10. For more information, see GitHub PR #34447.
The XAML source generator now also:
- Emits diagnostics when an
x:DataTypeor binding is invalid. For more information, see GitHub PR #34078. - Correctly distinguishes static extension classes from
enumtypes when resolving XAML markup. For more information, see GitHub PR #34446.
Implicit XAML namespace declarations
Starting in .NET 11, implicit XAML namespace declarations are enabled by default. XAML files no longer need the standard xmlns and xmlns:x declarations at the root element — the compiler injects them automatically. Existing explicit declarations still compile and can be used to disambiguate duplicate type names. For more information, see GitHub PR #33834.
Lazy ResourceDictionary
XAML Source Generation now registers resource dictionary entries as factories, inflating each resource on demand instead of eagerly loading everything at startup. This can yield up to an ~8× improvement in resource dictionary initialization time for apps with large dictionaries. The optimization is automatic when XAML source generation is enabled — no code changes are required. For more information, see GitHub PR #33826.
.NET for Android
.NET for Android in .NET 11 makes CoreCLR the default runtime for Release builds, and includes work to improve performance. For more information about .NET for Android in .NET 11, see the following release notes:
Minimum supported Android API
Starting in .NET 11 Preview 3, the minimum supported Android API level has been raised from 21 (Lollipop) to 24 (Nougat). This means that .NET MAUI apps in .NET 11 require Android 7.0 or higher.
If your project explicitly sets $(SupportedOSPlatformVersion) to a value lower than 24, you'll need to update it:
<PropertyGroup>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">24</SupportedOSPlatformVersion>
</PropertyGroup>
For more information, see Supported platforms.
Note
Android API levels 21, 22, and 23 are only supported when using the Mono runtime. If you need to temporarily target API 21 while migrating your app, you can opt out of CoreCLR and revert $(SupportedOSPlatformVersion):
<PropertyGroup>
<UseMonoRuntime>true</UseMonoRuntime>
<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21</SupportedOSPlatformVersion>
</PropertyGroup>
This is a temporary workaround. Plan to migrate to API 24 and CoreCLR for the final .NET 11 release.
CoreCLR by Default
CoreCLR is now the default runtime for Release builds. This should
improve compatibility with the rest of .NET as well as shorter startup
times, with a reasonable increase to application size.
We are always working to improve performance and app size, but please file issues with stability or concerns by filing issues on GitHub.
If you would like to opt out of CoreCLR, and use the Mono runtime instead, you can still do so via:
<PropertyGroup>
<UseMonoRuntime>true</UseMonoRuntime>
</PropertyGroup>
dotnet run
We have enhanced the .NET CLI with Spectre.Console to prompt when a selection is needed for dotnet run.
So, for multi-targeted projects like .NET MAUI, it will:
- Prompt for a
$(TargetFramework) - Prompt for a device, emulator, simulator if there are more than one.
Console output of your application should appear directly in the terminal, and Ctrl+C will terminate the application.


dotnet watch for Android
Starting in .NET 11 Preview 4, dotnet watch works for Android devices and emulators. After selecting a target framework and device, dotnet watch deploys your app and applies Hot Reload changes as you edit — no manual rebuild required.

dotnet watch for iOS
Starting in .NET 11 Preview 4, several long-standing issues have been fixed to make dotnet watch usable end-to-end on a dotnet new maui project running in the iOS Simulator:
- The Spectre.Console TFM picker no longer appears stuck because two readers were both calling
Console.ReadKey(). Keys now flow through a singlePhysicalConsole.KeyPressedevent. For more information, see dotnet/sdk #53675. - Ctrl+C and Ctrl+R no longer surface a spurious
WebSocketException/ObjectDisposedExceptionwhen the WebSocket transport tears down. For more information, see dotnet/sdk #53648. - Hot Reload no longer deadlocks on iOS when
UIKitSynchronizationContextis installed before the startup hook runs. For more information, see dotnet/sdk #54023.

Important
dotnet watch does not work for iOS projects unless <MtouchLink>None</MtouchLink> is set in the .csproj file. For more information, see dotnet/macios #25295.
Add the following to your project file:
<PropertyGroup>
<MtouchLink>None</MtouchLink>
</PropertyGroup>
.NET for iOS
.NET 11 on iOS, tvOS, Mac Catalyst, and macOS supports the following platform versions:
- iOS: 18.2
- tvOS: 18.2
- Mac Catalyst: 18.2
- macOS: 15.2
For more information about .NET 11 on iOS, tvOS, Mac Catalyst, and macOS, see the following release notes:
For information about known issues, see Known issues in .NET 11.
Xcode 26.4
Starting in .NET 11 Preview 4, Xcode 26.4 Stable is the supported Xcode version, with refreshed bindings across UIKit, AVFoundation, WebKit, Metal, Photos, PassKit, CarPlay, AuthenticationServices, and more. For more information, see dotnet/macios #25005.
One Apple-side breaking change: HMError.QuotaExceeded was removed by Apple and is no longer available. For more information, see dotnet/macios #25024.
HTTP digest authentication
Starting in .NET 11 Preview 4, HTTP digest authentication is supported in NSUrlSessionHandler. For more information, see dotnet/macios #25180.
CoreCLR for Apple platforms
Starting in .NET 11 Preview 4, CoreCLR is the default runtime for .NET for iOS, Mac Catalyst, macOS, and tvOS. For more information, see CoreCLR is the default runtime and dotnet/macios #25050.
Preview 4 also includes a broad reliability and packaging pass across NSUrlSessionHandler, MSBuild, the linker, and runtime internals. For the complete list of changes, see the Preview 4 changelog.
Apple Intelligence APIs
Starting in .NET 11 Preview 5, the Apple Intelligence APIs are available from .NET for iOS, Mac Catalyst, macOS, and tvOS. These include the Foundation Models framework for on-device generative AI, Image Playground for system-provided image generation, Writing Tools entitlements, and the Translation framework. For more information, see dotnet/macios #25457 and the Preview 5 changelog.