Skip to main content
winapp CLI
$ cat ./winapp-cli.md

winapp CLI

winapp CLI is a command-line interface tool developed by Microsoft for managing and deploying Windows applications efficiently. The tool streamlines application packaging, installation, and distribution processes through automated scripting and batch operations. Key features include support for various Windows app formats (MSIX, MSI, EXE), silent installation capabilities, dependency management, and integration with enterprise deployment pipelines. It enables IT administrators and developers to automate app lifecycle management, perform bulk installations across multiple systems, and maintain consistent application environments. The CLI is particularly valuable for DevOps workflows, system administration tasks, and enterprise-scale application deployment scenarios where GUI-based tools are impractical.

1,304 stars 87 forks C# MIT License
microsoft 1026 Mar 7, 2026
Login with GitHub to like and favorite this CLI tool
$ git release --latest

Latest Releases

All releases

Version: 0.7.1 Commit: e3cd0b94f3e7b776ac51ba0564f4908094e979b5 <!-- Release notes generated using configuration in .github/release.yml at e3cd0b94f3e7b776ac51ba0564f4908094e979b5 --> What's Changed Other Changes
  • Bump version to 0.7.1 for development by @zateutsch in https://github.com/microsoft/winappCli/pull/933
  • Remove AI-generated PR descriptions by @nmetulev in https://github.com/microsoft/winappCli/pull/935
  • Deliver project context telemetry at its approved collection rate by @nmetulev in https://github.com/microsoft/winappCli/pull/940
  • Hide MSBuild property JSON from winapp run --aot output by @nmetulev in https://github.com/microsoft/winappCli/pull/936
Full Changelog: https://github.com/microsoft/winappCli/compare/v0.7.0...v0.7.1 --- Installation Options MSIX Installer (Recommended) 1. Download winappclix64.msix for x64 or winappcliarm64.msix for ARM64 2. Double-click to install 3. Automatically added to PATH Standalone CLI Binaries 1. Download winappcli-x64.zip for x64 or winappcli-arm64.zip for ARM64 2. Extract to your desired location 3. Add to PATH or run directly: winapp.exe NPM Package (for Electron or NodeJS) ``bash npm install microsoft-winappcli.tgz `` What's Included
  • MSIX installer packages (x64 and ARM64)
  • Standalone CLI binaries (x64 and ARM64)
  • NPM package for NodeJS/Electron integration

