winapp-cli
github/awesome-copilot
Windows App Development CLI for MSIX packaging, signing, debugging, and UI automation across .NET, C++, Electron, Rust, Tauri, and Flutter.
What is winapp-cli?
winapp is a command-line tool for managing Windows application development workflows, including SDK setup, MSIX packaging, code signing, development certificates, and UI automation via Microsoft UI Automation. Use it when initializing Windows projects, creating distributable packages, debugging packaged apps, or automating Windows UI interactions.
- Initialize Windows app projects with SDK configuration and manifest setup
- Create and sign MSIX packages for distribution and sideloading
- Manage development and production code-signing certificates
- Run apps as packaged for IDE debugging without producing MSIX files
- Automate Windows UI interactions via Microsoft UI Automation (inspect, click, search, wait-for)
- Publish applications to the Microsoft Store and manage store submissions
How to install winapp-cli
npx skills add https://github.com/github/awesome-copilot --skill winapp-cli- Windows 10 or later
- Install via WinGet, npm, GitHub Action, or manual download from releases
How to use winapp-cli
- 1.Run `winapp init` in your app folder to set up SDKs, manifest, and configuration (use `--no-prompt` in CI)
- 2.Generate a development signing certificate with `winapp cert generate --publisher "CN=Your Company" --output ./cert.pfx --install`
- 3.Build your application using your framework's native toolchain (dotnet build, npm run build, cargo build, etc.)
- 4.Package as MSIX with `winapp pack ./build-output --cert ./cert.pfx --cert-password <pwd> --output App.msix`
- 5.(Optional) Re-sign with production certificate or submit to Microsoft Store using `winapp store` commands
Use cases
- Initialize a new .NET, C++, Electron, or Rust Windows application with SDKs and manifests
- Package and sign a desktop app as MSIX for sideloading or distribution
- Debug an app with identity-gated APIs (notifications, Windows AI, shell integration) using sparse package identity
- Automate UI testing or interaction workflows on Windows applications
- Submit a packaged application to the Microsoft Store for publication
- Windows desktop application developers (.NET, C++, Electron, Rust, Tauri, Flutter)
- DevOps engineers setting up Windows app CI/CD pipelines
- QA teams automating Windows UI testing
- Independent software vendors preparing apps for Microsoft Store distribution
winapp-cli FAQ
Yes, as of v0.2.0+, `winapp init` no longer auto-generates certificates. Run `winapp cert generate` explicitly to create a development signing certificate.
Yes, use `winapp run ./build-output` to pack as a loose layout and launch as a packaged app, ideal for IDE F5 debugging without producing an MSIX file.
winapp supports .NET (csproj), C++, Electron, Rust, Tauri, Flutter, and other frameworks targeting Windows.
Use `winapp create-debug-identity ./bin/MyApp.exe` to add sparse package identity to your executable, allowing it to call identity-gated APIs without full MSIX packaging.
Enable Developer Mode in Settings → Privacy & security → For developers, or run the PowerShell command to set AllowDevelopmentWithoutDevLicense to 1, then retry.
Full instructions (SKILL.md)
Source of truth, from github/awesome-copilot.
name: winapp-cli description: 'Windows App Development CLI (winapp) for building, packaging, signing, debugging, and UI-automating Windows applications. Use when asked to initialize Windows app projects, create MSIX packages, manage AppxManifest.xml or development certificates, run an app as packaged for debugging, automate Windows UI via Microsoft UI Automation, publish to the Microsoft Store, or access Windows SDK build tools. Covers commands like init, pack, run, unregister, manifest, cert, sign, store, ui, and tool. Supports .NET (csproj), C++, Electron, Rust, Tauri, Flutter, and other Windows frameworks.'
Windows App Development CLI
winapp manages Windows SDKs, MSIX packaging, app identity, manifests, certificates, signing, store publishing, and UI automation for any framework targeting Windows (.NET/csproj, C++, Electron, Rust, Tauri, Flutter, etc.). Public preview — subject to change.
Prerequisites
- Windows 10 or later
- Install via one of:
- WinGet:
winget install Microsoft.WinAppCli --source winget - npm (Electron/Node):
npm install @microsoft/winappcli --save-dev - CI:
setup-WinAppCliGitHub Action - Manual: GitHub Releases
- WinGet:
Commands
| Command | Purpose |
|---|---|
init | Initialize project: SDKs (stable/preview/experimental/none), manifest, winapp.yaml. .csproj projects skip winapp.yaml and use NuGet directly. Does not auto-generate a cert (v0.2.0+). |
restore / update | Restore or update SDK package versions (--setup-sdks preview for preview SDKs). |
pack <dir> | Build MSIX. Flags: --generate-cert, --cert <pfx> --cert-password, --self-contained (bundles WinAppSDK runtime), --output. Auto-discovers third-party WinRT components from .winmd (v0.2.1+). |
run <dir> [-- <app args>] | Pack as loose layout and launch as packaged app — ideal for IDE F5 debugging without producing an MSIX. Supports -- arg passthrough (v0.3.1+). (v0.3.0+) |
create-debug-identity <exe> | Add sparse package identity to an exe so it can call identity-gated APIs (notifications, Windows AI, shell integration) without full packaging. |
unregister | Remove sideloaded dev packages registered by run / create-debug-identity. |
manifest | Generate AppxManifest.xml; supports placeholders and qualified names. manifest update-assets <image> generates all required icon sizes from one source (PNG or SVG, v0.2.1+). |
cert generate / install / info | Manage dev certs. cert info <pfx> --password <pwd> shows subject/issuer/validity. --export-cer exports the public key. --json available on generate and info. (v0.2.1+) |
sign <target> --cert <pfx> | Sign MSIX or exe; optional timestamp server. |
tool | Run Windows SDK build tools with paths configured. |
store | Run Microsoft Store Developer CLI for store submission/validation/publishing. |
create-external-catalog | Generate CodeIntegrityExternal.cat for TrustedLaunch sparse packages. |
ui list-windows / inspect / click / search / wait-for / get-focused | UI automation via Microsoft UI Automation. All support --json. JSON envelopes for inspect, get-focused, search, and wait-for changed in v0.3.1 — see references/ui-json-envelope.md (other ui subcommands keep their pre-0.3.1 output). (v0.3.0+) |
node create-addon / add-electron-debug-identity / clear-electron-debug-identity | Electron/Node helpers. All commands also exposed as typed JS/TS functions from @microsoft/winappcli (v0.2.1+). |
CI tip: pass --no-prompt to skip interactive prompts.
Workflow
Standard init → package flow:
-
Initialize the project in your app folder. Sets up SDK refs, manifest, and
winapp.yaml(.csprojprojects skip the YAML and configure NuGet directly).winapp init # add --no-prompt in CI -
Generate a dev signing certificate — required for sideloading.
initno longer creates one for non-.csprojprojects (v0.2.0+). Pin the output path so later steps can reference it.winapp cert generate --publisher "CN=My Company" --output ./mycert.pfx --install -
Build your app with the framework's own toolchain (
dotnet build,npm run build,cargo build, etc.). -
Package as MSIX, signing with the cert from step 2.
winapp pack ./build-output --cert ./mycert.pfx --cert-password password --output MyApp.msix -
(Optional) Re-sign with a production cert before distribution.
winapp sign MyApp.msix --cert ./prod.pfx --cert-password $env:CERT_PWD -
(Optional) Submit to the Microsoft Store with
winapp store …(wraps the Store Developer CLI).
Alternate flows
-
Debug identity-gated APIs without packaging (notifications, Windows AI, shell):
winapp create-debug-identity ./bin/MyApp.exe ./bin/MyApp.exe -
Run as packaged app for IDE F5 (loose layout; app args after
--):winapp run ./bin/Debug/net10.0-windows10.0.26100.0/win-x64 \ --manifest ./appxmanifest.xml -- --my-flag value -
Electron:
npx winapp init npx winapp node add-electron-debug-identity npx winapp pack ./out --output MyElectronApp.msix
Gotchas
winapp ui --jsonenvelope reshaped in v0.3.1 —ui inspect,ui get-focused,ui search, andui wait-foruse new shapes; per-elementid/parentSelector/windowHandleare removed (useselector). Full schemas inreferences/ui-json-envelope.md.winapp initno longer auto-generates a certificate (v0.2.0+) — runwinapp cert generateexplicitly. The old--no-certflag was removed..csprojprojects skipwinapp.yaml— SDK packages live in the project file. Hybrid setups need adjustment.- NuGet global cache, not
%userprofile%/.winapp/packages(v0.2.0+) — scripts depending on the old folder will break. - Re-run
create-debug-identityafter any manifest change — identity is bound at registration time.
Troubleshooting
| Issue | Fix |
|---|---|
| Certificate not trusted | winapp cert install <pfx> to add to local machine store |
| Identity-gated API fails | Re-run create-debug-identity after manifest changes |
| SDK not found | winapp restore or winapp update |
run / create-debug-identity registration error 0x800704EC | Developer Mode is off — enable it in Settings → Privacy & security → For developers (or Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModelUnlock' -Name AllowDevelopmentWithoutDevLicense -Value 1), then retry |
run / create-debug-identity registration error 0x80073CFB | Package already registered with a conflicting identity — run winapp unregister (or winapp unregister --force if registered from a different project tree), then retry |
References
Related skills
More from github/awesome-copilot and the wider catalog.

winmd-api-search
Find and explore Windows desktop APIs with full type details, methods, properties, and events.

winui3-migration-guide
Map legacy UWP APIs to WinUI 3 equivalents with before/after code snippets and common pitfalls.

workiq-copilot
Query live Microsoft 365 emails, meetings, docs, and Teams data from the Copilot CLI via WorkIQ.

write-coding-standards-from-file
Generate coding standards documents by analyzing your project's existing code style and syntax patterns.

gh-stack
Manage stacked PRs and split multi-part work into reviewable branches with gh-stack.

postiz
Schedule and publish posts across 28+ social media and chat platforms from one CLI.