Project-aware maui-dev CLI and VS Code / Cursor extension
Current 1.2.1
Developer productivity toolkit for .NET MAUI: a maui-dev dotnet tool plus a VS Code / Cursor extension. It reads csproj, manifests, and MAUI resource items, can apply a small allow-list of fixes, and emits JSON/SARIF for CI and the IDE Problems panel.
Usual alternatives — maui-check (environment only), dotnet workload, Visual Studio’s MAUI installer, and the Microsoft maui CLI — stop at the machine. MauiDev is project-aware: it checks SDK, workloads, Android SDK, JDK, Xcode, CocoaPods, TFMs, min SDK, permissions, duplicate resources, UseMaui, signing, store identity, and leftover Xamarin / net8 TFMs. Install Plugin.Maui.MauiDev.Cli as a global tool. Do not add it as a PackageReference in the app. The VS Code / Cursor extension (nuvyntralabs.maui-dev) shells out to maui-dev and offers to install the tool if it is missing.
Install
dotnet tool install -g Plugin.Maui.MauiDev.Cli
maui-dev doctor
Package ID: Plugin.Maui.MauiDev.Cli
Plugin.Maui.MauiDev.Cli is a global dotnet tool (net10.0). The command stays maui-dev. Do not run dotnet add package Plugin.Maui.MauiDev.Cli in an app. nuget.org reserved the ID MauiDev.Cli. Publishing is pipeline-only on the MauiDev repository.
VS Code / Cursor: install the MauiDev extension (nuvyntralabs.maui-dev) from the Marketplace. The extension shells out to maui-dev and offers to install the tool if it is missing.
--ci (or --format json) prints this schema. The VS Code / Cursor extension maps diagnostics into the Problems panel. --format sarif is the same findings for GitHub code scanning.
.NET MAUI Developer Doctor
────────────────────────────────────
Project
────────────────────────────────────
⚠ Analyze 5 findings
Recommendations
────────────────────────────────────
[1] MD100 MainPage.xaml.cs:12 event handler retained after the page is gone
[2] MD101 MainPage.xaml.cs:14 new HttpClient() inside a method — prefer IHttpClientFactory
[3] MD102 MainPage.xaml.cs:14 fire-and-forget Task.Run without observation
[4] MD103 MainPage.xaml.cs:15 repeated MainThread hops in one constructor
[5] MD105 MainPage.xaml.cs:18 Android API used without a platform guard
Heuristic, not a Roslyn analyzer. --ci emits JSON for the IDE Problems panel.
maui-dev resources
Duplicate / missing / unused MauiImage, splash, font
.NET MAUI Developer Doctor
────────────────────────────────────
Resources
────────────────────────────────────
✗ Resources missing MauiImage + unused splash
Recommendations
────────────────────────────────────
[1] MD201 App.csproj:18 MauiImage Include 'logo.png' has no file on disk
[2] MD202 Resources/Splash/splash.svg is never referenced
.NET MAUI Developer Doctor
────────────────────────────────────
Project
────────────────────────────────────
✗ Permissions duplicate CAMERA + missing NSCameraUsageDescription
Recommendations
────────────────────────────────────
[1] Deduplicate identical Android UsesPermission nodes.
[2] Add an iOS usage string for the camera permission you declared.
Fixes
────────────────────────────────────
Would keep one android.permission.CAMERA and drop the duplicate
Platforms/Android/AndroidManifest.xml
--fix only deduplicates identical Android UsesPermission / manifest nodes. It never removes a permission.
maui-dev platform
TFM ↔ Platforms/ folders, shared-code guards, Windows/Catalyst note, min OS
Usage
maui-dev platform
maui-dev platform --ci
Sample result
.NET MAUI Developer Doctor
────────────────────────────────────
Project
────────────────────────────────────
⚠ Target frameworks net10.0-android; net10.0-ios
⚠ Platforms no Platforms/Windows folder for a Windows TFM
✓ Compile guards shared code is platform-neutral
maui-dev signing
Keystore / entitlements checklist. Never writes secrets
Usage
maui-dev signing
maui-dev signing --ci
Sample result
.NET MAUI Developer Doctor
────────────────────────────────────
Project
────────────────────────────────────
⚠ Signing AndroidKeyStore not set for Release
⚠ Entitlements no Entitlements.plist on the iOS TFM
Recommendations
────────────────────────────────────
[1] Point Release at a keystore from CI secrets — do not commit the file.
[2] Add Platforms/iOS/Entitlements.plist when the app uses push or iCloud.
Checklist only. maui-dev never writes keystore passwords, provisioning profiles, or signing secrets.
maui-dev workload
Diagnose the MAUI workload and print the install command. Never installs
Usage
maui-dev workload
Sample result
.NET MAUI Developer Doctor
────────────────────────────────────
Machine
────────────────────────────────────
✗ MAUI workload maui workload is not installed
Recommendations
────────────────────────────────────
[1] Run: dotnet workload install maui
Prints the install command. It never runs dotnet workload install.
maui-dev version
Align packable Version values (--align) or --bump patch|minor|major
Usage
maui-dev version --align --dry-run
maui-dev version --bump patch --dry-run
maui-dev version --bump minor
Sample result
.NET MAUI Developer Doctor
────────────────────────────────────
Packaging
────────────────────────────────────
⚠ Version Lib 1.0.0 and Cli 1.0.1 are not aligned
Fixes
────────────────────────────────────
Would set Version and PackageVersion to 1.0.1
src/Lib/Lib.csproj
Would leave Cli at 1.0.1
src/Cli/Cli.csproj
Would set extension/vscode/package.json version to 1.0.1
--align writes every packable Version to the highest existing value. --bump implies --align. Both honor --dry-run. Invalid --bump values exit 2.
.NET MAUI Developer Doctor
────────────────────────────────────
Resources
────────────────────────────────────
⚠ Icons MauiIcon present; iOS marketing size is 512
Recommendations
────────────────────────────────────
[1] Supply a 1024×1024 iOS marketing / App Store icon.
[2] Set an adaptive icon background color for Android.
Release
maui-dev publish
Validate store ApplicationId / CFBundleIdentifier, iOS privacy manifest, pack metadata. Never pushes
.NET MAUI Developer Doctor
────────────────────────────────────
Packaging
────────────────────────────────────
✗ ApplicationId missing ApplicationId / CFBundleIdentifier
⚠ Privacy manifest no PrivacyInfo.xcprivacy on the iOS TFM
✓ Pack metadata README, icon, and license are present
Recommendations
────────────────────────────────────
[1] Set ApplicationId (Android) and CFBundleIdentifier (iOS) before store upload.
[2] Add Platforms/iOS/PrivacyInfo.xcprivacy for iOS 17+ required-reason APIs.
--validate is the default. --push is rejected (exit 2). Publishing NuGet packages is pipeline-only.
maui-dev migrate
Flag net8/net9 TFMs, Xamarin.Forms / Essentials, Forms.Init / LoadApplication
Usage
maui-dev migrate
maui-dev migrate --ci
Sample result
.NET MAUI Developer Doctor
────────────────────────────────────
Project
────────────────────────────────────
⚠ Migrate net8 TFM + Xamarin leftovers
Recommendations
────────────────────────────────────
[1] TargetFrameworks still includes net8.0-android — move to net10.0-*.
[2] Xamarin.Forms / Xamarin.Essentials PackageReference found.
[3] Forms.Init / LoadApplication remain in App.xaml.cs — MAUI uses MauiProgram.
Flags only. It never rewrites TFMs or source.
maui-dev telemetry
Scan the app for crash / analytics SDKs. The CLI collects nothing
Usage
maui-dev telemetry
Sample result
.NET MAUI Developer Doctor
────────────────────────────────────
Project
────────────────────────────────────
⚠ Telemetry AppCenter + Firebase Analytics referenced
Recommendations
────────────────────────────────────
[1] Plugin.Maui.Diagnostics is the lab crash / ANR package if you want that surface.
[2] The CLI itself collects nothing — this command only scans the app.
Scan only. MauiDev does not send telemetry.
maui-dev benchmark
Shell to maui-perf (Plugin.Maui.Performance.Cli). Android / iOS simulator only
Usage
maui-dev benchmark
maui-dev benchmark startup
Sample result
maui-perf is not on PATH.
Install: dotnet tool install -g Plugin.Maui.Performance.Cli
Then: maui-dev benchmark startup
MD900 benchmark requires maui-perf (Plugin.Maui.Performance.Cli).
Does not reimplement maui profile. Extra args are forwarded to maui-perf. Android / iOS simulator only.
maui-dev clean
Delete bin / obj (optional NuGet HTTP cache and workload temp behind flags)
.NET MAUI Developer Doctor
────────────────────────────────────
Packaging
────────────────────────────────────
✗ Package Version mismatch across packable projects
Recommendations
────────────────────────────────────
[1] MD401 Lib is 1.0.0 and Cli is 1.0.1 — align with maui-dev version --align.
--pack runs dotnet pack locally. It never pushes to nuget.org.
--fix allow-list
doctor: deduplicates identical MauiSplashScreen / MauiImage / MauiIcon / MauiFont items; inserts <UseMaui>true</UseMaui> when the project already looks like MAUI.
maui-check covers the environment only. dotnet workload, Visual Studio’s MAUI installer, and the Microsoft maui CLI install or list SDKs. MauiDev reads the project and can apply a small allow-list of fixes.
1.1.0. version --align / --bump patch|minor|major write packable Version values (honors --dry-run).
1.1.0. .maui-dev.json ignore accepts diagnostic ids (MD020) as well as check ids.
1.0.1. PackageId is Plugin.Maui.MauiDev.Cli. nuget.org reserved MauiDev.Cli. Command stays maui-dev.
1.0.0. maui-dev doctor with machine and project checks, --ci, allow-listed --fix / --dry-run.
.NET MAUI
CLI
dotnet tool
VS Code
Cursor
CI
SARIF
Discussion
Comment on MauiDev. The thread lives on this component's GitHub repository (nuvyntralabs/MauiDev). Sign in with GitHub — Giscus uses Discussions, Utterances uses Issues.