Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
21 commits
Select commit Hold shift + click to select a range
ca2b07e
Refocus docs overview and README on WinUI developers
niels9001 Oct 5, 2026
06e6b9e
Nest the Learn TOC under the existing Tools TOC
niels9001 Oct 7, 2026
ffe6a13
Balance the Learn intro between WinUI and cross-platform frameworks
niels9001 Oct 7, 2026
b5ada3b
Merge branch 'main' into niels9001/docs-winui-focus
niels9001 Oct 8, 2026
36cf911
Address review feedback on WinUI guide and overview
niels9001 Oct 8, 2026
9e4a0b0
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 8, 2026
190ba86
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 8, 2026
090e70b
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 8, 2026
0980914
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 8, 2026
4a3c664
Remove card images from docs overview for now
niels9001 Oct 9, 2026
43ea93b
Use consistent WinApp CLI capitalization in overview docs
chiaramooney Oct 20, 2026
017eb64
Merge branch 'main' into niels9001/docs-winui-focus
Jaylyn-Barbee Oct 20, 2026
6b4e6d1
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 20, 2026
e80fac3
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 21, 2026
ab855eb
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 21, 2026
f6044f8
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 21, 2026
017812b
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 21, 2026
ed0439e
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 22, 2026
4c5981d
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 23, 2026
b5c4dbe
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 23, 2026
a98eaaa
Merge branch 'main' into niels9001/docs-winui-focus
github-actions[bot] Oct 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 36 additions & 18 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# winapp CLI
# WinApp CLI

> [!IMPORTANT]
> :warning: **Status: Public Preview** — The Windows App Development CLI (winapp CLI) is experimental and in active development. We'd love your feedback! Share your thoughts by creating an [issue](https://github.com/microsoft/WinAppCli/issues).
> :warning: **Status: Public Preview** — The Windows App Development CLI (WinApp CLI) is experimental and in active development. We'd love your feedback! Share your thoughts by creating an [issue](https://github.com/microsoft/WinAppCli/issues).

