Awesome-copilot winapp-cli
Windows App Development CLI (winapp) for building, packaging, and deploying Windows applications. Use when asked to initialize Windows app projects, create MSIX packages, generate AppxManifest.xml, manage development certificates, add package identity for debugging, sign packages, publish to the Microsoft Store, create external catalogs, or access Windows SDK build tools. Supports .NET (csproj), C++, Electron, Rust, Tauri, and cross-platform frameworks targeting Windows.
git clone https://github.com/github/awesome-copilot
T=$(mktemp -d) && git clone --depth=1 https://github.com/github/awesome-copilot "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/winapp-cli" ~/.claude/skills/github-awesome-copilot-winapp-cli && rm -rf "$T"
skills/winapp-cli/SKILL.mdWindows App Development CLI
The Windows App Development CLI (
winapp) is a command-line interface for managing Windows SDKs, MSIX packaging, generating app identity, manifests, certificates, and using build tools with any app framework. It bridges the gap between cross-platform development and Windows-native capabilities.
When to Use This Skill
Use this skill when you need to:
- Initialize a Windows app project with SDK setup, manifests, and certificates
- Create MSIX packages from application directories
- Generate or manage AppxManifest.xml files
- Create and install development certificates for signing
- Add package identity for debugging Windows APIs
- Sign MSIX packages or executables
- Access Windows SDK build tools from any framework
- Build Windows apps using cross-platform frameworks (Electron, Rust, Tauri, Qt)
- Set up CI/CD pipelines for Windows app deployment
- Access Windows APIs that require package identity (notifications, Windows AI, shell integration)
- Publish apps to the Microsoft Store via
winapp store - Create external catalogs for asset management
- Set up .NET (csproj) projects with Windows App SDK via NuGet
Prerequisites
- Windows 10 or later
- winapp CLI installed via one of these methods:
- WinGet:
winget install Microsoft.WinAppCli --source winget - NPM (for Electron):
npm install @microsoft/winappcli --save-dev - GitHub Actions/Azure DevOps: Use setup-WinAppCli action
- Manual: Download from GitHub Releases
- WinGet:
Core Capabilities
1. Project Initialization (winapp init
)
winapp initInitialize a directory with required assets (manifest, certificates, libraries) for building a modern Windows app. Supports SDK installation modes:
stable, preview, experimental, or none.
2. MSIX Packaging (winapp pack
)
winapp packCreate MSIX packages from prepared directories with optional signing, certificate generation, and self-contained deployment bundling.
3. Package Identity for Debugging (winapp create-debug-identity
)
winapp create-debug-identityAdd temporary package identity to executables for debugging Windows APIs that require identity (notifications, Windows AI, shell integration) without full packaging.
4. Manifest Management (winapp manifest
)
winapp manifestGenerate AppxManifest.xml files and update image assets from source images, automatically creating all required sizes and aspect ratios. Supports manifest placeholders for dynamic content and qualified names in AppxManifest for flexible app identity definitions.
5. Certificate Management (winapp cert
)
winapp certGenerate development certificates and install them to the local machine store for signing packages.
6. Package Signing (winapp sign
)
winapp signSign MSIX packages and executables with PFX certificates, with optional timestamp server support.
7. SDK Build Tools Access (winapp tool
)
winapp toolRun Windows SDK build tools with properly configured paths from any framework or build system.
8. Microsoft Store Integration (winapp store
)
winapp storeRun Microsoft Store Developer CLI commands directly from winapp, enabling store submission, package validation, and publishing workflows without leaving the CLI.
9. External Catalog Creation (winapp create-external-catalog
)
winapp create-external-catalogCreate external catalogs to streamline asset management for developers, separating catalog data from the main package.
Usage Examples
Example 1: Initialize and Package a Windows App
# Initialize workspace with defaults winapp init # Note: init no longer auto-generates a certificate (v0.2.0+). Generate one explicitly: winapp cert generate # Build your application (framework-specific) # ... # Create signed MSIX package winapp pack ./build-output --generate-cert --output MyApp.msix
Example 2: Debug with Package Identity
# Add debug identity to executable for testing Windows APIs winapp create-debug-identity ./bin/MyApp.exe # Run your app - it now has package identity ./bin/MyApp.exe
Example 3: CI/CD Pipeline Setup
# GitHub Actions example - name: Setup winapp CLI uses: microsoft/setup-WinAppCli@v1 - name: Initialize and Package run: | winapp init --no-prompt winapp pack ./build-output --output MyApp.msix
Example 4: Electron App Integration
# Install via npm npm install @microsoft/winappcli --save-dev # Initialize and add debug identity for Electron npx winapp init npx winapp node add-electron-debug-identity # Package for distribution npx winapp pack ./out --output MyElectronApp.msix
Guidelines
- Run
first - Always initialize your project before using other commands to ensure SDK setup and manifest are configured. Note: as of v0.2.0,winapp init
no longer generates a development certificate automatically. Runwinapp init
explicitly when you need to sign with a dev certificate.winapp cert generate - Re-run
after manifest changes - Package identity must be recreated whenever AppxManifest.xml is modified.create-debug-identity - Use
for CI/CD - Prevents interactive prompts in automated pipelines by using default values.--no-prompt - Use
for shared projects - Recreates the exact environment state defined inwinapp restore
across machines.winapp.yaml - Generate assets from a single image - Use
with one logo to generate all required icon sizes.winapp manifest update-assets
Common Patterns
Pattern: Initialize New Project
cd my-project winapp init # Creates: AppxManifest.xml, SDK configuration, winapp.yaml # Note: .NET (csproj) projects skip winapp.yaml and configure NuGet packages in the .csproj directly # Generate a dev signing certificate explicitly (no longer done by init) winapp cert generate
Pattern: Package with Existing Certificate
winapp pack ./build-output --cert ./mycert.pfx --cert-password secret --output MyApp.msix
Pattern: Self-Contained Deployment
# Bundle Windows App SDK runtime with the package winapp pack ./my-app --self-contained --generate-cert
Pattern: Update Package Versions
# Update to latest stable SDKs winapp update # Or update to preview SDKs winapp update --setup-sdks preview
Limitations
- Windows 10 or later required (Windows-only CLI)
- Package identity debugging requires re-running
after any manifest changescreate-debug-identity - Self-contained deployment increases package size by bundling the Windows App SDK runtime
- Development certificates are for testing only; production requires trusted certificates
- Some Windows APIs require specific capability declarations in the manifest
no longer auto-generates a certificate (v0.2.0+); runwinapp init
explicitlywinapp cert generate- .NET (csproj) projects skip
; SDK packages are configured in the project file directlywinapp.yaml - winapp CLI uses the NuGet global cache for packages (not
)%userprofile%/.winapp/packages - winapp CLI is in public preview and subject to change
Windows APIs Enabled by Package Identity
Package identity unlocks access to powerful Windows APIs:
| API Category | Examples |
|---|---|
| Notifications | Interactive native notifications, notification management |
| Windows AI | On-device LLM, text/image AI APIs (Phi Silica, Windows ML) |
| Shell Integration | Explorer, Taskbar, Share sheet integration |
| Protocol Handlers | Custom URI schemes () |
| Device Access | Camera, microphone, location (with consent) |
| Background Tasks | Run when app is closed |
| File Associations | Open file types with your app |
Troubleshooting
| Issue | Solution |
|---|---|
| Certificate not trusted | Run to install to local machine store |
| Package identity not working | Run after any manifest changes |
| SDK not found | Run or to ensure SDKs are installed |
| Signing fails | Verify certificate password and ensure cert is not expired |