A complete, step-by-step guide using TubeDesk as a real-world example — from Partner Center setup to certification.
What Microsoft Store expects before you submit anything
Microsoft Store accepts two fundamentally different app types. Choosing the wrong one is the most common mistake and will cause validation failures. For an Electron app like TubeDesk, the correct choice is always MSIX or PWA app.
| App Type | Package Format | Code Signing | For Electron? |
|---|---|---|---|
| MSIX or PWA app | .appx / .msix |
Handled by Store | ✓ Correct |
| EXE or MSI app | .exe / .msi |
Must self-sign | ✗ Wrong type |
TubeDesk was initially registered in Partner Center as an "EXE or MSI app". This caused a code signing validation failure (Policy 10.2.9) because MSI packages must be self-signed with a trusted certificate. The fix is to delete the Win32 entry and create a new MSIX or PWA app — which accepts the APPX output from electron-builder and is signed by Microsoft during certification.
| Requirement | Details | Status for TubeDesk |
|---|---|---|
| Microsoft Partner Center account | Individual or company account at partner.microsoft.com | Active |
| App name reservation | Must be unique across the entire Store | TubeDesk reserved |
| APPX / MSIX package | Built on Windows via electron-builder | Built via GitHub Actions |
| Package identity match | publisher CN= and identityName must match Partner Center exactly | Confirmed |
| Privacy policy URL | Must be a publicly reachable URL | Needs hosting |
| Store screenshots | Minimum 1 screenshot at 1366×768 or larger | Needs preparation |
| Age rating questionnaire | Completed in Partner Center | Todo |
Enroll and confirm your publisher identity
If you do not yet have a Partner Center account, go to partner.microsoft.com and enroll. Individual accounts cost a one-time fee of approximately $19 USD. Once enrolled, your account will have a fixed set of identity values that you will use in every app you publish.
For individual accounts, the CN=... publisher value is the same for all apps you publish. You can find it at Partner Center → Account settings → Developer info under "Windows publisher ID".
Create the MSIX app entry in Partner Center
Before building anything, you must reserve your app name in Partner Center. This creates the app entry and generates the package identity values you will need for your build configuration. App names must be globally unique across the entire Microsoft Store.
Navigate to partner.microsoft.com/dashboard/apps-and-games and click New product.
This is critical. Do not choose "EXE or MSI app" for an Electron app built with electron-builder's appx target.
Type your desired name and click Check availability. A green checkmark confirms the name is free. Click Reserve product name.
"TubeDesk for Windows" was unavailable in the Store. After testing alternatives, "TubeDesk" was available and successfully reserved. Always have 2–3 name alternatives ready before you start.
Microsoft Store name uniqueness is global and case-insensitive. If your preferred name is taken, try shorter variants (e.g. "TubeDesk for Windows" → "TubeDesk"), add a geographic suffix, or use a completely different brand name. Once reserved, you have 3 months to submit the app or the reservation expires.
The exact values that must appear in your APPX manifest
After reserving the app name, Partner Center generates a unique package identity for your app. These values must match exactly in your package.json build configuration — any mismatch will cause the package to fail validation.
Go to Apps and games and click on your newly created app.
This page shows all the values you need for your package manifest.
You need Package/Identity/Name, Package/Identity/Publisher, and Package/Properties/PublisherDisplayName.
Align your electron-builder config with Partner Center identity
The build.appx section of package.json controls what goes into the AppxManifest.xml inside your package. Every field in this section must match the values from Partner Center's Product Identity page.
{
"build": {
"appId": "se.vinberg.tubedesk",
"productName": "TubeDesk", // must match reserved Store name
"appx": {
"applicationId": "TubeDesk",
"displayName": "TubeDesk", // Partner Center app name
"identityName": "youtube-desktop.TubeDesk", // Package/Identity/Name
"publisher": "CN=0A041C83-6229-4D05-83CD-8D8BF7D93CB5", // Package/Identity/Publisher
"publisherDisplayName": "youtube-desktop", // PublisherDisplayName
"backgroundColor": "#0f0f0f",
"languages": ["en-US"],
"artifactName": "TubeDesk-Store-${version}.${ext}"
}
}
}
| package.json field | AppxManifest.xml attribute | Source |
|---|---|---|
appx.identityName | Identity Name= | Partner Center → Product Identity |
appx.publisher | Identity Publisher= | Partner Center → Product Identity |
appx.publisherDisplayName | PublisherDisplayName | Partner Center → Product Identity |
appx.displayName | DisplayName | Must match reserved app name |
appx.applicationId | Application Id= | Your choice — keep stable after first publish |
appx.languages | Resources Language= | Use en-US for English-only apps |
TubeDesk originally had identityName: "youtube-desktop.TubeDeskForWindows" but Partner Center generated youtube-desktop.TubeDesk after the name reservation. This mismatch would have caused Store validation to reject the package. Always copy the exact value from the Product Identity page after reserving the name.
APPX must be built on Windows — use GitHub Actions or a local machine
TubeDesk uses a build-store job in its GitHub Actions workflow that automatically builds the APPX on every push to main. The workflow is already configured in the repository.
build-store:
runs-on: windows-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "22.12.0"
cache: npm
- run: npm ci
- run: npm run build:store
- uses: actions/upload-artifact@v4
with:
name: TubeDesk-Windows-Store-Package
path: |
dist/*.appx
dist/*.msix
if-no-files-found: error
After the workflow completes, download the TubeDesk-Windows-Store-Package artifact from the Actions tab. It contains the .appx file ready for upload.
npm ci
npm run build:store
# Output: dist/TubeDesk-Store-0.4.7.appx
Confirm identity values before uploading to Partner Center
Before uploading, it is good practice to inspect the generated AppxManifest.xml to confirm that all identity values match Partner Center. A mismatch at this stage will cause the submission to fail.
# Extract the APPX and read the manifest
Remove-Item -Recurse -Force .\dist\appx-unpacked -ErrorAction SilentlyContinue
Expand-Archive -Path .\dist\*.appx -DestinationPath .\dist\appx-unpacked -Force
Get-Content .\dist\appx-unpacked\AppxManifest.xml | Select-String "Identity|Publisher|DisplayName"
Identity Name="youtube-desktop.TubeDesk"
Publisher="CN=0A041C83-6229-4D05-83CD-8D8BF7D93CB5"
Version="0.4.7.0"
DisplayName="TubeDesk"
PublisherDisplayName="youtube-desktop"
The manifest values above match the Partner Center Product Identity page exactly. The package is ready for upload.
Fill in all required Partner Center sections and submit
With the APPX package ready, you can now create a submission in Partner Center. A submission requires several sections to be completed before you can submit to the Store.
Upload the .appx file. Partner Center will run automated validation checks. For a correctly configured MSIX package, all checks should pass. Common checks include malware scanning, silent install verification, and identity validation.
Provide the app's public-facing description. All text must be in English if your package language is en-US. Below is the listing used for TubeDesk.
| Field | Content |
|---|---|
| App name | TubeDesk |
| Short description | A clean, unofficial desktop wrapper for YouTube and YouTube Music on Windows. |
| Long description | TubeDesk gives YouTube and YouTube Music a dedicated desktop experience on Windows. It provides a polished app window, persistent sign-in, quick navigation, mini-player support, always-on-top mode, focus mode, system tray integration, mute controls, zoom controls, and keyboard shortcuts. |
| Category | Entertainment or Music |
| Privacy policy URL | Public URL hosting PRIVACY.md (e.g. GitHub raw or GitHub Pages) |
TubeDesk is not affiliated with Google or YouTube. The Store listing must include a clear disclaimer: "TubeDesk is an unofficial application and is not affiliated with, endorsed by, or approved by Google LLC or YouTube. YouTube and YouTube Music are trademarks of Google LLC."
At least one screenshot is required. Screenshots must be at least 1366×768 pixels. Any visible text in screenshots must be in English (matching the en-US package language). Recommended sizes are 1366×768, 1920×1080, or 2560×1440.
Complete the IARC questionnaire in Partner Center. For a YouTube wrapper with no user-generated content features, the rating will typically be Everyone (3+) or Everyone (7+) depending on your answers.
What happens after you click Submit
After submission, Microsoft runs both automated and manual certification checks. The typical timeline for a new app is 1–3 business days, though it can take up to 7 days in some cases.
| Certification stage | What is checked | Typical duration |
|---|---|---|
| Pre-processing | Package format, manifest validity, file integrity | Minutes |
| Automated testing | Windows App Certification Kit (WACK) tests, security scan | Hours |
| Content review | Store listing text, screenshots, age rating accuracy | 1–2 days |
| Publication | App goes live in the Store | After approval |
The report will identify the specific policy or test that failed.
Common failures include identity mismatches, missing privacy policy, or policy violations in the app description.
Bump the version in package.json, rebuild via GitHub Actions, and upload the new package in a new submission.
TubeDesk's Store URL is already live at apps.microsoft.com/detail/9NBB6K4WP0ZM — it will show the app once certification passes and the submission is published.
Everything that must be in order before submitting TubeDesk
appx.identityName = youtube-desktop.TubeDesk (matches Partner Center)appx.publisher = CN=0A041C83-6229-4D05-83CD-8D8BF7D93CB5appx.publisherDisplayName = youtube-desktopappx.displayName = TubeDeskappx.languages = ["en-US"]build-store job passes on mainTubeDesk-Windows-Store-Package artifact downloaded9NBB6K4WP0ZM).appx package uploaded to Packages sectionAll code configuration is complete and pushed to GitHub. The remaining steps are uploading the built APPX to Partner Center and filling in the submission metadata. After submission, Microsoft will review and publish TubeDesk within 1–3 business days.