> [!NOTE]
> The **`main` branch** contains work that is in **active development**. Documentation, features, and behavior here may differ from what is publicly released. For the latest stable version, see the [latest release](https://github.com/microsoft/WinAppCli/releases/latest). To try the newest in-progress build, see [Install from latest build](#install-from-latest-build-main-branch) below.
Expand Down Expand Up @@ -45,23 +45,28 @@
<span> • </span>
<a href="#-usage">Usage</a>
<span> • </span>
<a href="./docs/usage.md">Docs</a>
<a href="https://learn.microsoft.com/windows/apps/dev-tools/winapp-cli/">Docs</a>
<span> • </span>
<a href="#-feedback-and-support">Feedback</a>
</h3>
<br/>

The Windows App Development CLI (winapp CLI) is a single command-line interface for managing Windows SDKs, packaging, generating app identity, manifests, certificates, and using build tools with any app framework. This tool bridges the gap between cross-platform development and Windows-native capabilities.
The Windows App Development CLI (WinApp CLI) is a single command-line interface for creating, running, debugging, testing, and packaging Windows apps. It manages Windows SDKs, app identity, manifests, certificates, and build tools for WinUI and any other app framework.
<br/><br/>
Whether you're building with .NET/Win32, CMake, Electron, or Rust, this CLI gives you access to:
Whether you're building with WinUI, .NET/Win32, CMake, Electron, or Rust, this CLI gives you access to:

- **WinUI from the terminal** - Create apps from official templates with `winapp new` and launch them with `winapp run`
- **Modern Windows APIs** - [Windows App SDK](https://learn.microsoft.com/windows/apps/windows-app-sdk/) and Windows SDK with automatic setup and code generation
- **Package Identity** - Debug and test by adding package identity without full packaging in a snap
- **MSIX Packaging** - App packaging with signing and Store readiness
- **UI automation and agent tooling** - Inspect and drive running apps with `winapp ui`, and ground AI coding agents with `find-ui` and `find-api`
- **Developer Tools** - Manifests, certificates, assets, and build integration

Full documentation is published on Microsoft Learn: **[Windows App Development CLI](https://learn.microsoft.com/windows/apps/dev-tools/winapp-cli/)**.

Perfect for:

- **WinUI developers** who want to create, run, test, and package apps from the terminal, VS Code, or an AI coding agent
- **Cross-platform developers using frameworks like Qt or Electron** wanting native Windows features or targeting Windows
- **Developers who love their current tools** and want to build Windows apps from VS Code, or any other editor
- **Developers crafting CI/CD pipelines** to automate building apps for Windows
Expand All @@ -77,12 +82,12 @@ Our goal is to support developers wherever they are, with the tools and framewor
<picture>
<source media="(prefers-color-scheme: dark)" srcset="./docs/images/before-after-winapp-dark.png">
<source media="(prefers-color-scheme: light)" srcset="./docs/images/before-after-winapp.png">
<img src="./docs/images/before-after-winapp.png" alt="Before: 12 manual steps to access Windows APIs. After: 4 winapp commands (init, create-addon, add-electron-debug-identity, pack)">
<img src="./docs/images/before-after-winapp.png" alt="Before: 12 manual steps to access Windows APIs. After: 4 WinApp CLI commands (init, create-addon, add-electron-debug-identity, pack)">
</picture>
</p>
<p align="center"><i>Without winapp CLI, setting up a project involves 12 manual steps—downloading SDKs, generating headers, creating manifests, and more. With the CLI, it's just 4 commands.</i></p>
<p align="center"><i>Without WinApp CLI, setting up a project involves 12 manual steps—downloading SDKs, generating headers, creating manifests, and more. With the CLI, it's just 4 commands.</i></p>

**Few examples of what package identity and MSIX packaging unlocks:**
**A few examples of what package identity and MSIX packaging unlock:**

- [Interactive native notifications](https://learn.microsoft.com/windows/apps/develop/notifications/app-notifications/app-notifications-quickstart?tabs=cs) and notification management
- [Integration with Windows Explorer, Taskbar, Share sheet](https://learn.microsoft.com/windows/apps/develop/windows-integration/integrate-sharesheet-packaged), and other shell surfaces
Expand All @@ -99,9 +104,13 @@ Our goal is to support developers wherever they are, with the tools and framewor

## ✏️ Get started

Checkout our getting started guides for step by step instructions of how to setup your environment, generate manifests, assets, and certificate, how to debug APIs that require package identity, and how to MSIX package your app.
Check out our getting started guides for step by step instructions of how to setup your environment, generate manifests, assets, and certificate, how to debug APIs that require package identity, and how to MSIX package your app.

<p>
<a href="./docs/guides/winui.md">
<img src="https://img.shields.io/badge/WinUI-Get%20Started-0078D4?style=for-the-badge&logo=windows&logoColor=white" alt="Get Started with WinUI">
</a>
<br />
<a href="./docs/guides/dotnet.md">
<img src="https://img.shields.io/badge/.NET/WPF/WinForms-Get%20Started-512BD4?style=for-the-badge&logo=dotnet&logoColor=white" alt="Get Started with .NET">
</a>
Expand Down Expand Up @@ -133,8 +142,9 @@ Checkout our getting started guides for step by step instructions of how to setu

Additional guides:
- [Packaging an EXE/CLI](/docs/guides/packaging-cli.md): step by step guide of packaging an existing exe/cli as MSIX
- [Sparse packaging](./docs/guides/sparse.md): give an unpackaged app package identity with an identity-only MSIX and external content
- [Shell completion](./docs/guides/shell-completion.md): tab completion for commands, options, and values in PowerShell, bash, zsh, and fish
- [.NET file-based apps](./docs/guides/dotnet-file-based.md): run a single `.cs` file with package identity, no project file or manifest required
- [MAUI (Windows)](./docs/guides/maui.md): package and sign .NET MAUI Windows outputs with the generated resizetizer manifest
- **Electron JS/TypeScript bindings** *(npm only)*: opt into auto-generated WinRT bindings via `winapp init --add-js-bindings`. See task-focused guides:
- [File picker](/docs/guides/electron/js-file-picker.md) — open native Windows file/folder pickers from the renderer
- [Toast notifications](/docs/guides/electron/js-notification.md) — show Windows toasts with actions
Expand All @@ -145,7 +155,7 @@ Additional guides:

### WinGet <img src="https://img.shields.io/winget/v/Microsoft.WinAppCli?style=for-the-badge&logo=windows&color=357EC7" alt="WinGet" height="24">

The easiest way to use the CLI is via WinGet (Windows Package Manager). In Terminal, simply run:
The easiest way to use the CLI is via WinGet (Windows Package Manager). In Terminal, run:

`winget install Microsoft.winappcli --source winget`

Expand Down Expand Up @@ -232,8 +242,6 @@ npx winapp --help
**App Identity & Debugging:**

- [`perf`](./docs/guides/winui-performance.md) - Record and query WinUI operation trees, layout/scrolling timings, and managed GC suspension context

- [`pack`](./docs/usage.md#pack) - Create MSIX packages from directories
- [`run`](./docs/usage.md#run) - Run app as a packaged application for debugging (loose layout registration)
- [`create-debug-identity`](./docs/usage.md#create-debug-identity) - Add sparse package identity to an existing exe
- [`embed-identity`](./docs/usage.md#embed-identity) - Connect an exe to its sparse identity package by embedding the `<msix>` element
Expand All @@ -242,8 +250,9 @@ npx winapp --help

See also: [Debugging Guide](./docs/debugging.md) — choosing between `winapp run` and `create-debug-identity`, IDE setup, and debugging scenarios.

**Certificates & Signing:**
**Packaging, Certificates & Signing:**

- [`pack`](./docs/usage.md#pack) - Create MSIX packages from a project or prepared directories
- [`cert`](./docs/usage.md#cert) - Generate and install development certificates
- [`sign`](./docs/usage.md#sign) - Sign MSIX packages and executables
- [`az-sign`](./docs/usage.md#az-sign) - Sign with Azure Trusted Signing (cloud-managed identity, no local PFX)
Expand All @@ -257,6 +266,12 @@ See also: [Security guidance](./docs/security.md) — what development certifica
- [`store`](./docs/usage.md#store) - Run Microsoft Store Developer CLI commands
- [`get-winapp-path`](./docs/usage.md#get-winapp-path) - Get paths to installed SDK components
- [`config`](./docs/usage.md#config) - Show or change your per-user winapp settings
- [`complete`](./docs/usage.md#shell-completion) - Tab completion for PowerShell, bash, zsh, and fish

**UI Automation & Sandbox:**

- [`ui`](./docs/usage.md#ui) - Inspect and interact with running app UIs through UI Automation (screenshots, element trees, clicks, and text input). See the [UI Automation guide](./docs/ui-automation.md)
- [`target`](./docs/usage.md#target) - Run commands, copy files, and capture the desktop inside Windows Sandbox. See [Windows Sandbox execution](./docs/sandbox-execution.md)
- [`devtools`](./docs/usage.md#devtools) - Inspect, comment on and live-edit a running WinUI app ([guide](./docs/guides/devtools.md))

**Discovery** (agent-first — built for AI coding agents to ground generated code in real metadata and real samples, and usable by hand):
Expand All @@ -267,11 +282,12 @@ See also: [Security guidance](./docs/security.md) — what development certifica
**Node.js/Electron Specific:**

- [`node create-addon`](./docs/usage.md#node-create-addon) - Generate native C# or C++ addons
- [`node generate-bindings`](./docs/usage.md#node-generate-bindings) - Generate JavaScript/TypeScript bindings for WinRT APIs
- [`node add-electron-debug-identity`](./docs/usage.md#node-add-electron-debug-identity) - Add identity to Electron processes
- [`node clear-electron-debug-identity`](./docs/usage.md#node-clear-electron-debug-identity) - Remove identity from Electron processes

The full CLI usage can be found here: [Documentation](/docs/usage.md)
Use winapp from JavaScript or TypeScript: [NPM programmatic guide](/docs/npm-usage.md)
Use WinApp CLI from JavaScript or TypeScript: [NPM programmatic guide](/docs/npm-usage.md)

## 🧾 Samples

Expand All @@ -287,6 +303,8 @@ This repository includes samples demonstrating how to use the CLI with various f
| [WinUI App](/samples/winui-app/README.md) | Packaged WinUI 3 app registered and launched via `winapp run <csproj>` |
| [WinUI Unpackaged App](/samples/winui-unpackaged-app/README.md) | Unpackaged WinUI 3 app launched via `winapp run <csproj>` |
| [WinUI Solution](/samples/winui-solution/README.md) | Multi-project `.sln` (app + test project) demonstrating `winapp run` solution-mode auto-selection |
| [C++ WinUI App](/samples/cpp-app-winui/README.md) | WinUI 3 window built in C++ with CMake, without XAML or MSBuild |
| [.NET MAUI App](/samples/maui-app/README.md) | .NET MAUI Windows project packaged and signed with `winapp` |
| [Electron](/samples/electron/README.md) | Electron Forge app with appxmanifest, assets, native C++ addon, and C# addon |
| [Electron WinML](/samples/electron-winml/README.md) | Electron app using Windows ML for image classification |
| [Node.js WinUI 3](/samples/node-winui/README.md) | Native WinUI 3 controls created directly from JavaScript |
Expand All @@ -299,11 +317,11 @@ This repository includes samples demonstrating how to use the CLI with various f

The **[WinApp VS Code Extension](https://marketplace.visualstudio.com/items?itemName=Microsoft-WinAppCLI.winapp)** brings WinApp CLI into Visual Studio Code. It can initialize projects, debug with package identity, package, sign, and more without leaving the editor. Press **F5** to launch your app with identity and automatically attach a debugger.

Install it from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=Microsoft-WinAppCLI.winapp). Checkout the repo for the WinApp VS Code Extension at [microsoft/WinAppVSCE](https://github.com/microsoft/WinAppVSCE).
Install it from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=Microsoft-WinAppCLI.winapp). Check out the repo for the WinApp VS Code Extension at [microsoft/WinAppVSCE](https://github.com/microsoft/WinAppVSCE).

## 🤖 Using with AI Coding Agents

winapp ships a single plugin (at [`plugins/winapp/`](./plugins/winapp/)) — an agent plus skills — that conforms to the [Agent Plugins 1.0](https://agent-plugins.org/) specification and is distributed to GitHub Copilot and Claude Code through their respective plugin marketplaces.
WinApp CLI ships a single plugin (at [`plugins/winapp/`](./plugins/winapp/)) — an agent plus skills — that conforms to the [Agent Plugins 1.0](https://agent-plugins.org/) specification and is distributed to GitHub Copilot and Claude Code through their respective plugin marketplaces.

**GitHub Copilot CLI** (global — works across all projects)
```bash
Expand All @@ -316,7 +334,7 @@ claude plugin marketplace add microsoft/WinAppCli
claude plugin install winappcli@winappcli
```

This gives agents full understanding of winapp commands, workflows, and troubleshooting.
This gives agents full understanding of WinApp CLI commands, workflows, and troubleshooting.


## 🔧 Feedback and Support
Expand Down
Loading
Loading