Grial UI Kit - .NET 10, New Popups & Navigation Overhaul (2026.1 Update)

Every release of Grial is an opportunity to push mobile UI development forward, and this one is no exception. Version 4.4.127 brings .NET 10 support, a fully reworked navigation system, brand-new popup templates, toolbar badges, and meaningful improvements to the Repeater control. Whether you are building a new app or maintaining an existing one, there is something here for you.
Let's break it down.
.NET 10 Support and retiring to .NET 8
Starting with this release, Grial supports .NET 9 and .NET 10. .NET 8 support has been officially retired.
This isn't just about chasing the latest framework, .NET 10 brings real improvements to MAUI's rendering pipeline, startup performance, and platform APIs that we wanted to take full advantage of. Staying on older target frameworks was holding back optimizations we've been eager to ship.
What this means for you: if your project still targets net8.0, you'll need to update your target framework before upgrading to Grial 4.4.127. You can check the changes on the microsoft docs here. On the grial side you can check the release notes in the official documentation here, there you have the breaking changes and what must be done to migrate to the new version.
Grial Navigation. Rebuilt from the ground up
The navigation bar is one of those things you interact with on every single screen but rarely think about, until it doesn't behave the way you expect. In this release, we've fully reworked the GrialNavigationPageHandler for improved performance and flexibility.
What changed
- The
navigationlayout.axmlAndroid layout file is no longer necessary, you can safely remove it from your project. The handler now manages its own rendering internally. - MAUI's built-in
NavigationPage.HasNavigationandNavigationPage.TitleViewproperties are no longer supported. Use Grial's own equivalents (GrialNavigationPageattached properties) instead, which offer far more control. - The navigation bar is now hidden by default, giving you a clean canvas. Use
INavigationBarInfoServicewhen you need to account for the navbar height in your layouts. ForceShadowandHideShadoware deprecated, use the newShadowTypeproperty instead, which provides cleaner, more explicit control over navigation bar shadows.
Why it matters
These changes eliminate several platform inconsistencies we've been tracking, especially around Android status bar rendering and iOS safe area calculation. The result is a more predictable, more performant navigation experience across both platforms.
Migration note: If you're upgrading from a previous version, make sure to remove thenavigationlayout.axmlfile and replace any usage ofForceShadow/HideShadowwith the newShadowTypeproperty. Check the full migration guide for details.

Mopups is out, our own engine is in
This is a big one. We've completely removed the Mopups dependency and replaced it with UXDivers Popups, our own popup framework built specifically for .NET MAUI.
Why did we build our own? Mopups served us well, but as MAUI evolved, we needed tighter integration with our theming system, better animation control, and more predictable behavior across platforms. UXDivers Popups gives us all of that, plus the ability to ship ready-made popup templates that follow the Grial design system out of the box.
Four new Popup templates
Along with the engine swap, we're shipping four new popup templates ready to drop into your app:
- Clipboard Link Popup — Perfect for share flows or "link copied" confirmations. Shows a URL or text snippet with a one-tap copy action.
- Single Entry Form Popup — A focused, single-field input dialog. Great for quick rename actions, adding notes, or any scenario where you need one piece of text from the user without navigating to a full form.
- Interactive Notification Popup — A rich notification dialog with action buttons. Use it for confirmation prompts, alerts with context, or any situation where a simple OK/Cancel isn't enough.
- Options List Popup — A scrollable list of selectable options presented in a popup. Ideal for filter selection, sort-by menus, or any picker-style interaction that shouldn't take over the whole screen.
All four are fully themed, they respect your current Grial theme and adapt to light/dark mode automatically. They're also included in the Grial Templates project, so you can see them in action and customize them to fit your needs.
Breaking change: If your project was using Mopups directly, you'll need to migrate to UXDivers Popups. The API surface is intentionally similar to make the transition smooth, check out the docs for the API reference.

