[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M699JWSW13BEHN6F1M4849SE":3,"skill-same:01M699JWSW13BEHN6F1M4849SE":98},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M699JWSW13BEHN6F1M4849SE","winapp-frameworks",null,"Framework-specific Windows steps for Electron, WPF, WinForms, C++, Rust, Flutter, and Tauri: build output, npm scripts, Cargo, CMake, and how winapp fits each. Use when adding Windows features such as toast notifications to one of these apps, or for setup, packaging, or identity work on one.","microsoft\u002FwinappCli","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M699J7Q2FM9V32CFV0Q8VPF9",1380,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinapp\u002Fskills\u002Fwinapp-frameworks\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"winapp frameworks","frameworks","work","when","framework-specific","features","winforms","scripts","apps","as","tauri","packaging","rust","work on","how","notifications","framework","cmake","windows","identity","electron","2026-11-10 10:12:30",false,"---\nname: winapp-frameworks\ndescription: \"Framework-specific Windows steps for Electron, WPF, WinForms, C++, Rust, Flutter, and Tauri: build output, npm scripts, Cargo, CMake, and how winapp fits each. Use when adding Windows features such as toast notifications to one of these apps, or for setup, packaging, or identity work on one.\"\n---\n\n**If you can't run `winapp` yourself** (no shell, or the command is denied), give the user the exact `winapp` command(s) for their project instead of only describing the steps.\n\n## When to use\n\nUse this skill when:\n- **Working with a specific app framework** and need to know the right winapp workflow\n- **Choosing the correct install method** (npm package vs. standalone CLI)\n- **Looking for framework-specific guides** for step-by-step setup, build, and packaging\n\nEach framework has a detailed guide — refer to the links below rather than trying to guess commands.\n\n## Framework guides\n\n| Framework | Install method | Guide |\n|-----------|---------------|-------|\n| **Electron** | `npm install --save-dev @microsoft\u002Fwinappcli` | [Electron setup guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fsetup.md) |\n| **.NET** (WPF, WinForms, Console) | `winget install Microsoft.winappcli` | [.NET guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fdotnet.md) |\n| **.NET MAUI** | `winget install Microsoft.winappcli` | [MAUI guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fmaui.md) + `winapp-maui` skill |\n| **C++** (CMake, MSBuild) | `winget install Microsoft.winappcli` | [C++ guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fcpp.md) |\n| **Rust** | `winget install Microsoft.winappcli` | [Rust guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Frust.md) |\n| **Flutter** | `winget install Microsoft.winappcli` | [Flutter guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fflutter.md) |\n| **Tauri** | `winget install Microsoft.winappcli` | [Tauri guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Ftauri.md) |\n\n## Key differences by framework\n\n### Electron (npm package)\nUse the **npm package** (`@microsoft\u002Fwinappcli`), **not** the standalone CLI. The npm package includes:\n- The native winapp CLI binary bundled inside `node_modules`\n- A Node.js SDK with helpers for creating native C#\u002FC++ addons\n- Electron-specific commands under `npx winapp node`\n- Generated JS bindings (`.winapp\u002Fbindings\u002F`) for direct JavaScript access to Windows App SDK APIs\n\nQuick start:\n```powershell\nnpm install --save-dev @microsoft\u002Fwinappcli\nnpx winapp init . --use-defaults --add-js-bindings\nnpx winapp node create-addon --template cs   # create a C# native addon\nnpx winapp node add-electron-debug-identity  # register identity for debugging\n```\n\nWindows integration guidance:\n\n- Use **JS bindings** to call Windows App SDK APIs directly from JavaScript without native addons (for example AI APIs, notifications, and file pickers). Custom WinRT components with .winmd metadata can also be added via `winapp.jsBindings.additionalWinmds` in package.json.\n- Use **native addons** when you need Win32\u002FCOM APIs, third-party C++ libraries, or .NET assemblies: `--template cpp` for C++ (node-gyp), or `--template cs` for C#.\n- Mixing JS bindings and native addons in one Electron app is fine.\n- After editing `winapp.jsBindings` in package.json, regenerate with `npx winapp node generate-bindings`. After editing `winapp.yaml`, run `npx winapp restore` first.\n\nAdditional Electron guides:\n- [Notification JS bindings guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-notification.md)\n- [Windows APIs JS bindings guide (file picker + imaging)](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-file-picker.md)\n- [Phi Silica JS bindings guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-phi-silica.md)\n- [WinML JS bindings guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-winml.md)\n- [Packaging guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fpackaging.md)\n- [C++ notification addon guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fcpp-notification-addon.md)\n- [WinML addon guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fwinml-addon.md)\n- [Phi Silica addon guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fphi-silica-addon.md)\n\n### .NET (WPF, WinForms, Console)\n.NET projects have direct access to Windows APIs. Key differences:\n- Projects with NuGet references to `Microsoft.Windows.SDK.BuildTools` or `Microsoft.WindowsAppSDK` **don't need `winapp.yaml`** — winapp auto-detects SDK versions from the `.csproj`\n- The key prerequisite is `Package.appxmanifest`, not `winapp.yaml`\n- No native addon step needed — unlike Electron, .NET can call Windows APIs directly\n- `winapp init` automatically adds the `Microsoft.Windows.SDK.BuildTools.WinApp` NuGet package, enabling `dotnet run` with automatic identity registration\n- Arguments written after `dotnet run` go to the launched application, exactly as they would without the package; configure the launcher itself with the `WinAppRun*` MSBuild properties\n- Example combining both: `dotnet run -p:WinAppRunDetach=true --app-arg` (WinApp detaches, the app receives `--app-arg`)\n- Use `--` when the app's flag is also a `dotnet run` option (`--configuration`, `--framework`, `--project`, `-c`, `-f`, `-r`, ...), e.g. `dotnet run -- --configuration Release`; otherwise the SDK claims it and the app never sees it\n\n**If you already have a `Package.appxmanifest`** (e.g., WinUI 3 apps or projects with an existing packaging setup), you likely **don't need `winapp init`** — your project is already configured for packaged builds. Just make sure:\n- Your `.csproj` references the `Microsoft.WindowsAppSDK` NuGet package (WinUI 3 apps already have this)\n- The project properties are set up for packaged builds (e.g., `\u003CWindowsPackageType>MSIX\u003C\u002FWindowsPackageType>` or equivalent)\n- WinUI 3 apps created from Visual Studio templates are typically already fully configured\n\nQuick start:\n```powershell\nwinapp init . --use-defaults\ndotnet build \u003Cpath-to-project.csproj> -c Debug -p:Platform=x64\nwinapp run bin\\x64\\Debug\\\u003Ctfm>\\win-x64\\\n```\n\nReplace `\u003Ctfm>` with your target framework (e.g., `net10.0-windows10.0.26100.0`), and adjust `x64` to match your target architecture.\n\n### .NET MAUI\nMAUI has one important quirk: its checked-in `Platforms\u002FWindows\u002FPackage.appxmanifest` is full of `$placeholder$` tokens that **`winapp package` does not resolve**. MAUI's **resizetizer** fills them at build\u002Fpublish time into a generated manifest:\n- Resizetizer manifest: `obj\\\u003CConfig>\\\u003CTFM>\\\u003CRID>\\resizetizer\\m\\Package.appxmanifest`\n- Fully-resolved output manifest: `bin\\\u003CConfig>\\\u003CTFM>\\\u003CRID>\\AppxManifest.xml`\n\nPublish the Windows head first, then point `winapp package --manifest` at the **generated** manifest — never the source one. See the dedicated **`winapp-maui`** skill for the full workflow, CI examples, and troubleshooting.\n\n### C++ (CMake, MSBuild)\nC++ projects use winapp primarily for SDK projections (CppWinRT headers) and packaging:\n- `winapp init --setup-sdks stable` downloads Windows SDK + App SDK and generates CppWinRT headers\n- Headers generated in `.winapp\u002Fgenerated\u002Finclude`\n- Response file at `.cppwinrt.rsp` for build system integration\n- Add `.winapp\u002Fpackages` to include\u002Flib paths in your build system\n- Visual Studio projects (`.vcxproj`, e.g. WinUI 3 C++\u002FWinRT): `winapp run .\\MyApp.vcxproj` (or the project folder) builds with Visual Studio's MSBuild and launches the app; it needs Visual Studio or Build Tools with the C++ workload. CMake projects run their build-output folder instead.\n\n### Rust\n- Use the `windows` crate for Windows API bindings\n- winapp handles manifest, identity, packaging, and certificate management\n- Typical build output: `target\u002Frelease\u002Fmyapp.exe`\n\n### Flutter\n- Flutter handles the build (`flutter build windows`)\n- winapp handles manifest, identity, packaging\n- Build output: `build\\windows\\x64\\runner\\Release\\`\n\n### Tauri\n- Tauri has its own bundler for `.msi` installers\n- Use winapp specifically for **MSIX distribution** and package identity features\n- winapp adds capabilities beyond what Tauri's built-in bundler provides (identity, sparse packages, Windows API access)\n\n## Debugging by framework\n\n| Framework | Recommended command | Notes |\n|-----------|-------------------|-------|\n| **.NET** | `winapp run .\\bin\\x64\\Debug\\\u003Ctfm>\\win-x64\\` | Build with `dotnet build -c Debug -p:Platform=x64` first; GUI apps launch via AUMID, console apps automatically via an execution alias |\n| **C++** | `winapp run .\\MyApp.vcxproj` (Visual Studio project) or `winapp run .\\build\\Debug` (CMake output) | The `.vcxproj` is built with MSBuild first; console apps are detected and launched via an execution alias automatically |\n| **Rust** | `winapp run .\\target\\debug` | Console apps are detected and launched via an execution alias automatically |\n| **Flutter** | `winapp run .\\build\\windows\\x64\\runner\\Debug` | GUI app — plain `winapp run` works |\n| **Tauri** | `winapp run .\\dist` | Stage exe to `dist\u002F` first (avoids copying entire `target\u002F` tree); GUI app |\n| **Electron** | `npx winapp node add-electron-debug-identity` | Uses Electron-specific identity registration; `winapp run` is **not** recommended for Electron |\n\n**Key rules:**\n- **GUI apps** (Flutter, Tauri, WPF): use `winapp run \u003Cbuild-output>` — launches via AUMID activation\n- **Console apps** (C++, Rust, .NET console): plain `winapp run \u003Cbuild-output>` — winapp detects a console app from the built binary's PE subsystem and launches it via an execution alias, so stdin\u002Fstdout reach your terminal. It stages the required `uap5:ExecutionAlias` into the AppX layout itself, so no manifest edit is needed. Pass `--without-alias` to force AUMID activation instead (the app then prints nothing); `--with-alias` only forces an alias for a *windowed* app\n- **Electron**: different mechanism — uses `npx winapp node add-electron-debug-identity` because `electron.exe` is in `node_modules\u002F`, not your build output\n- **Startup debugging (any framework)**: use `winapp create-debug-identity \u003Cexe>` so your IDE can F5-launch the exe with identity from the first instruction\n\nFor full debugging scenarios and IDE setup, see the [Debugging Guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fdebugging.md).\n\n## Related skills\n- **Setup**: `winapp-setup` — initial project setup with `winapp init`\n- **Manifest**: `winapp-manifest` — creating and customizing `Package.appxmanifest`\n- **Signing**: `winapp-signing` — certificate generation and management\n- **Packaging**: `winapp-package` — creating MSIX installers from build output\n- **Identity**: `winapp-identity` — enabling package identity for Windows APIs during development\n- **MAUI**: `winapp-maui` — packaging\u002Fsigning .NET MAUI Windows apps and resolving the resizetizer manifest\n- Not sure which command to use? See `winapp-troubleshoot` for a command selection flowchart\n\n## CLI reference\n\nRun `winapp \u003Ccommand> --help` for current command options, or `winapp --cli-schema` for the complete machine-readable command schema.\n","**If you can't run `winapp` yourself** (no shell, or the command is denied), give the user the exact `winapp` command(s) for their project instead of only describing the steps.\n\n## When to use\n\nUse this skill when:\n- **Working with a specific app framework** and need to know the right winapp workflow\n- **Choosing the correct install method** (npm package vs. standalone CLI)\n- **Looking for framework-specific guides** for step-by-step setup, build, and packaging\n\nEach framework has a detailed guide — refer to the links below rather than trying to guess commands.\n\n## Framework guides\n\n| Framework | Install method | Guide |\n|-----------|---------------|-------|\n| **Electron** | `npm install --save-dev @microsoft\u002Fwinappcli` | [Electron setup guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fsetup.md) |\n| **.NET** (WPF, WinForms, Console) | `winget install Microsoft.winappcli` | [.NET guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fdotnet.md) |\n| **.NET MAUI** | `winget install Microsoft.winappcli` | [MAUI guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fmaui.md) + `winapp-maui` skill |\n| **C++** (CMake, MSBuild) | `winget install Microsoft.winappcli` | [C++ guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fcpp.md) |\n| **Rust** | `winget install Microsoft.winappcli` | [Rust guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Frust.md) |\n| **Flutter** | `winget install Microsoft.winappcli` | [Flutter guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Fflutter.md) |\n| **Tauri** | `winget install Microsoft.winappcli` | [Tauri guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Ftauri.md) |\n\n## Key differences by framework\n\n### Electron (npm package)\nUse the **npm package** (`@microsoft\u002Fwinappcli`), **not** the standalone CLI. The npm package includes:\n- The native winapp CLI binary bundled inside `node_modules`\n- A Node.js SDK with helpers for creating native C#\u002FC++ addons\n- Electron-specific commands under `npx winapp node`\n- Generated JS bindings (`.winapp\u002Fbindings\u002F`) for direct JavaScript access to Windows App SDK APIs\n\nQuick start:\n```powershell\nnpm install --save-dev @microsoft\u002Fwinappcli\nnpx winapp init . --use-defaults --add-js-bindings\nnpx winapp node create-addon --template cs   # create a C# native addon\nnpx winapp node add-electron-debug-identity  # register identity for debugging\n```\n\nWindows integration guidance:\n\n- Use **JS bindings** to call Windows App SDK APIs directly from JavaScript without native addons (for example AI APIs, notifications, and file pickers). Custom WinRT components with .winmd metadata can also be added via `winapp.jsBindings.additionalWinmds` in package.json.\n- Use **native addons** when you need Win32\u002FCOM APIs, third-party C++ libraries, or .NET assemblies: `--template cpp` for C++ (node-gyp), or `--template cs` for C#.\n- Mixing JS bindings and native addons in one Electron app is fine.\n- After editing `winapp.jsBindings` in package.json, regenerate with `npx winapp node generate-bindings`. After editing `winapp.yaml`, run `npx winapp restore` first.\n\nAdditional Electron guides:\n- [Notification JS bindings guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-notification.md)\n- [Windows APIs JS bindings guide (file picker + imaging)](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-file-picker.md)\n- [Phi Silica JS bindings guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-phi-silica.md)\n- [WinML JS bindings guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fjs-winml.md)\n- [Packaging guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fpackaging.md)\n- [C++ notification addon guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fcpp-notification-addon.md)\n- [WinML addon guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fwinml-addon.md)\n- [Phi Silica addon guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fguides\u002Felectron\u002Fphi-silica-addon.md)\n\n### .NET (WPF, WinForms, Console)\n.NET projects have direct access to Windows APIs. Key differences:\n- Projects with NuGet references to `Microsoft.Windows.SDK.BuildTools` or `Microsoft.WindowsAppSDK` **don't need `winapp.yaml`** — winapp auto-detects SDK versions from the `.csproj`\n- The key prerequisite is `Package.appxmanifest`, not `winapp.yaml`\n- No native addon step needed — unlike Electron, .NET can call Windows APIs directly\n- `winapp init` automatically adds the `Microsoft.Windows.SDK.BuildTools.WinApp` NuGet package, enabling `dotnet run` with automatic identity registration\n- Arguments written after `dotnet run` go to the launched application, exactly as they would without the package; configure the launcher itself with the `WinAppRun*` MSBuild properties\n- Example combining both: `dotnet run -p:WinAppRunDetach=true --app-arg` (WinApp detaches, the app receives `--app-arg`)\n- Use `--` when the app's flag is also a `dotnet run` option (`--configuration`, `--framework`, `--project`, `-c`, `-f`, `-r`, ...), e.g. `dotnet run -- --configuration Release`; otherwise the SDK claims it and the app never sees it\n\n**If you already have a `Package.appxmanifest`** (e.g., WinUI 3 apps or projects with an existing packaging setup), you likely **don't need `winapp init`** — your project is already configured for packaged builds. Just make sure:\n- Your `.csproj` references the `Microsoft.WindowsAppSDK` NuGet package (WinUI 3 apps already have this)\n- The project properties are set up for packaged builds (e.g., `\u003CWindowsPackageType>MSIX\u003C\u002FWindowsPackageType>` or equivalent)\n- WinUI 3 apps created from Visual Studio templates are typically already fully configured\n\nQuick start:\n```powershell\nwinapp init . --use-defaults\ndotnet build \u003Cpath-to-project.csproj> -c Debug -p:Platform=x64\nwinapp run bin\\x64\\Debug\\\u003Ctfm>\\win-x64\\\n```\n\nReplace `\u003Ctfm>` with your target framework (e.g., `net10.0-windows10.0.26100.0`), and adjust `x64` to match your target architecture.\n\n### .NET MAUI\nMAUI has one important quirk: its checked-in `Platforms\u002FWindows\u002FPackage.appxmanifest` is full of `$placeholder$` tokens that **`winapp package` does not resolve**. MAUI's **resizetizer** fills them at build\u002Fpublish time into a generated manifest:\n- Resizetizer manifest: `obj\\\u003CConfig>\\\u003CTFM>\\\u003CRID>\\resizetizer\\m\\Package.appxmanifest`\n- Fully-resolved output manifest: `bin\\\u003CConfig>\\\u003CTFM>\\\u003CRID>\\AppxManifest.xml`\n\nPublish the Windows head first, then point `winapp package --manifest` at the **generated** manifest — never the source one. See the dedicated **`winapp-maui`** skill for the full workflow, CI examples, and troubleshooting.\n\n### C++ (CMake, MSBuild)\nC++ projects use winapp primarily for SDK projections (CppWinRT headers) and packaging:\n- `winapp init --setup-sdks stable` downloads Windows SDK + App SDK and generates CppWinRT headers\n- Headers generated in `.winapp\u002Fgenerated\u002Finclude`\n- Response file at `.cppwinrt.rsp` for build system integration\n- Add `.winapp\u002Fpackages` to include\u002Flib paths in your build system\n- Visual Studio projects (`.vcxproj`, e.g. WinUI 3 C++\u002FWinRT): `winapp run .\\MyApp.vcxproj` (or the project folder) builds with Visual Studio's MSBuild and launches the app; it needs Visual Studio or Build Tools with the C++ workload. CMake projects run their build-output folder instead.\n\n### Rust\n- Use the `windows` crate for Windows API bindings\n- winapp handles manifest, identity, packaging, and certificate management\n- Typical build output: `target\u002Frelease\u002Fmyapp.exe`\n\n### Flutter\n- Flutter handles the build (`flutter build windows`)\n- winapp handles manifest, identity, packaging\n- Build output: `build\\windows\\x64\\runner\\Release\\`\n\n### Tauri\n- Tauri has its own bundler for `.msi` installers\n- Use winapp specifically for **MSIX distribution** and package identity features\n- winapp adds capabilities beyond what Tauri's built-in bundler provides (identity, sparse packages, Windows API access)\n\n## Debugging by framework\n\n| Framework | Recommended command | Notes |\n|-----------|-------------------|-------|\n| **.NET** | `winapp run .\\bin\\x64\\Debug\\\u003Ctfm>\\win-x64\\` | Build with `dotnet build -c Debug -p:Platform=x64` first; GUI apps launch via AUMID, console apps automatically via an execution alias |\n| **C++** | `winapp run .\\MyApp.vcxproj` (Visual Studio project) or `winapp run .\\build\\Debug` (CMake output) | The `.vcxproj` is built with MSBuild first; console apps are detected and launched via an execution alias automatically |\n| **Rust** | `winapp run .\\target\\debug` | Console apps are detected and launched via an execution alias automatically |\n| **Flutter** | `winapp run .\\build\\windows\\x64\\runner\\Debug` | GUI app — plain `winapp run` works |\n| **Tauri** | `winapp run .\\dist` | Stage exe to `dist\u002F` first (avoids copying entire `target\u002F` tree); GUI app |\n| **Electron** | `npx winapp node add-electron-debug-identity` | Uses Electron-specific identity registration; `winapp run` is **not** recommended for Electron |\n\n**Key rules:**\n- **GUI apps** (Flutter, Tauri, WPF): use `winapp run \u003Cbuild-output>` — launches via AUMID activation\n- **Console apps** (C++, Rust, .NET console): plain `winapp run \u003Cbuild-output>` — winapp detects a console app from the built binary's PE subsystem and launches it via an execution alias, so stdin\u002Fstdout reach your terminal. It stages the required `uap5:ExecutionAlias` into the AppX layout itself, so no manifest edit is needed. Pass `--without-alias` to force AUMID activation instead (the app then prints nothing); `--with-alias` only forces an alias for a *windowed* app\n- **Electron**: different mechanism — uses `npx winapp node add-electron-debug-identity` because `electron.exe` is in `node_modules\u002F`, not your build output\n- **Startup debugging (any framework)**: use `winapp create-debug-identity \u003Cexe>` so your IDE can F5-launch the exe with identity from the first instruction\n\nFor full debugging scenarios and IDE setup, see the [Debugging Guide](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FWinAppCli\u002Fblob\u002Fmain\u002Fdocs\u002Fdebugging.md).\n\n## Related skills\n- **Setup**: `winapp-setup` — initial project setup with `winapp init`\n- **Manifest**: `winapp-manifest` — creating and customizing `Package.appxmanifest`\n- **Signing**: `winapp-signing` — certificate generation and management\n- **Packaging**: `winapp-package` — creating MSIX installers from build output\n- **Identity**: `winapp-identity` — enabling package identity for Windows APIs during development\n- **MAUI**: `winapp-maui` — packaging\u002Fsigning .NET MAUI Windows apps and resolving the resizetizer manifest\n- Not sure which command to use? See `winapp-troubleshoot` for a command selection flowchart\n\n## CLI reference\n\nRun `winapp \u003Ccommand> --help` for current command options, or `winapp --cli-schema` for the complete machine-readable command schema.\n",{"name":5,"description":7},"main","1fe910277860e8dbb38bfbeef7e8bdb039d6ee41","plugins\u002Fwinapp\u002Fskills\u002Fwinapp-frameworks",96,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-13 02:57:36",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add microsoft\u002FwinappCli --skill winapp-frameworks",{"tool":60,"command":61},"bunx","bunx skills add microsoft\u002FwinappCli --skill winapp-frameworks",{"tool":63,"command":64},"pnpm","pnpm dlx skills add microsoft\u002FwinappCli --skill winapp-frameworks","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinapp\u002Fskills\u002Fwinapp-frameworks\u002FSKILL.md",true,[68,74,80,84,88,94],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"examples\u002Fcreate-draft.jxa","OTHER","其他",1007,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fclient-adapters\u002Fclaude-code\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fmail-automation\u002Fexamples\u002Fcreate-draft.jxa",{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"examples\u002Fmail-client.ts","SCRIPT","脚本",10030,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fclient-adapters\u002Fclaude-code\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fmail-automation\u002Fexamples\u002Fmail-client.ts",{"path":81,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":82,"sourceHtmlUrl":83},"examples\u002Fread-inbox.jxa",993,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fclient-adapters\u002Fclaude-code\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fmail-automation\u002Fexamples\u002Fread-inbox.jxa",{"path":85,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":86,"sourceHtmlUrl":87},"examples\u002Fsearch-messages.jxa",2395,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fclient-adapters\u002Fclaude-code\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fmail-automation\u002Fexamples\u002Fsearch-messages.jxa",{"path":89,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":92,"sourceHtmlUrl":93},"references\u002Fimap-vs-native.md","REFERENCE","参考文档",8612,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fclient-adapters\u002Fclaude-code\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fmail-automation\u002Freferences\u002Fimap-vs-native.md",{"path":95,"resourceType":90,"resourceTypeDesc":91,"sizeBytes":96,"sourceHtmlUrl":97},"references\u002Fmail-scripting-dictionary.md",10263,"https:\u002F\u002Fgithub.com\u002Fmattwag05\u002Fmw-plugins\u002Fblob\u002Fmain\u002Fclient-adapters\u002Fclaude-code\u002Fplugins\u002Fmacos-automation\u002Fskills\u002Fmail-automation\u002Freferences\u002Fmail-scripting-dictionary.md",[99,124,156,181,200,215],{"skillNo":100,"name":101,"nameZh":6,"description":102,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":40},"01M699M75MK9AADQV8PQQQ6NEV","winui-wpf-migration","Migrate or port a WPF app to WinUI 3: namespaces (System.Windows to Microsoft.UI.Xaml), control mapping (DataGrid, WrapPanel, TabControl), Dispatcher to DispatcherQueue, imaging, MVVM with CommunityToolkit.Mvvm, ThemeResource. Use when converting WPF code or fixing migration build errors.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-wpf-migration\u002FSKILL.md",[],[106,107,108,109,9,37,110,111,112,113,114,115,116,117,118,119,120,121,122,123,22],"winui wpf migration","winui","wpf","migration","dispatcher","code","xaml","ui","migrate","system","use","mvvm","app","mapping","port","imaging","errors","namespaces",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":140,"publishedAt":40},"01M699M4W3GKSVVT9CRR1E3KSW","winui-ui-testing","Write and run automated UI tests for Windows desktop apps (WinUI 3, WPF, WinForms, Win32) with the winapp ui harness: one batch script, assertions, input, file pickers, dialogs, screenshots, locally or in Windows Sandbox. Use when asked for UI tests or to verify a feature end to end.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-ui-testing\u002FSKILL.md",[130,135],{"categoryNo":131,"categoryName":132,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[141,142,107,113,143,144,145,37,146,147,148,149,150,151,152,27,153,25,154,155,22],"testing","winui ui testing","ui testing","screenshots","sandbox","run","win32","harness","batch","write","feature","end","input","desktop apps","for",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":165,"publishedAt":40},"01M699M2KTEYJZBDW7JBHM94K0","winui-setup","Install and verify WinUI 3 prerequisites — .NET SDK 8.0.100+, WinApp CLI 0.7+, and Developer Mode; identify additional Native AOT and Windows Sandbox requirements. Use when the user asks to set up or repair the toolchain, or when another WinUI skill finds a missing or outdated prerequisite.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-setup\u002FSKILL.md",[162],{"categoryNo":163,"categoryName":164,"taxonomyType":138,"taxonomyTypeDesc":139},"01JBSEEDCAT000000000000030","开发工程师",[166,167,107,168,145,169,37,170,171,172,116,173,174,175,176,177,178,179,180,22],"winui setup","setup","cli","sdk","SET","verify","install","up","repair","requirements","missing","native","toolchain","winapp cli","mode",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":190,"publishedAt":40},"01M699KZWEZ84A4J3291E6R65B","winui-packaging","MSIX packaging, signing, and Microsoft Store publishing for WinUI 3 apps with WinApp CLI 0.7+: project packaging, Native AOT, certificates, self-contained deployment, CI\u002FCD. Use when releasing or publishing a WinUI app. Not for WPF, WinForms, or Electron apps that only reference the Windows App SDK.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-packaging\u002FSKILL.md",[187],{"categoryNo":188,"categoryName":189,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000011","运维与部署",[191,107,30,168,169,39,9,192,37,193,194,195,196,197,198,118,27,25,177,199,179,155,22],"winui packaging","msix","windows app sdk","ci","certificates","only","self","project","CI\u002FCD",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":206,"publishedAt":40},"01M699KXTHG9FHK4X3JSZ4SV8J","winui-dev-workflow","Create, build, run, and fix build errors in WinUI 3 apps (C# or C++) with WinApp CLI 0.7+: winapp new, winapp run, Native AOT, crash diagnosis. Use for a new WinUI app or a WinUI project that fails to build or crashes. Not for WPF, WinForms, or Electron apps that only reference the Windows App SDK.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-dev-workflow\u002FSKILL.md",[],[207,208,107,209,210,168,169,39,37,211,146,212,196,198,118,213,27,25,177,179,122,214],"workflow","winui dev workflow","dev","dev workflow","create","fix","diagnosis","new",{"skillNo":216,"name":217,"nameZh":6,"description":218,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":219,"categories":220,"keywords":231,"publishedAt":40},"01M699KV0Q6NE5EET5EDBH33NM","winui-design","Read before writing or changing WinUI 3 XAML: choosing controls, pages and navigation, layout, Fluent Design, theming, accessibility, x:Bind, real samples, and checking that APIs exist with winapp find-api. Not for WPF or WinForms UI, even if the app uses the Windows App SDK.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FwinappCli\u002Fblob\u002Fmain\u002Fplugins\u002Fwinui\u002Fagent-plugin\u002Fskills\u002Fwinui-design\u002FSKILL.md",[221,224,227,228],{"categoryNo":222,"categoryName":223,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":225,"categoryName":226,"taxonomyType":133,"taxonomyTypeDesc":134},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":136,"categoryName":137,"taxonomyType":138,"taxonomyTypeDesc":139},{"categoryNo":229,"categoryName":230,"taxonomyType":138,"taxonomyTypeDesc":139},"01JBSEEDCAT000000000000036","内容创作者",[232,233,107,234,169,235,236,37,193,108,112,113,237,238,239,240,241,118,25,242,155,243],"design","winui design","writing","accessibility","fluent","api","read","layout","pages","bind","controls","fluent design"]