How to publish a Flutter Windows app to the Microsoft Store

Reserve the name in Partner Center, copy three identity values into msix_config in your pubspec.yaml, and run dart run msix:create --store. That gives you an .msix that Microsoft signs and hosts. The first submission has to be made by hand in Partner Center, and after that you can ship each update from StoreFast, Codemagic or Microsoft's msstore CLI.

Use the msix package with store set to build the .msix, make the first submission in Partner Center, then automate the updates.

  • The msix package is what Flutter's own docs point to for packaging. It runs flutter build windows and packs the result in one command.
  • You don't need a code signing certificate. Microsoft re-signs MSIX packages when it publishes them.
  • The identity values in msix_config have to match Partner Center exactly, and the last part of the version has to be 0.
  • StoreFast publishes every update after the first from the dashboard, GitHub Actions, the API or a coding agent, with What's new translated into each listing language.

How to publish a Flutter app to the Microsoft Store

  1. 1

    Reserve the name

    You need a Partner Center developer account. Click New product, choose MSIX or PWA app and reserve your app's name. Microsoft removes a reservation you don't use within three months. Then open Product identity under Product management. You'll copy three values from there in the next step.

  2. 2

    Add the msix package

    Add msix as a dev dependency with flutter pub add --dev msix, then add an msix_config section to pubspec.yaml.

    version: 1.4.0+12
    
    dev_dependencies:
      msix: ^3.18.0
    
    msix_config:
      display_name: My App
      identity_name: 12345Contoso.MyApp          # Package/Identity/Name
      publisher: CN=A1B2C3D4-E5F6-...           # Package/Identity/Publisher
      publisher_display_name: Contoso           # Package/Properties/PublisherDisplayName
      msix_version: 1.4.0.0
      logo_path: assets\logo.png
      capabilities: internetClient
      output_path: build\store
      output_name: MyApp
      store: true
    msix_configWhere it comes from
    identity_namePackage/Identity/Name on the Product identity page
    publisherPackage/Identity/Publisher, the value that starts with CN=
    publisher_display_namePackage/Properties/PublisherDisplayName
    msix_versionFour numbers ending in 0. See the version rules below.
    storetrue makes a package for the Store, the same as passing --store

    Microsoft says these values are case-sensitive and that spaces and punctuation have to match too. With store set, msix stops with an error if identity_name, publisher or publisher_display_name is missing, and the message tells you where to find each one in Partner Center. List only the capabilities your app uses. output_path and output_name are optional, and they put the package at a path your scripts can rely on.

  3. 3

    Build the .msix

    On Windows, run the create command. It runs flutter build windows first, then packs the release build into an .msix for x64 unless you set architecture to arm64.

    dart run msix:create
    # or, without store: true in msix_config
    dart run msix:create --store

    With store set, msix doesn't sign the package, since Microsoft signs it after certification. Without it, msix signs with its own test certificate, which is handy for installing a build on your own PC first. If you want both, leave store out of msix_config and pass --store only for the Store build. Flutter's docs also suggest running the Windows App Certification Kit on the package before you submit.

  4. 4

    Make the first submission in Partner Center

    Click Start submission on the app's overview page and fill in pricing and availability, properties, the age ratings questionnaire, the package, the Store listing and submission options. The listing needs a description and at least one screenshot. Because msix declares runFullTrust, a restricted capability, the Submission options page asks why your app needs it. Then click Submit for certification. Pricing, availability, age ratings and category carry over to later submissions.

    This step can't be automated. Microsoft's msstore CLI and its submission API both need an existing first submission, Codemagic's docs say the first version has to be submitted manually, and StoreFast works the same way.

  5. 5

    Publish updates

    Raise the version, run msix:create again and send the new .msix to the Store. You can start a new submission in Partner Center and upload it on the Packages page, or use one of the options below.

Version numbers for Flutter Store builds

An MSIX version has four numbers. Microsoft's package rules reserve the fourth one for the Store, so it has to be 0 when you build, and the first number can't be 0. Customers get the highest version available to them, so each update needs a higher version than the one that's live.

msix picks the version from the first of these it finds: the --version flag, msix_version in msix_config, then the version in pubspec.yaml. From pubspec.yaml it takes the first three numbers and adds a 0, so version: 1.4.0+12 becomes 1.4.0.0 and the build number after the + is dropped. If you set msix_version, remember to raise it with every release, or leave it out and let pubspec.yaml drive it.

How to publish Flutter updates with StoreFast

