- Microsoft Store Developer CLI (msstore)
- The Microsoft Store Developer CLI (
- msstore
- ) is a cross-platform command-line interface for publishing and managing applications in the Microsoft Store. It integrates with Partner Center APIs and supports automated publishing workflows for various application types.
- When to Use This Skill
- Use this skill when you need to:
- Configure Store credentials for API access
- List applications in your Store account
- Check the status of a submission
- Publish submissions to the Store
- Package applications for Store submission
- Initialize projects for Store publishing
- Manage package flights (beta testing)
- Set up CI/CD pipelines for automated Store publishing
- Manage gradual rollouts of submissions
- Update submission metadata programmatically
- Prerequisites
- Windows 10+, macOS, or Linux
- .NET 9 Desktop Runtime (Windows) or .NET 9 Runtime (macOS/Linux)
- Partner Center account with appropriate permissions
- Azure AD app registration with Partner Center API access
- msstore CLI installed via one of these methods:
- Microsoft Store
- :
- Download
- WinGet
- :
- winget install "Microsoft Store Developer CLI"
- Manual
- Download from
GitHub Releases
Partner Center Setup
Before using msstore, you need to create an Azure AD application with Partner Center access:
Go to
Partner Center
Navigate to
Account settings
User management
Azure AD applications Create a new application and note the Tenant ID , Client ID , and Client Secret Grant the application appropriate permissions (Manager or Developer role) Core Commands Reference info - Print Configuration Display the current credential configuration. msstore info Options: Option Description -v, --verbose Print verbose output reconfigure - Configure Credentials Configure or update Microsoft Store API credentials. msstore reconfigure [ options ] Options: Option Description -t, --tenantId Azure AD Tenant ID -s, --sellerId Partner Center Seller ID -c, --clientId Azure AD Application Client ID -cs, --clientSecret Client Secret for authentication -ct, --certificateThumbprint Certificate thumbprint (alternative to client secret) -cfp, --certificateFilePath Certificate file path (alternative to client secret) -cp, --certificatePassword Certificate password --reset Reset credentials without full reconfiguration Examples:
Configure with client secret
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --clientSecret $CLIENT_SECRET
Configure with certificate
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --certificateFilePath ./cert.pfx --certificatePassword MyPassword settings - CLI Settings Change settings of the Microsoft Store Developer CLI. msstore settings [ options ] Options: Option Description -t, --enableTelemetry Enable (true) or disable (false) telemetry Set Publisher Display Name msstore settings setpdn < publisherDisplayName
Sets the default Publisher Display Name for the init command. apps - Application Management List and retrieve application information. List Applications msstore apps list Lists all applications in your Partner Center account. Get Application Details msstore apps get < productId
Arguments: Argument Description productId The Store product ID (e.g., 9NBLGGH4R315) Example:
Get details of a specific app
- msstore apps get 9NBLGGH4R315
- submission - Submission Management
- Manage Store submissions.
- Sub-Command
- Description
- status
- Get submission status
- get
- Get submission metadata and package info
- getListingAssets
- Get listing assets of a submission
- updateMetadata
- Update submission metadata
- poll
- Poll submission status until complete
- publish
- Publish a submission
- delete
- Delete a submission
- Get Submission Status
- msstore submission status
- <
- productId
- >
- Get Submission Details
- msstore submission get
- <
- productId
- >
- Update Metadata
- msstore submission updateMetadata
- <
- productId
- >
- <
- metadata
- >
- Where
- is a JSON string with the updated metadata. Because JSON contains characters that shells interpret (quotes, braces, etc.), you must quote and/or escape the value appropriately:
- Bash/Zsh
-
- Wrap the JSON in single quotes so the shell passes it through literally.
- msstore submission updateMetadata 9NBLGGH4R315
- '{"description":"My updated app"}'
- PowerShell
-
- Use single quotes (or escape double quotes inside a double-quoted string).
- msstore submission updateMetadata 9NBLGGH4R315
- '{"description":"My updated app"}'
- cmd.exe
- Escape each inner double quote with a backslash.
msstore submission updateMetadata 9NBLGGH4R315 "{\"description\":\"My updated app\"}"
Tip:
For complex or multi-line metadata, save the JSON to a file and pass its contents instead to avoid quoting issues:
msstore submission updateMetadata 9NBLGGH4R315
"
$(
cat
metadata.json
)
"
Options:
Option
Description
-s, --skipInitialPolling
Skip initial status polling
Publish Submission
msstore submission publish
<
productId
Poll Submission msstore submission poll < productId
Polls until the submission status is PUBLISHED or FAILED. Delete Submission msstore submission delete < productId
Options: Option Description --no-confirm Skip confirmation prompt init - Initialize Project for Store Initialize a project for Microsoft Store publishing. Automatically detects project type and configures Store identity. msstore init < pathOrUrl
[ options ] Arguments: Argument Description pathOrUrl Project directory path or PWA URL Options: Option Description -n, --publisherDisplayName Publisher Display Name --package Also package the project --publish Package and publish (implies --package) -f, --flightId Publish to a specific flight -prp, --packageRolloutPercentage Gradual rollout percentage (0-100) -a, --arch Architecture(s): x86, x64, arm64 -o, --output Output directory for packages -ver, --version Version to use when building Supported Project Types: Windows App SDK / WinUI 3 UWP .NET MAUI Flutter Electron React Native for Desktop PWA (Progressive Web Apps) Examples:
Initialize WinUI project
msstore init ./my-winui-app
Initialize PWA
msstore init https://contoso.com --output ./pwa-package
Initialize and publish
msstore init ./my-app --publish package - Package for Store Package an application for Microsoft Store submission. msstore package < pathOrUrl
[ options ] Arguments: Argument Description pathOrUrl Project directory path or PWA URL Options: Option Description -o, --output Output directory for the package -a, --arch Architecture(s): x86, x64, arm64 -ver, --version Version for the package Examples:
Package for default architecture
msstore package ./my-app
Package for multiple architectures
msstore package ./my-app --arch x64,arm64 --output ./packages
Package with specific version
msstore package ./my-app --version 1.2 .3.0 publish - Publish to Store Publish an application to the Microsoft Store. msstore publish < pathOrUrl
[ options ] Arguments: Argument Description pathOrUrl Project directory path or PWA URL Options: Option Description -i, --inputFile Path to existing .msix or .msixupload file -id, --appId Application ID (if not initialized) -nc, --noCommit Keep submission in draft state -f, --flightId Publish to a specific flight -prp, --packageRolloutPercentage Gradual rollout percentage (0-100) Examples:
Publish project
msstore publish ./my-app
Publish existing package
msstore publish ./my-app --inputFile ./packages/MyApp.msixupload
Publish as draft
msstore publish ./my-app --noCommit
Publish with gradual rollout
msstore publish ./my-app --packageRolloutPercentage 10 flights - Package Flight Management Manage package flights (beta testing groups). Sub-Command Description list List all flights for an app get Get flight details delete Delete a flight create Create a new flight submission Manage flight submissions List Flights msstore flights list < productId
Get Flight Details msstore flights get < productId
< flightId
Create Flight msstore flights create < productId
< friendlyName
--group-ids < group-ids
Options: Option Description -g, --group-ids Flight group IDs (comma-separated) -r, --rank-higher-than Flight ID to rank higher than Delete Flight msstore flights delete < productId
< flightId
Flight Submissions
Get flight submission
msstore flights submission get < productId
< flightId
Publish flight submission
msstore flights submission publish < productId
< flightId
Check flight submission status
msstore flights submission status < productId
< flightId
Poll flight submission
msstore flights submission poll < productId
< flightId
Delete flight submission
msstore flights submission delete < productId
< flightId
Flight Rollout Management
Get rollout status
msstore flights submission rollout get < productId
< flightId
Update rollout percentage
msstore flights submission rollout update < productId
< flightId
< percentage
Halt rollout
msstore flights submission rollout halt < productId
< flightId
Finalize rollout (100%)
msstore flights submission rollout finalize < productId
< flightId
Common Workflows Workflow 1: First-Time Store Setup
1. Install the CLI
winget install "Microsoft Store Developer CLI"
2. Configure credentials (get these from Partner Center)
msstore reconfigure --tenantId $TENANT_ID --sellerId $SELLER_ID --clientId $CLIENT_ID --clientSecret $CLIENT_SECRET
3. Verify configuration
msstore info
4. List your apps to confirm access
msstore apps list Workflow 2: Initialize and Publish New App
1. Navigate to project
cd my-winui-app
2. Initialize for Store (creates/updates app identity)
msstore init .
3. Package the application
msstore package . --arch x64,arm64
4. Publish to Store
msstore publish .
5. Check submission status
msstore submission status < productId
Workflow 3: Update Existing App
1. Build your updated application
dotnet publish -c Release
2. Package and publish
msstore publish ./my-app
Or publish from existing package
msstore publish ./my-app --inputFile ./artifacts/MyApp.msixupload Workflow 4: Gradual Rollout
1. Publish with initial rollout percentage
msstore publish ./my-app --packageRolloutPercentage 10
2. Monitor and increase rollout
msstore submission poll < productId
3. (After validation) Finalize to 100%
This completes via Partner Center or submission update
Workflow 5: Beta Testing with Flights
1. Create a flight group in Partner Center first
Then create a flight
msstore flights create < productId
"Beta Testers" --group-ids "group-id-1,group-id-2"
2. Publish to the flight
msstore publish ./my-app --flightId < flightId
3. Check flight submission status
msstore flights submission status < productId
< flightId
4. After testing, publish to production
msstore publish ./my-app Workflow 6: CI/CD Pipeline Integration
GitHub Actions example
name : Publish to Store on : release : types : [ published ] jobs : publish : runs-on : windows - latest steps : - uses : actions/checkout@v4 - name : Setup .NET uses : actions/setup - dotnet@v4 with : dotnet-version : '9.0.x' - name : Install msstore CLI run : winget install "Microsoft Store Developer CLI" - - accept - package - agreements - - accept - source - agreements - name : Configure Store credentials run : | msstore reconfigure --tenantId ${{ secrets.TENANT_ID }} --sellerId ${{ secrets.SELLER_ID }} --clientId ${{ secrets.CLIENT_ID }} --clientSecret ${{ secrets.CLIENT_SECRET }} - name : Build application run : dotnet publish - c Release - name : Publish to Store run : msstore publish ./src/MyApp Integration with winapp CLI The winapp CLI (v0.2.0+) integrates with msstore via the winapp store subcommand:
These commands are equivalent:
msstore reconfigure --tenantId xxx --clientId xxx --clientSecret xxx winapp store reconfigure --tenantId xxx --clientId xxx --clientSecret xxx
List apps
msstore apps list winapp store apps list
Publish
msstore publish ./my-app
winapp store publish ./my-app
Use
winapp store
when you want a unified CLI experience for both packaging and publishing.
Troubleshooting
Issue
Solution
Authentication failed
Verify credentials with
msstore info
; re-run
msstore reconfigure
App not found
Ensure the product ID is correct; run
msstore apps list
to verify
Insufficient permissions
Check Azure AD app role in Partner Center (needs Manager or Developer)
Package validation failed
Ensure package meets Store requirements; check Partner Center for details
Submission stuck
Run
msstore submission poll