maui-accessibility
Guide for making .NET MAUI apps accessible — screen reader support via SemanticProperties, heading levels, AutomationProperties…
Guide for .NET MAUI apps consuming .NET Aspire-hosted backend services. Covers AppHost configuration, service discovery for mobile clients, HttpClient DI setup, Entra ID authentication with MSAL.NET for calling protected APIs, development workflow (Aspire dashboard + MAUI
$ npx -y skills add davidortinau/maui-skills --skill maui-aspire --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/maui-aspireContext preview
The summary Claude sees to decide when to auto-load this skill.
Guide for .NET MAUI apps consuming .NET Aspire-hosted backend services. Covers AppHost configuration, service discovery for mobile clients, HttpClient DI setup, Entra ID authentication with MSAL.NET for calling protected APIs, development workflow (Aspire dashboard + MAUI
name: maui-aspire description: > Guide for .NET MAUI apps consuming .NET Aspire-hosted backend services. Covers AppHost configuration, service discovery for mobile clients, HttpClient DI setup, Entra ID authentication with MSAL.NET for calling protected APIs, development workflow (Aspire dashboard + MAUI debugging), Blazor Hybrid considerations, and platform-specific networking for Android emulators and iOS simulators. USE FOR: "MAUI with Aspire", "Aspire service discovery", "AppHost MAUI", "Aspire backend", "MAUI Aspire networking", "mobile Aspire", "Aspire dashboard MAUI". DO NOT USE FOR: standalone REST API calls without Aspire (use maui-rest-api), authentication without Aspire (use maui-authentication), or Aspire-only projects without MAUI.
MAUI apps are NOT orchestrated by the AppHost — they run on devices/simulators and connect over the network. This changes everything:
// ❌ MAUI doesn't implement IServiceMetadata — this will fail
builder.AddProject<Projects.MyMauiApp>("mauiapp");
// ✅ Only add backend services to the AppHost
var apiService = builder.AddProject<Projects.MyApp_ApiService>("apiservice");// ❌ This only resolves inside the Aspire AppHost orchestration
client.BaseAddress = new Uri("https+http://apiservice");
// ✅ Use real endpoints
client.BaseAddress = new Uri("https://localhost:7001");The Android emulator has its own network stack. `localhost` points to the emulator itself, not the host machine.
// ❌ Fails silently on Android emulator
client.BaseAddress = new Uri("https://localhost:7001");
// ✅ Use 10.0.2.2 for host loopback on Android emulator
#if ANDROID && DEBUG
client.BaseAddress = new Uri("https://10.0.2.2:7001");
#else
client.BaseAddress = new Uri("https://localhost:7001");
#endifThe emulator won't trust your HTTPS dev cert. During local development:
// ⚠️ Development only — never ship this
#if ANDROID && DEBUG
builder.Services.AddHttpClient<IWeatherApiClient, WeatherApiClient>(client =>
{
client.BaseAddress = new Uri("https://10.0.2.2:7001");
})
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler
{
ServerCertificateCustomValidationCallback = (_, _, _, _) => true
});
#endifMAUI uses `PublicClientApplication` (MSAL.NET). The Entra Aspire auth skill (`entra-id-aspire-authentication`) is for the API/Blazor Server side only. For the MAUI side, use the `maui-authentication` skill.
Ensure your MAUI project also targets `net10.0-*` TFMs to match the Aspire backend.
In MAUI Blazor Hybrid apps calling Aspire services, authentication happens at the **MAUI layer** (MSAL.NET), not in the Blazor WebView. Don't use `AddMicrosoftIdentityWebApp` or server-side OIDC patterns in the MAUI app.
MAUI projects should **not** use `AddServiceDefaults()` because:
For telemetry correlation, configure OpenTelemetry separately using `System.Diagnostics` APIs.
| Scenario | What to do | |----------|-----------| | Debugging API issues | Use the Aspire dashboard at `https://localhost:17178` | | Debugging MAUI + API | Run Aspire AppHost in one terminal, MAUI in another | | VS: simultaneous debug | Open two VS instances — one per project | | VS Code | Two terminals, or Aspire extension + MAUI extension |
| Platform | localhost works? | HTTPS dev cert trusted? | Special config needed? | |----------|-----------------|------------------------|----------------------| | iOS Simulator | ✅ Yes | ✅ Yes (macOS keychain) | ATS exception for HTTP | | Android Emulator | ❌ Use `10.0.2.2` | ❌ No | Network security config | | Mac Catalyst | ✅ Yes | ✅ Yes | None | | Windows | ✅ Yes | ✅ Yes | None |
A collection of 41 skills for .NET MAUI development, UI/UX design reasoning, and Xamarin migration, designed for use with GitHub Copilot CLI and Claude Code.
Guide for making .NET MAUI apps accessible — screen reader support via SemanticProperties, heading levels, AutomationProperties…
.NET MAUI view animations, custom animations, easing functions, rotation, scale, translation, and fade effects. USE FOR: "animate…
.NET MAUI app icon configuration, splash screen setup, SVG to PNG conversion at build time, composed/adaptive icons, and…
.NET MAUI app lifecycle guidance covering the four app states (not running, running, deactivated, stopped), cross-platform Window…
Add authentication to .NET MAUI apps. Covers WebAuthenticator for generic OAuth 2.0 / social login, and MSAL.NET for Microsoft…
Guidance for implementing CollectionView in .NET MAUI apps — data display, layouts (list & grid), selection, grouping, scrolling,…