Once the first submission is live, connect your Partner Center account and your app shows up in StoreFast. Every route below checks the same things before anything reaches Microsoft: the package name matches the app, the version is higher than the live one, and it ends in 0.

  • Dashboard. Drop the .msix on your app's page, write What's new once in English and click Translate all to get it in every listing language. Then submit it. The publishing guide walks through it.
  • GitHub Action. Add legendaryspy/storefast-publish@v1 after the step that runs msix:create. It reads the version from the package and takes the notes from your CHANGELOG.md or GitHub release.
  • API. The REST API does the same from any CI system or script: start a release, upload the package in parts, write the notes and submit.
  • Coding agent. Connect Claude Code, Cursor or Codex to the MCP server and ask it to publish the .msix. It shows you the update and waits for your yes before it submits.

This workflow builds a Flutter app on a Windows runner and hands the package to StoreFast when you push a tag. By default the update waits on your dashboard until you click Submit. Add submit: true to send it straight to certification.

name: Microsoft Store

on:
  push:
    tags: ['v*']

jobs:
  store:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v4

      - uses: subosito/flutter-action@v2
        with:
          channel: stable

      - run: flutter pub get

      # runs flutter build windows, then packs build\store\MyApp.msix
      - run: dart run msix:create --store

      - name: Publish to the Microsoft Store
        uses: legendaryspy/storefast-publish@v1
        with:
          api-key: ${{ secrets.STOREFAST_API_KEY }}
          app: 9PJWF4W8V4WG
          package: build/store/MyApp.msix

The GitHub Actions guide covers the API key secret, release notes and the review step in more detail.

Where Codemagic and the msstore CLI fit

FeatureStoreFastmsstore CLICodemagic
First submissionNoPartner CenterNoPartner CenterNoPartner Center
Builds the .msixNoyou run msix:createYesmsstore packageYesruns msix:create on Windows machines
CredentialsSign in with Microsoft, one API key in CIEntra app: tenant, client, secret, seller IDEntra app: tenant, client, secret, Store ID
What's new in every languageYestranslated for youNoyou edit the submission JSONNot covered in its Store docs
App updatesA single .msixFree products onlyfor now, per MicrosoftThrough Microsoft’s submission API

msstore CLI. Microsoft's free CLI supports Flutter projects. msstore init sets a project up, msstore package builds the .msix and msstore publish uploads it to a new submission. Flutter's docs show it in GitHub Actions with an msix_config in pubspec.yaml. Microsoft says app updates through the CLI work for free products only for now. The msstore comparison goes deeper.

Codemagic. Codemagic builds Flutter apps on its own Windows machines, runs the msix package with --store and publishes to Partner Center through Microsoft's submission API. It suits you if Codemagic already builds your iOS and Android apps. You link an Entra application to Partner Center and give Codemagic its tenant ID, client ID, secret and your Store ID.

StoreFast doesn't replace the build. It takes the .msix that msix:create made, on your machine, a GitHub runner or Codemagic, and handles the release notes, submission and certification tracking. If your app is built with Tauri instead, see the Tauri guide.

Who it's for

StoreFast is a good fit if

  • You ship a Flutter Windows app to the Store as an .msix and update it often.
  • Your listing has several languages and you want What's new in all of them.
  • You release from GitHub Actions or a coding agent, or want to approve each update on a dashboard.

Look elsewhere if

  • Your app isn't in the Store yet. Make the first submission in Partner Center.
  • You ship an EXE or MSI installer, or an .msixbundle. StoreFast takes a single .msix for now.
  • Your app is free, you want one free tool to build and publish, and you don't need translated notes. Use msstore.

Questions

Do I need a code signing certificate for a Flutter app in the Microsoft Store?
No. Microsoft re-signs MSIX packages with its own certificate after they pass certification, so you don't buy a certificate or provide a .pfx. With store set, the msix package doesn't sign the package at all and leaves that to the Store.
Is it dart run msix:create or flutter pub run msix:create?
The msix README uses dart run msix:create. Older posts, Codemagic's docs among them, use flutter pub run msix:create, which runs the same command from the package. Add --store, or set store: true in msix_config, for a Store package.
Why does Partner Center ask about runFullTrust?
The msix package adds the runFullTrust capability to every Flutter app it packages, because a Flutter Windows app is a full-trust desktop app. runFullTrust is a restricted capability, and Microsoft's submission checklist requires you to explain restricted capabilities on the Submission options page.
Can I publish the first version of my Flutter app from CI?
No. Microsoft's msstore CLI, Codemagic and StoreFast all need the app's first submission made in Partner Center. Every update after that can come from CI.
Can StoreFast publish my Flutter app?
Yes, from the second release on, as long as you ship an .msix. You make the first submission in Partner Center, then publish updates from the dashboard, the GitHub Action, the API or a coding agent. StoreFast doesn't build the package, so you still run msix:create.

Publish your Flutter app's next update

Make your first submission in Partner Center, connect it to StoreFast and drop the next .msix on the page. Try it free for 7 days, no card needed.

Sources

Facts about Microsoft's tools were checked against these pages on October 5, 2026.