# .NET MAUI in .NET 11 Preview 5 - Release Notes
.NET 11 Preview 5 brings a substantial reliability wave to .NET MAUI alongside
targeted new APIs and Android platform progress:
- [Reliability and platform-fix wave lands in .NET 11](#reliability-and-platform-fix-wave-lands-in-net-11)
- [Animations get CancellationToken-aware overloads](#animations-get-cancellationtoken-aware-overloads)
- [BoxView adds a Fill property with Brush support](#boxview-adds-a-fill-property-with-brush-support)
- [Windows Maps gains a real implementation backed by Azure Maps](#windows-maps-gains-a-real-implementation-backed-by-azure-maps)
- [Material 3 handlers and helpers are now public](#material-3-handlers-and-helpers-are-now-public)
- [Toolbar back button supports an accessibility label](#toolbar-back-button-supports-an-accessibility-label)
- [Android raises its minimum SDK to API 24](#android-raises-its-minimum-sdk-to-api-24)
- [.NET for Android stabilizes API 37](#net-for-android-stabilizes-api-37)
- [.NET for Apple workloads refresh bindings and improve dev-loop builds](#net-for-apple-workloads-refresh-bindings-and-improve-dev-loop-builds)
- [Apple Intelligence APIs ship in Essentials.AI](#apple-intelligence-apis-ship-in-essentialsai)
- [Bug fixes](#bug-fixes)
.NET MAUI updates in .NET 11:
- [What's new in .NET MAUI in .NET 11](https://learn.microsoft.com/dotnet/maui/whats-new/)
## Reliability and platform-fix wave lands in .NET 11
Preview 5 merges a comprehensive reliability rollup into the
`net11.0` branch, bringing dozens of customer-reported fixes across
`CollectionView`, `CarouselView`, `Shell`, gestures, layout, RTL/FlowDirection,
`SearchHandler`, `TabBar`, `Label`, `GraphicsView`, `SwipeView`, `HybridWebView`,
`Entry`, `Editor`, `Picker`, `BoxView`, `ImageButton`, `RadioButton`,
`AppThemeBinding`, navigation lifecycle, and `Setter.TargetName` +
`ControlTemplate` scenarios
([dotnet/maui #34885](https://github.com/dotnet/maui/pull/34885),
[dotnet/maui #35330](https://github.com/dotnet/maui/pull/35330),
[dotnet/maui #35422](https://github.com/dotnet/maui/pull/35422)). Highlights
include:
- `TapGestureRecognizer` reliability on Android, and tap-on-`SwipeView` no
longer falls through to underlying gesture recognizers.
- `CollectionView` and `CarouselView` fixes for `EmptyView`,
`HeaderTemplate`/`FooterTemplate`, visual states, looping behavior,
drag-and-drop into empty groups, and grid item spacing.
- `Shell` fixes for `TabBarIsVisible` runtime toggling, `IconOverride` in
`BackButtonBehavior`, `SearchHandler` state retention across top tabs, and
flyout RTL on iOS and Mac Catalyst.
- Layout and rendering fixes for `Label` truncation and wrapping, `BoxView`
auto-size reset, `FlexLayout` wrap-reverse alignment, gradient brushes on
`Shape.Stroke`, line drawing precision, `GraphicsView` aspect-ratio
preservation in `Downsize`, and Android parent-opacity clipping.
- Input fixes for `Entry`/`Editor` `CursorPosition`, RTL placeholders, and
Windows `Entry` keyboard type handling.
See the [full compare](https://github.com/dotnet/maui/compare/11.0.0-preview.4.26230.3...release/11.0.1xx-preview5)
for the complete set of changes.
## Animations get CancellationToken-aware overloads
A new family of `FadeToAsync`, `RotateToAsync`, `TranslateToAsync`,
`ScaleToAsync`, `LayoutToAsync`, and their `Rel*` / `*X` / `*Y` variants on
`ViewExtensions` accepts a `CancellationToken`, giving you cooperative
cancellation without resorting to `AbortAnimation` lookups by name
([dotnet/maui #33372](https://github.com/dotnet/maui/pull/33372)). The
original `FadeTo`, `RotateTo`, `TranslateTo`, `ScaleTo`, and `LayoutTo`
methods are now `[Obsolete]` in favor of the new `*Async` forms.
```csharp
var cts = new CancellationTokenSource();
cancelButton.Clicked += (_, _) => cts.Cancel();
await myView.FadeToAsync(0, length: 2000, easing: Easing.Linear,
cancellationToken: cts.Token);
```
## BoxView adds a Fill property with Brush support
`BoxView` now exposes a `Fill` property that accepts any
`Brush`, including gradients and patterns, instead of only a solid
`BackgroundColor`
([dotnet/maui #31789](https://github.com/dotnet/maui/pull/31789)). This closes a
long-standing request for `BoxView` to participate in the same `Paint`-based
rendering pipeline as the other shape primitives.
```xaml
```
`BackgroundColor` continues to work for solid fills, but `Fill` is preferred
when you want a brush.
## Windows Maps gains a real implementation backed by Azure Maps
Preview 5 implements the Windows `Map` control against the WinUI
`MapControl` (Windows App SDK 1.8+, backed by Azure Maps), replacing the
previous stub that threw `NotImplementedException` for every operation
([dotnet/maui #34138](https://github.com/dotnet/maui/pull/34138)).
`MoveToRegion`, `MapType` (Street / Satellite / Hybrid), `IsTrafficEnabled`,
`IsScrollEnabled`, `IsZoomEnabled`, and pin add / clear / click are all
supported, with a 300 ms ease animation between camera positions.
A few cross-platform features remain unimplemented on Windows in this preview
because they aren't exposed by WinUI `MapControl`: pin labels and info
windows, polylines / polygons / circles, and `IsShowingUser` are no-ops
rather than throwing.
Apps using the Windows map need an Azure Maps subscription key configured on
the WinUI `MapControl` per the Windows App SDK Maps documentation.
## Material 3 handlers and helpers are now public
The Material 3 Android handler types and their helpers are now part of the
public surface area, so library authors and apps can subclass, decorate, or
replace them without reflecting against internal types
([dotnet/maui #35323](https://github.com/dotnet/maui/pull/35323)). This pairs
with the Material 3 control expansion that landed in Preview 4 and makes
it practical to build reusable Material 3 customizations.
## Toolbar back button supports an accessibility label
A new `BackButtonAccessibilityLabel` attached property on `NavigationPage`
and a new `AccessibilityLabel` bindable property on `Shell.BackButtonBehavior`
let you set a screen-reader label for the navigation bar back button
independently of the visible text
([dotnet/maui #35011](https://github.com/dotnet/maui/pull/35011)). The label
flows through to Android (`ContentDescription`), iOS and Mac Catalyst
(`AccessibilityLabel` on the bar button), and Windows
(`AutomationProperties.Name`).
```xaml
```
## Android raises its minimum SDK to API 24
.NET MAUI in .NET 11 now requires Android 7.0 (API 24) as its minimum
supported platform, up from API 23
([dotnet/maui #35452](https://github.com/dotnet/maui/pull/35452)). New
projects pick up this change automatically; existing projects upgrading from
.NET 10 should update `SupportedOSPlatformVersion` in the project file:
```xml
24.0
```
API 24 / Android 7.0 covers more than 95% of active Android devices and
aligns .NET MAUI with the broader Android ecosystem's minimum-API guidance.
## .NET for Android stabilizes API 37
.NET for Android `36.99.0-preview.5.308` graduates API 37 / Android 17 from
preview to **Stable** and defaults .NET 11 projects to target
`net11.0-android37` only
([dotnet/android #11151](https://github.com/dotnet/android/pull/11151),
[dotnet/android #11254](https://github.com/dotnet/android/pull/11254)). You no
longer need `EnablePreviewFeatures` to consume Android 17 APIs.
Preview 5 also adds a new `EnableOnBackInvokedCallback` property to
`ApplicationAttribute`, giving apps a one-line opt-in to Android's predictive
back gesture
([dotnet/android #11307](https://github.com/dotnet/android/pull/11307)):
```csharp
[Application(EnableOnBackInvokedCallback = true)]
public class MyApplication : MauiApplication
{
public MyApplication(IntPtr handle, JniHandleOwnership ownership)
: base(handle, ownership) { }
protected override MauiApp CreateMauiApp() => MauiProgram.CreateMauiApp();
}
```
### 🚨 Minimum API level unified to 24
.NET for Android now uses a single minimum supported API level —
**API 24 (Android 7.0)** — across all runtimes (Mono, CoreCLR, and NativeAOT)
([dotnet/android #11331](https://github.com/dotnet/android/pull/11331)).
Previously the floor differed by runtime; consolidating on API 24 simplifies
the support matrix and lets the workload drop conditional code paths for
older versions. Existing projects with `SupportedOSPlatformVersion` lower
than `24.0` should bump it before upgrading to .NET 11.
### TrimmableTypeMap progresses toward smaller, AOT-friendly apps
A substantial block of `TrimmableTypeMap` work landed this preview, moving
the new trim-friendly typemap from internal scaffolding to a usable runtime
path on both CoreCLR and NativeAOT. Highlights include:
- JNI replacement APIs are recognized by the trimmable typemap
([dotnet/android #11270](https://github.com/dotnet/android/pull/11270)).
- `[Export]` and `[ExportField]` callbacks — including dynamic export array
callbacks — are wired through the trimmable path
([dotnet/android #11123](https://github.com/dotnet/android/pull/11123),
[dotnet/android #11428](https://github.com/dotnet/android/pull/11428)).
- Default package naming switches to `Crc64` with `LowercaseCrc64`
compatibility for existing apps
([dotnet/android #11193](https://github.com/dotnet/android/pull/11193)).
- The trimmable typemap runtime initializes correctly for app startup on
CoreCLR and NativeAOT
([dotnet/android #11252](https://github.com/dotnet/android/pull/11252),
[dotnet/android #11292](https://github.com/dotnet/android/pull/11292)).
- Open generic JNI construction is rejected with a clear error
([dotnet/android #11273](https://github.com/dotnet/android/pull/11273)),
and `[JniAddNativeMethodRegistrationAttribute]` is refused with `XA4251`
([dotnet/android #11274](https://github.com/dotnet/android/pull/11274)).
- ReadyToRun trimmable typemap assemblies are now packaged
([dotnet/android #11473](https://github.com/dotnet/android/pull/11473)),
and base UCO wrappers are reused for inherited overrides
([dotnet/android #11466](https://github.com/dotnet/android/pull/11466)).
These changes are foundational for the Android app size and trim quality
improvements landing in subsequent .NET 11 previews.
Other notable .NET for Android changes:
- CoreCLR release APKs no longer ship diagnostic libraries
([dotnet/android #11245](https://github.com/dotnet/android/pull/11245)).
- A build-time error now fires when Mono-specific AOT settings are set while
the project targets CoreCLR
([dotnet/android #11246](https://github.com/dotnet/android/pull/11246)).
- The .NET runtime crash reporting path now activates before native signal
chaining, so crash dumps include managed context more reliably
([dotnet/android #11291](https://github.com/dotnet/android/pull/11291)).
## .NET for Apple workloads refresh bindings and improve dev-loop builds
.NET for iOS, Mac Catalyst, macOS, and tvOS Preview 5 refreshes its bindings
against the current Xcode 26.5 SDKs
([dotnet/macios #25394](https://github.com/dotnet/macios/pull/25394)) and
brings several developer-loop improvements
([dotnet/macios compare](https://github.com/dotnet/macios/compare/release/11.0.1xx-preview4...release/11.0.1xx-preview5)):
- Debug builds on device now strip CoreCLR / ReadyToRun framework metadata to
reduce on-device app size during inner-loop development
([dotnet/macios #25360](https://github.com/dotnet/macios/pull/25360)).
- The build supports a partial Xcode-less mode for scenarios where Xcode is
not installed, simplifying CI configurations that only need to produce
intermediate outputs
([dotnet/macios #25429](https://github.com/dotnet/macios/pull/25429)).
- `sharpie` now emits a helpful error when invoked on x64 macOS rather than
failing with an opaque message
([dotnet/macios #25359](https://github.com/dotnet/macios/pull/25359)).
`dotnet/maui` also removed `IsTrimmable=false` from assemblies that were
already AOT-compatible
([dotnet/maui #34573](https://github.com/dotnet/maui/pull/34573)), and
preserves the default trimming behavior for iOS and Mac Catalyst when using
CoreCLR ([dotnet/maui #35311](https://github.com/dotnet/maui/pull/35311)).
## Apple Intelligence APIs ship in Essentials.AI
The Apple Intelligence integration in `Microsoft.Maui.Essentials.AI` moves
from unshipped to shipped on .NET for iOS, Mac Catalyst, and macOS
([dotnet/maui #34574](https://github.com/dotnet/maui/pull/34574)).
`AppleIntelligenceChatClient` (with `GetResponseAsync` and
`GetStreamingResponseAsync`), `NLEmbeddingGenerator`, and the
`NLEmbeddingExtensions.AsIEmbeddingGenerator` extension are still gated
behind the `MAUIAI0001` experimental attribute, but their surface is now
stable for the .NET 11 release branch.
```csharp
#pragma warning disable MAUIAI0001
var client = new AppleIntelligenceChatClient();
var response = await client.GetResponseAsync(
"Summarize today's notes",
cancellationToken: ct);
#pragma warning restore MAUIAI0001
```
## Bug fixes
- **CheckBox** — Templates created with the .NET 11 preview no longer hit
`TypeLoadException` / `HandlerNotFoundException` during handler resolution
([dotnet/maui #35666](https://github.com/dotnet/maui/pull/35666)).
- **Toolbar** — Empty badge text on iOS no longer renders a stray indicator
dot ([dotnet/maui #35504](https://github.com/dotnet/maui/pull/35504)).
- **Aspire ServiceDefaults template** — OpenTelemetry packages were bumped to
current versions
([dotnet/maui #35333](https://github.com/dotnet/maui/pull/35333)).
## Contributors
Thank you contributors! ❤️
[@Ahamed-Ali](https://github.com/Ahamed-Ali),
[@BagavathiPerumal](https://github.com/BagavathiPerumal),
[@dalexsoto](https://github.com/dalexsoto),
[@devanathan-vaithiyanathan](https://github.com/devanathan-vaithiyanathan),
[@Dhivya-SF4094](https://github.com/Dhivya-SF4094),
[@filipnavara](https://github.com/filipnavara),
[@HarishwaranVijayakumar](https://github.com/HarishwaranVijayakumar),
[@jeremy-visionaid](https://github.com/jeremy-visionaid),
[@jfversluis](https://github.com/jfversluis),
[@jonathanpeppers](https://github.com/jonathanpeppers),
[@jonpryor](https://github.com/jonpryor),
[@KarthikRajaKalaimani](https://github.com/KarthikRajaKalaimani),
[@kotlarmilos](https://github.com/kotlarmilos),
[@kubaflo](https://github.com/kubaflo),
[@mattleibow](https://github.com/mattleibow),
[@NafeelaNazhir](https://github.com/NafeelaNazhir),
[@NanthiniMahalingam](https://github.com/NanthiniMahalingam),
[@NirmalKumarYuvaraj](https://github.com/NirmalKumarYuvaraj),
[@nivetha-nagalingam](https://github.com/nivetha-nagalingam),
[@prakashKannanSf3972](https://github.com/prakashKannanSf3972),
[@praveenkumarkarunanithi](https://github.com/praveenkumarkarunanithi),
[@PureWeen](https://github.com/PureWeen),
[@Redth](https://github.com/Redth),
[@rmarinho](https://github.com/rmarinho),
[@rolfbjarne](https://github.com/rolfbjarne),
[@sbomer](https://github.com/sbomer),
[@sheiksyedm](https://github.com/sheiksyedm),
[@simonrozsival](https://github.com/simonrozsival),
[@sjordanGSS](https://github.com/sjordanGSS),
[@StephaneDelcroix](https://github.com/StephaneDelcroix),
[@SubhikshaSf4851](https://github.com/SubhikshaSf4851),
[@SuthiYuvaraj](https://github.com/SuthiYuvaraj),
[@SyedAbdulAzeemSF4852](https://github.com/SyedAbdulAzeemSF4852),
[@Tamilarasan-Paranthaman](https://github.com/Tamilarasan-Paranthaman),
[@TamilarasanSF4853](https://github.com/TamilarasanSF4853),
and [@Vignesh-SF3580](https://github.com/Vignesh-SF3580).