Version: 0.7.0 Commit: 2fdd020c5b7db093e8b3e317b22bdd8135a47e89 <!-- Release notes generated using configuration in .github/release.yml at 2fdd020c5b7db093e8b3e317b22bdd8135a47e89 --> What's Changed Other Changes
  • Update nuget network policy for release failure by @zateutsch in https://github.com/microsoft/winappCli/pull/740
  • Remove the thread-pool dependency from the PID-file tests by @azchohfi in https://github.com/microsoft/winappCli/pull/737
  • Verify build tools are Microsoft-signed before running them by @azchohfi in https://github.com/microsoft/winappCli/pull/738
  • Bump version to 0.6.1 for development by @zateutsch in https://github.com/microsoft/winappCli/pull/736
  • Add a consolidated security guidance page for developers by @azchohfi in https://github.com/microsoft/winappCli/pull/735
  • Invoke build tools directly in sample tests instead of Invoke-Expression by @azchohfi in https://github.com/microsoft/winappCli/pull/726
  • Document the internal NuGet feed needed to run tests on a corp machine by @azchohfi in https://github.com/microsoft/winappCli/pull/746
  • Use the preinstalled Rust toolchain instead of an unpinned third-party action by @azchohfi in https://github.com/microsoft/winappCli/pull/747
  • Say what the default certificate password actually means by @azchohfi in https://github.com/microsoft/winappCli/pull/745
  • Verify the gh download in both release stages, and bump it to 2.97.0 by @azchohfi in https://github.com/microsoft/winappCli/pull/748
  • Make dotnet run pass its arguments to the app, as it does without the package by @azchohfi in https://github.com/microsoft/winappCli/pull/724
  • Fix the two flaky tests taking down build-and-package by @azchohfi in https://github.com/microsoft/winappCli/pull/751
  • Add OneFuzz harness for ZipRangeExtractor and fix a bounds gap it found by @azchohfi in https://github.com/microsoft/winappCli/pull/765
  • Publish release symbols to symweb and MSDL by @azchohfi in https://github.com/microsoft/winappCli/pull/766
  • Publish NuGet from a separate pipeline so release.yml keeps CFSClean by @azchohfi in https://github.com/microsoft/winappCli/pull/750
  • Raise the build job timeout to 120 minutes by @azchohfi in https://github.com/microsoft/winappCli/pull/775
  • Bump version to 0.6.3 for development by @azchohfi in https://github.com/microsoft/winappCli/pull/772
  • Fix MS Learn docs generation: guides index rendering, broken security link, and ms.date churn by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/777
  • Explain 0x80073CF9 instead of surfacing a bare HRESULT by @azchohfi in https://github.com/microsoft/winappCli/pull/782
  • Omit registry URLs from the npm lockfile by @JamieMagee in https://github.com/microsoft/winappCli/pull/781
  • Limit template update checks to once a day for winapp new by @zateutsch in https://github.com/microsoft/winappCli/pull/757
  • Update winapp new to warn when scaffolding is taking longer than expected by @zateutsch in https://github.com/microsoft/winappCli/pull/756
  • Adopt Agent Plugins 1.0 for the winapp plugin by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/784
  • Make agent guidance audience-aware by @nmetulev in https://github.com/microsoft/winappCli/pull/786
  • Resolve $targetnametoken$ for WinAppSDK self-contained apps by @azchohfi in https://github.com/microsoft/winappCli/pull/793
  • Revert "Publish NuGet from a separate pipeline so release.yml keeps CFSClean" by @azchohfi in https://github.com/microsoft/winappCli/pull/795
  • Surface dotnet new post-action output under --verbose for new command by @zateutsch in https://github.com/microsoft/winappCli/pull/755
  • Count JS bindings recursively in the electron sample test by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/800
  • Test shared Windows app-model conformance vectors by @Evangelink in https://github.com/microsoft/winappCli/pull/797
  • Rehearse the release weekly from the release pipeline itself by @azchohfi in https://github.com/microsoft/winappCli/pull/783
  • feat: find-ui works offline — bake the corpus into the binary, refresh cache every 24h by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/770
  • Ship the UI Automation engine as its own NuGet packages by @azchohfi in https://github.com/microsoft/winappCli/pull/799
  • Support the experimental Reactor templates in winapp new by @azchohfi in https://github.com/microsoft/winappCli/pull/814
  • Add bounded project context telemetry by @nmetulev in https://github.com/microsoft/winappCli/pull/785
  • Re-land the NuGet-client migration on stable NuGet 7.9.0 by @azchohfi in https://github.com/microsoft/winappCli/pull/761
  • feat: define the shared WinUI sample index contract (#703 Phase 0) by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/806
  • Ship the WinUI 3 Roslyn analyzer as a standalone NuGet package by @zateutsch in https://github.com/microsoft/winappCli/pull/759
  • Handle required architecture publish profiles in winapp run by @nmetulev in https://github.com/microsoft/winappCli/pull/788
  • Cooperative UI turns for concurrent winapp ui agents by @nmetulev in https://github.com/microsoft/winappCli/pull/767
  • Fix design-time XAML compile items and defer to WinUI's own target by @azchohfi in https://github.com/microsoft/winappCli/pull/826
  • Run a .NET file-based app with package identity by @azchohfi in https://github.com/microsoft/winappCli/pull/794
  • Keep short recordings from ending before the first frame by @azchohfi in https://github.com/microsoft/winappCli/pull/830
  • Stream project restore progress during winapp run by @nmetulev in https://github.com/microsoft/winappCli/pull/789
  • feat: add winapp find-api — local Windows/WinRT API metadata search (port of winmd) by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/744
  • fix(find-ui): Gallery corpus is upstream-only; ten controls that returned no code now do by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/815
  • Never serve sample code that still contains a substitution placeholder by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/852
  • Stop reporting service connections as missing when the build identity cannot see them by @azchohfi in https://github.com/microsoft/winappCli/pull/850
  • Run and automate apps in persistent Windows execution targets by @nmetulev in https://github.com/microsoft/winappCli/pull/779
  • Avoid re-resolving one-shot UI elements by @nmetulev in https://github.com/microsoft/winappCli/pull/841
  • Auto-generated baselines by 1ES Pipeline Templates by @microsoft-github-policy-service[bot] in https://github.com/microsoft/winappCli/pull/858
  • Fail the build when a shipped binary is unsigned by @azchohfi in https://github.com/microsoft/winappCli/pull/861
  • Exercise the federated release connections instead of inspecting them by @azchohfi in https://github.com/microsoft/winappCli/pull/860
  • Add typed UI geometry context by @nmetulev in https://github.com/microsoft/winappCli/pull/844
  • Fix incomplete UI Automation descendant searches by @nmetulev in https://github.com/microsoft/winappCli/pull/842
  • Stop filing issues for routine find-ui corpus drift by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/825
  • Add scoped and typed UI Automation queries by @nmetulev in https://github.com/microsoft/winappCli/pull/848
  • Expose whole-document TextPattern formatting in get-property by @nmetulev in https://github.com/microsoft/winappCli/pull/847
  • Upgrade SkiaSharp and Svg.Skia past the libexpat CVE by @azchohfi in https://github.com/microsoft/winappCli/pull/864
  • Stop shipping IntelliSense XML the CLI cannot read by @azchohfi in https://github.com/microsoft/winappCli/pull/867
  • Baseline BinSkim BA2007 for libHarfBuzzSharp.dll by @azchohfi in https://github.com/microsoft/winappCli/pull/868
  • Update CsWin32 and analyzer dependencies while preserving compiler compatibility by @nmetulev in https://github.com/microsoft/winappCli/pull/869
  • Add winapp run --aot by @nmetulev in https://github.com/microsoft/winappCli/pull/817
  • Add deterministic explicit UI invoke actions by @nmetulev in https://github.com/microsoft/winappCli/pull/846
  • Support packaged dotnet run for .NET file-based apps by @azchohfi in https://github.com/microsoft/winappCli/pull/874
  • Pack project-mode support by @zateutsch in https://github.com/microsoft/winappCli/pull/829
  • Update banner to WinUI blue gradient by @niels9001 in https://github.com/microsoft/winappCli/pull/894
  • Publish PR artifacts early and reuse them across validation by @nmetulev in https://github.com/microsoft/winappCli/pull/870
  • Add opt-in manual prerelease publish for library NuGet packages by @zateutsch in https://github.com/microsoft/winappCli/pull/851
  • Add a contributor PR lifecycle skill by @nmetulev in https://github.com/microsoft/winappCli/pull/896
  • Add local code-quality pre-check skill for csharp-code-quality rules by @zateutsch in https://github.com/microsoft/winappCli/pull/893
  • Expose the working directory in target snapshots by @nmetulev in https://github.com/microsoft/winappCli/pull/882
  • Make cert install accept a public .cer (issue #838) by @zateutsch in https://github.com/microsoft/winappCli/pull/891
  • Fix cert generate --manifest silently falling back to user name (#839) by @zateutsch in https://github.com/microsoft/winappCli/pull/890
  • Correct dotnet output-draining documentation by @nmetulev in https://github.com/microsoft/winappCli/pull/907
  • Fix screenshot host-path reporting and composite help by @nmetulev in https://github.com/microsoft/winappCli/pull/884
  • Fix empty UI values falling through to accessibility labels by @nmetulev in https://github.com/microsoft/winappCli/pull/878
  • Reject malformed publisher DNs in cert generate (#845) by @zateutsch in https://github.com/microsoft/winappCli/pull/892
  • docs: link security guidance from README by @zateutsch in https://github.com/microsoft/winappCli/pull/904
  • fix(find-ui): return samples in full instead of truncating them by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/901
  • Fix find-api --filter example that returned zero matches by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/905
  • Clarify blocked and ready-for-review lifecycle states by @nmetulev in https://github.com/microsoft/winappCli/pull/915
  • Fix get-focused ownership for Sandbox controls without a process ID by @nmetulev in https://github.com/microsoft/winappCli/pull/880
  • find-ui: report "embedded" corpus for core-only searches by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/920
  • Reject terminal-error Windows Sandbox viewers by @nmetulev in https://github.com/microsoft/winappCli/pull/889
  • Report the public default password in cert generate --json by @azchohfi in https://github.com/microsoft/winappCli/pull/916
  • Fix incorrect x:Bind analyzer diagnostics by @zateutsch in https://github.com/microsoft/winappCli/pull/921
  • Require a Microsoft organization on build-tool signers, and run what was verified by @azchohfi in https://github.com/microsoft/winappCli/pull/922
  • Fix composite screenshot output ignoring --quiet by @nmetulev in https://github.com/microsoft/winappCli/pull/919
  • Consume the WinUI Gallery published sample index by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/895
  • Reject empty publisher when manifest is specified by @rksharma-owg in https://github.com/microsoft/winappCli/pull/924
  • Activate target windows and verify ui focus outcomes by @nmetulev in https://github.com/microsoft/winappCli/pull/881
  • Rehearse the nuget.org network path in the weekly release rehearsal by @azchohfi in https://github.com/microsoft/winappCli/pull/927
  • Skip Rust CLI scan in Component Detection to avoid crates.io probe by @zateutsch in https://github.com/microsoft/winappCli/pull/926
  • Use fixed user-profile state for UI and Sandbox by @nmetulev in https://github.com/microsoft/winappCli/pull/931
  • Reduce Windows Sandbox command latency by @nmetulev in https://github.com/microsoft/winappCli/pull/930
  • Skip exact Win32 error-code assertions on Azure DevOps agents by @zateutsch in https://github.com/microsoft/winappCli/pull/934
New Contributors
  • @JamieMagee made their first contribution in https://github.com/microsoft/winappCli/pull/781
  • @Evangelink made their first contribution in https://github.com/microsoft/winappCli/pull/797
  • @rksharma-owg made their first contribution in https://github.com/microsoft/winappCli/pull/924
Full Changelog: https://github.com/microsoft/winappCli/compare/v0.6.1...v0.7.0 --- Installation Options MSIX Installer (Recommended) 1. Download winappclix64.msix for x64 or winappcliarm64.msix for ARM64 2. Double-click to install 3. Automatically added to PATH Standalone CLI Binaries 1. Download winappcli-x64.zip for x64 or winappcli-arm64.zip for ARM64 2. Extract to your desired location 3. Add to PATH or run directly: winapp.exe NPM Package (for Electron or NodeJS) ``bash npm install microsoft-winappcli.tgz `` What's Included
  • MSIX installer packages (x64 and ARM64)
  • Standalone CLI binaries (x64 and ARM64)
  • NPM package for NodeJS/Electron integration

Version: 0.6.1Commit: d9a8d0f8ef192fa3ce07febdbe178606ea5fb4f5
<!-- Release notes generated using configuration in .github/release.yml at d9a8d0f8ef192fa3ce07febdbe178606ea5fb4f5 -->
Full Changelog: https://github.com/microsoft/winappCli/compare/v0.6.0...v0.6.1
---
Installation Options
MSIX Installer (Recommended)1. Download winappclix64.msix for x64 or winappcliarm64.msix for ARM642. Double-click to install3. Automatically added to PATH
Standalone CLI Binaries1. Download winappcli-x64.zip for x64 or winappcli-arm64.zip for ARM642. Extract to your desired location3. Add to PATH or run directly: winapp.exe
NPM Package (for Electron or NodeJS)``bashnpm install microsoft-winappcli.tgz``
What's Included
  • MSIX installer packages (x64 and ARM64)
  • Standalone CLI binaries (x64 and ARM64)
  • NPM package for NodeJS/Electron integration

Version: 0.6.0 Commit: b7494ed3b324d6e378cb17b477f2b1a9729765d0 <!-- Release notes generated using configuration in .github/release.yml at b7494ed3b324d6e378cb17b477f2b1a9729765d0 --> What's Changed New Features
  • Fix MSIX bundle version generation by @CarlosNihelton in https://github.com/microsoft/winappCli/pull/678
  • Add Node.js sample using a native WinUI 3 Application and Window by @lei9444 in https://github.com/microsoft/winappCli/pull/624
Other Changes
  • Bump version to 0.5.1 for development by @zateutsch in https://github.com/microsoft/winappCli/pull/682
  • Azure artifact signing with new az-sign command by @zateutsch in https://github.com/microsoft/winappCli/pull/595
  • Backfill MS Learn doc fixes and add validation gate by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/685
  • pr-review: rebuild the skill at a third the size, and stop it driving scope creep by @nmetulev in https://github.com/microsoft/winappCli/pull/696
  • Add winapp-pr, a helper for installing CLI MSIX builds from PRs by @nmetulev in https://github.com/microsoft/winappCli/pull/697
  • Fix winapp-pr web installer closing the caller's terminal by @nmetulev in https://github.com/microsoft/winappCli/pull/698
  • Offer to set up the GitHub CLI in winapp-pr instead of just demanding it by @nmetulev in https://github.com/microsoft/winappCli/pull/700
  • Offer a one-command build install in the PR metrics comment by @nmetulev in https://github.com/microsoft/winappCli/pull/699
  • ci: make sample-test Pester install resilient to PSGallery flake by @nmetulev in https://github.com/microsoft/winappCli/pull/701
  • Add winapp-pr -Update, -Help, and build freshness in the picker by @nmetulev in https://github.com/microsoft/winappCli/pull/702
  • Add .csproj "project mode" to winapp run by @nmetulev in https://github.com/microsoft/winappCli/pull/612
  • fix(winapp-pr): paginate the artifacts query so a busy run's package is findable by @nmetulev in https://github.com/microsoft/winappCli/pull/705
  • Add agent-readable UI recording artifacts by @nmetulev in https://github.com/microsoft/winappCli/pull/690
  • Pin GitHub Actions to full-length commit SHAs by @OssSecurityBot in https://github.com/microsoft/winappCli/pull/707
  • Add support for sparse packaging workflows by @zateutsch in https://github.com/microsoft/winappCli/pull/607
  • Unify Copilot and Claude skills into a single shared plugin by @nmetulev in https://github.com/microsoft/winappCli/pull/631
  • Add winapp-maui skill for the MAUI resizetizer manifest dependency by @pictos in https://github.com/microsoft/winappCli/pull/610
  • Make winapp-pr usable immediately after -AddToPath by @nmetulev in https://github.com/microsoft/winappCli/pull/720
  • Add winapp-pr -Uninstall and bound the download cache by @nmetulev in https://github.com/microsoft/winappCli/pull/721
  • [s360-breeze-toolkit: SFI-ES-4.2.4] Use internal npm feed in Azure Pipelines by @azchohfi in https://github.com/microsoft/winappCli/pull/715
  • feat: add winapp find-ui — WinUI control & sample search (Gallery + Toolkit + Reactor) by @Jaylyn-Barbee in https://github.com/microsoft/winappCli/pull/681
  • winapp new command by @zateutsch in https://github.com/microsoft/winappCli/pull/686
  • Invoke the CLI directly instead of building command strings in package-msix.ps1 by @azchohfi in https://github.com/microsoft/winappCli/pull/725
  • Show folder-mode discovery breadcrumb only at debug verbosity by @azchohfi in https://github.com/microsoft/winappCli/pull/730
  • Cover NuGet and npm in Dependabot, and use the CodeQL security-extended suite by @azchohfi in https://github.com/microsoft/winappCli/pull/728
  • Use -EncodedCommand for the elevated Developer Mode script by @azchohfi in https://github.com/microsoft/winappCli/pull/727
  • Map the remaining winapp run options to MSBuild properties by @azchohfi in https://github.com/microsoft/winappCli/pull/731
  • Fix flaky tree-kill test by retrying the PID file read by @azchohfi in https://github.com/microsoft/winappCli/pull/732
New Contributors
  • @CarlosNihelton made their first contribution in https://github.com/microsoft/winappCli/pull/678
  • @OssSecurityBot made their first contribution in https://github.com/microsoft/winappCli/pull/707
  • @pictos made their first contribution in https://github.com/microsoft/winappCli/pull/610
Full Changelog: https://github.com/microsoft/winappCli/compare/v0.5.0...v0.6.0 --- Installation Options MSIX Installer (Recommended) 1. Download winappclix64.msix for x64 or winappcliarm64.msix for ARM64 2. Double-click to install 3. Automatically added to PATH Standalone CLI Binaries 1. Download winappcli-x64.zip for x64 or winappcli-arm64.zip for ARM64 2. Extract to your desired location 3. Add to PATH or run directly: winapp.exe NPM Package (for Electron or NodeJS) ``bash npm install microsoft-winappcli.tgz `` What's Included
  • MSIX installer packages (x64 and ARM64)
  • Standalone CLI binaries (x64 and ARM64)
  • NPM package for NodeJS/Electron integration

Version: 0.5.0 Commit: fd7cb6f235fa54dd2c6e26386e65e967a2c8797a New Features
  • Add ui record command for MP4 capture (#599) — Users can now record app interactions and output them as MP4 files, enhancing the ability to create tutorials and demos directly from winapp CLI.
  • Add ui touch and ui pen commands (#600) — New commands allow for simulation of touch and pen inputs, making it easier to automate scenarios for touch-enabled applications.
  • Add --allow-system-keys to ui send-keys (#603) — This option enables the use of system keys in keyboard simulations, broadening the range of inputs that can be automated in applications.
Breaking Changes
  • Standardize UI coordinate terminology (#660) — The term "app" has been replaced with "screen" in the coordinate definitions. Users should adjust their coordinate references in scripts and documentation to accommodate this change.
Bug Fixes
  • Fix ui send-keys --via send-input silently dropping characters (#657) — This fix ensures all characters are sent accurately, particularly for longer texts, improving automation reliability.
  • Fix ui send-keys --via post-message silently dropping input (#666) — Input handling has been improved to prevent missed key events during automation, enhancing overall functionality.
  • Fix misleading code coverage measurement (#630) — Addresses prior issues with coverage reporting, providing more accurate information for test evaluations.
Documentation
  • Add native PowerShell winget cmdlet to README.md (#594) — Updated documentation now includes guidance for using the native PowerShell winget cmdlet, helping users understand package management more effectively.
Infrastructure
  • Bump the npmandyarn group across 1 directory with 2 updates (#675) — This update ensures that the tool benefits from the latest features and fixes available in the npm and Yarn ecosystems.
--- Installation Options MSIX Installer (Recommended) 1. Download winappclix64.msix for x64 or winappcliarm64.msix for ARM64 2. Double-click to install 3. Automatically added to PATH Standalone CLI Binaries 1. Download winappcli-x64.zip for x64 or winappcli-arm64.zip for ARM64 2. Extract to your desired location 3. Add to PATH or run directly: winapp.exe NPM Package (for Electron or NodeJS) ``bash npm install microsoft-winappcli.tgz `` What's Included
  • MSIX installer packages (x64 and ARM64)
  • Standalone CLI binaries (x64 and ARM64)
  • NPM package for NodeJS/Electron integration

Installation

npm install @microsoft/winappcli --save-dev
winget install Microsoft.winappcli --source winget
$ tail ./comments.log

Comments (0)

Login with GitHub to post a comment
No comments yet. Be the first to comment!