Core.Maui 0.3.79
Core.Maui
Product-neutral MAUI library for native application hosts. It includes the MAUI projection of the workspace spatial/density system, the shared operator/field sign-in presentation surface, API-key client support, secure-storage helpers, shell adapters, device services, and other reusable platform mechanics.
Spatial and density kit
Core.Presentation.Spatial owns the framework-neutral 2/4/6-unit rhythm, complete primitive
ladder, Compact / Standard / Comfortable recipes, accessible interaction-target arithmetic, and
persisted-preference migration helpers. Core.Maui.Spatial maps the current MAUI device idiom and
platform to that neutral contract and updates the shared resource aliases.
Merge Resources/Styles/SpatialRhythm.xaml into the product application resources, then apply the
stored preference after startup and whenever it changes:
var metrics = MauiSpatialResources.ApplyForPreference(
Application.Current!.Resources,
storedDensityPreference);
The XAML dictionary ships at
contentFiles/any/any/Resources/Styles/SpatialRhythm.xaml in the Core.Maui package. Product apps
may add named component geometry, insets, and responsive breakpoints; they must not redefine the
primitive ladder, density vocabulary, recipes, or target-floor arithmetic. The existing generated
spacing.kendo.* dictionary remains a theme projection and is not the spatial system.
Authentication parity posture
The existing API-key client, bearer-token storage, provider interfaces, and biometric helper are foundations—not parity with the canonical broker contract. Durable rotating sessions, broker password challenges, TOTP/recovery, passkey/platform-credential integration, current authorization context, broker-aware logout, and account/session management remain planned neutral adapters.
Products must not interpret local biometric unlock as broker MFA or copy portal-cookie behavior into native code. Native clients use OS-protected credential storage and native browser/callback flows over the same broker semantics. See the canonical authentication and authorization capability and cross-surface parity plan.
Neutral shell adapter
Core.Maui.ShellAdapters.MauiShellCatalogAdapter maps Core.Shell destinations to product-resolved
native routes and deep links and derives stable automation IDs. Products own catalogs, route maps,
back behavior, visibility policy, workflows, and authorization. The adapter does not copy portal CSS
or make customer, field, and operator apps visually identical.
Operator/field sign-in surface
Core.Maui.SignIn.OperatorSignInPage owns the responsive sign-in layout, accessible interaction
targets, spatial-density application, identifier/password/one-time-code steps, recovery link,
display preferences, legal/version footer, local-proof affordance, and a product-specific step slot.
Products implement IOperatorSignInViewModel over their own authentication broker and session
services, and provide IOperatorSignInDisplayPreferences plus OperatorSignInSurfaceOptions.
Products continue to own all copy and localization, branding, broker binding, proof configuration,
navigation after success, and any product-specific or identity-assurance step. Core does not make
authentication decisions or persist product preferences.
The old Core.Maui.Pages.LoginPage and ForgotPasswordPage and their view models were removed when
this surface shipped; they were unused API-key-era examples, not the canonical broker contract.
Using in a MAUI app
- Add a reference to
Core.Maui. - Implement
IOperatorSignInViewModelandIOperatorSignInDisplayPreferencesin the product. - Derive a thin product page from
OperatorSignInPage, pass product-owned options, and retain the product's success-routing/startup-gate behavior there. - Register the product view model, preference service, and composed page in
MauiProgram.
Other Core.Maui features
- Biometric authentication, Apple/Google sign-in, push notifications, and related interfaces (see project files).
- Device permission safety via
IDevicePermissionService,IDevicePermissionPlatform, andMauiDevicePermissionPlatform. - Deferred notification prompt sequencing via
INotificationPromptCoordinatorandMauiDeferredUiActionDispatcher.
Biometric provider boundary
Apps consume IBiometricAuthenticationService; the third-party provider is an implementation detail.
Core.Maui uses the stable .NET 10 Plugin.Maui.Biometric package and must not expose its request,
response, or status types in Core's public API. Product apps own the platform permission descriptions
required by their Android manifest and Apple Info.plist.
Device permission safety
Register the shared permission services in each MAUI app:
builder.Services.AddSingleton<IDevicePermissionPlatform, MauiDevicePermissionPlatform>();
builder.Services.AddSingleton<IDevicePermissionService, DevicePermissionService>();
Use IDevicePermissionService for optional device capabilities such as location, notifications, camera, photos, media, microphone, and contacts. Optional capabilities should quietly fall back when permission is denied, restricted, unavailable, disabled, or throws a platform permission exception. Do not show a blocking modal for optional context like distance sorting.
var location = await devicePermissionService.RunIfGrantedAsync<Location>(
DevicePermissionKind.LocationWhenInUse,
_ => Geolocation.GetLastKnownLocationAsync());
Notification prompt sequencing
Register the shared notification prompt coordinator in each MAUI app that may request push notification permission after sign-in:
builder.Services.AddSingleton<IDeferredUiActionDispatcher, MauiDeferredUiActionDispatcher>();
builder.Services.AddSingleton<INotificationPromptCoordinator, NotificationPromptCoordinator>();
Use it from the logged-in home or equivalent stable surface. The app owns the actual push registration behavior; Core.Maui owns the delay, once-per-session guard, and exception callback shape.
notificationPromptCoordinator.QueueAfterStableSurface(
() => pushNotificationsRegistrationService.EnsurePushSetupAfterLoginAsync(),
shouldQueue: () => currentUser != null,
options: new NotificationPromptCoordinatorOptions(
TimeSpan.FromSeconds(1),
exception => logger.LogError(exception, "Notification prompt failed.")));
No packages depend on Core.Maui.
.NET 10.0
- Core.Api.Clients (>= 0.3.79)
- Core.Contracts (>= 0.3.79)
- Core.Design (>= 0.3.77)
- Core.Logging (>= 0.3.77)
- Core.Presentation (>= 0.3.79)
- Core.Shell (>= 0.3.77)
- CommunityToolkit.Mvvm (>= 8.4.0)
- Microsoft.Maui.Controls (>= 10.0.30)
- Microsoft.Maui.Essentials (>= 10.0.30)
- Plugin.Maui.Biometric (>= 0.1.0)
- Serilog (>= 4.3.0)
.NET 10.0
- Core.Api.Clients (>= 0.3.79)
- Core.Contracts (>= 0.3.79)
- Core.Design (>= 0.3.77)
- Core.Logging (>= 0.3.77)
- Core.Presentation (>= 0.3.79)
- Core.Shell (>= 0.3.77)
- CommunityToolkit.Mvvm (>= 8.4.0)
- Microsoft.Maui.Controls (>= 10.0.30)
- Microsoft.Maui.Essentials (>= 10.0.30)
- Plugin.Maui.Biometric (>= 0.1.0)
- Serilog (>= 4.3.0)
.NET 10.0
- Core.Api.Clients (>= 0.3.79)
- Core.Contracts (>= 0.3.79)
- Core.Design (>= 0.3.77)
- Core.Logging (>= 0.3.77)
- Core.Presentation (>= 0.3.79)
- Core.Shell (>= 0.3.77)
- CommunityToolkit.Mvvm (>= 8.4.0)
- Microsoft.Maui.Controls (>= 10.0.30)
- Microsoft.Maui.Essentials (>= 10.0.30)
- Plugin.Maui.Biometric (>= 0.1.0)
- Serilog (>= 4.3.0)
.NET 10.0
- Core.Api.Clients (>= 0.3.79)
- Core.Contracts (>= 0.3.79)
- Core.Design (>= 0.3.77)
- Core.Logging (>= 0.3.77)
- Core.Presentation (>= 0.3.79)
- Core.Shell (>= 0.3.77)
- CommunityToolkit.Mvvm (>= 8.4.0)
- Microsoft.Maui.Controls (>= 10.0.30)
- Microsoft.Maui.Essentials (>= 10.0.30)
- Plugin.Maui.Biometric (>= 0.1.0)
- Serilog (>= 4.3.0)
| Version | Downloads | Last updated |
|---|---|---|
| 0.3.82 | 2 | 08/13/2026 |
| 0.3.81 | 4 | 08/13/2026 |
| 0.3.80 | 3 | 08/12/2026 |
| 0.3.79 | 4 | 08/12/2026 |
| 0.3.78 | 3 | 08/12/2026 |
| 0.3.77 | 39 | 07/20/2026 |
| 0.3.76 | 4 | 07/19/2026 |
| 0.3.60 | 3 | 07/14/2026 |
| 0.3.59 | 3 | 07/14/2026 |
| 0.3.58 | 3 | 07/14/2026 |
| 0.3.57 | 3 | 07/14/2026 |
| 0.3.56 | 3 | 07/14/2026 |
| 0.3.27 | 4 | 07/05/2026 |
| 0.3.26 | 6 | 07/05/2026 |
| 0.3.24 | 5 | 07/03/2026 |
| 0.3.11 | 12 | 06/19/2026 |
| 0.3.10 | 4 | 06/19/2026 |
| 0.3.9 | 4 | 06/19/2026 |
| 0.3.8 | 4 | 06/19/2026 |
| 0.3.7 | 4 | 06/19/2026 |
| 0.3.6 | 4 | 06/18/2026 |
| 0.3.5 | 4 | 06/18/2026 |
| 0.3.4 | 7 | 06/10/2026 |
| 0.3.0 | 6 | 06/02/2026 |
| 0.2.0 | 5 | 06/02/2026 |
| 0.1.3-local.1 | 6 | 06/10/2026 |
| 0.1.2 | 6 | 05/31/2026 |
| 0.1.2-local.1 | 4 | 06/10/2026 |
| 0.1.1 | 6 | 05/28/2026 |
| 0.1.0 | 9 | 05/23/2026 |
| 0.1.0-alpha.7 | 5 | 05/21/2026 |
| 0.1.0-alpha.6 | 5 | 05/21/2026 |
| 0.1.0-alpha.5 | 5 | 05/21/2026 |
| 0.1.0-alpha.4 | 6 | 05/21/2026 |
| 0.1.0-alpha.3 | 5 | 05/21/2026 |
| 0.1.0-alpha.2 | 6 | 05/20/2026 |