Toolbar badges. A small feature, a big UX win
Sometimes the smallest additions have the biggest impact on user experience. We've added ToolbarItemBadgeProperties, a set of attached properties that let you add notification badges to any ToolbarItem in your navigation bar.
<ToolbarItem
IconImageSource="bell.png"
grial:ToolbarItemBadgeProperties.IsVisible="True"
grial:ToolbarItemBadgeProperties.Text="3"
grial:ToolbarItemBadgeProperties.BackgroundColor="{ DynamicResource ErrorColor }"
grial:ToolbarItemBadgeProperties.TextColor="{ DynamicResource OnSurfaceColor }"
grial:ToolbarItemBadgeProperties.Position="TopRight"
grial:ToolbarItemBadgeProperties.BadgeSize="18"
grial:ToolbarItemBadgeProperties.FontSize="10" />
The full set of available properties includes:
IsVisible - Show or hide the badge - Badge content (number, text, or empty for dot mode)
Text - Badge background
BackgroundColor - Text color inside the badge
TextColor - Placement relative to the icon
Position - Text size within the badge
FontSize - Overall badge diameter
BadgeSize - Size when used as a simple dot indicator
DotSize - Fine tune positioning
CenterOffset
No more custom renderers or platform-specific hacks to show a notification count on your toolbar. It just works, on both platforms, with full theme support.
Repeater Control enhancements
The Repeater is one of Grial's most versatile controls, and we've made it even better with three new capabilities:
Measure Strategy property
You can now control how the Repeater measures its items with two options:
- First (default) — Measures only the first item and assumes all items are the same size. Fast and efficient for uniform lists.
- All — Measures every item individually. Use this when your items have variable heights and you need pixel-perfect layout.
Buffer Size property
A new property for fine-tuning virtualization behavior. BufferSize controls how many off-screen items the Repeater keeps rendered in its buffer. Increase it for smoother scrolling in heavy lists; decrease it to save memory in constrained scenarios.
Empty View property
Native empty state support, finally. Instead of wrapping your Repeater in a conditional layout or using a DataPresenter, you can now set an EmptyView directly:
<grial:Repeater ItemsSource="{ Binding Items }">
<grial:Repeater.EmptyView>
<VerticalStackLayout HorizontalOptions="Center" VerticalOptions="Center">
<Image Source="empty_state.png" />
<Label Text="No items found" Style="{ StaticResource SubtitleStyle }" />
</VerticalStackLayout>
</grial:Repeater.EmptyView>
<grial:Repeater.ItemTemplate>
<!-- your template here -->
</grial:Repeater.ItemTemplate>
</grial:Repeater>
Clean, declarative, and no extra boilerplate.
Bug fixes & improvements
As always, we've been squashing bugs and smoothing rough edges:
- ParallaxView & Drawer — SafeAreaEdges issues resolved. Both controls now correctly respect safe area insets on devices with notches and dynamic islands.
- VideoPlayer — Fixed a crash on iOS when a local video resource wasn't found. It now fails gracefully instead of taking down the app.
- Repeater RTL — Corrected a blank space issue that appeared in right-to-left layouts.
- Repeater iOS scrolling — Fixed an issue where the Repeater would allow scrolling in both directions on iOS regardless of the configured
Orientation. - ScrollPadding — Property now works correctly on .NET 10.
- BackgroundGradient — Resolved a crash on Android when applying gradient backgrounds.
- EditorHandler & EntryHandler — Fixed crashes on Android when running on .NET 10.
- OrientationLock — Resolved a crash that occurred in certain navigation scenarios.
Known issues
- YouTube videos in the
VideoPlayermay briefly show an error on iOS before the full website loads. We're tracking this and working on a fix.
Other breaking changes
A couple more things to watch for when upgrading:
Animate.Clickedremoved — Following .NET MAUI's removal ofClickGestureRecognizer, we've removedAnimate.Clicked. UseAnimate.Tappedinstead, it's a drop-in replacement.- Repeater enum fix — The
Arroundvalue in the spacing enum has been corrected toAround. If you were using the misspelled version, update your XAML.
Get the update
Ready to upgrade? Here's how:
- Update your NuGet packages to
UXDivers.GrialMaui 4.4.127andUXDivers.Popups.Maui(replacing any Mopups reference). - Update your target framework to .NET 9 or .NET 10 if you haven't already.
- Remove
navigationlayout.axmlfrom your Android project. - Review the breaking changes above and update your code accordingly.
You can download the latest packages from the Grial Admin or update directly via NuGet.
For detailed API documentation and migration guides, visit our docs.
That's all for today. As always, we hope this helps .NET MAUI developers add new flavor to their mobile applications.
Happy coding!
developers community.

















