diff --git a/.cspell.yaml b/.cspell.yaml
index 92d98531..00b68b96 100644
--- a/.cspell.yaml
+++ b/.cspell.yaml
@@ -85,6 +85,7 @@ words:
- mipmap
- mobileprovision
- mozallowfullscreen
+ - msix
- notlike
- nubank
- opengraph
diff --git a/src/content/docs/code-push/release.mdx b/src/content/docs/code-push/release.mdx
index 2f7e777b..bf806b92 100644
--- a/src/content/docs/code-push/release.mdx
+++ b/src/content/docs/code-push/release.mdx
@@ -439,6 +439,11 @@ the `--flutter-version` flag.
shorebird release windows --flutter-version %flutter_version%
```
+To package this build for the Microsoft Store, set `build_windows: false` in the
+`msix_config` section of `pubspec.yaml` so `package:msix` does not rebuild with
+stock Flutter. See
+[Releasing for Windows](/flutter-concepts/releasing-flutter-apps/windows/).
+
@@ -620,3 +625,8 @@ as needed.
title="Releasing for iOS"
description="Learn how to configure Xcode signing and submit your release to the Apple App Store."
/>
+
diff --git a/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx b/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx
index 3df518b7..9c7d062e 100644
--- a/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx
+++ b/src/content/docs/flutter-concepts/releasing-flutter-apps/index.mdx
@@ -393,3 +393,8 @@ artifacts:
title="Releasing for iOS (Apple App Store)"
description="Configure Xcode signing identities, Privacy Manifests, build IPAs, and distribute via TestFlight and App Review."
/>
+
diff --git a/src/content/docs/flutter-concepts/releasing-flutter-apps/windows.mdx b/src/content/docs/flutter-concepts/releasing-flutter-apps/windows.mdx
new file mode 100644
index 00000000..401db0d2
--- /dev/null
+++ b/src/content/docs/flutter-concepts/releasing-flutter-apps/windows.mdx
@@ -0,0 +1,75 @@
+---
+title: Releasing for Windows
+description:
+ Build a Shorebird Windows release, then package an MSIX from that output
+ without letting package:msix rebuild the app with stock Flutter.
+sidebar:
+ label: Windows (Microsoft Store)
+ order: 4
+---
+
+To submit an app to the Microsoft Store, you need an **MSIX** package.
+[`package:msix`](https://pub.dev/packages/msix) is a common way to produce that
+file from a Flutter Windows build. By default it runs `flutter build windows`
+with the Flutter SDK on your `PATH`, not Shorebird's Flutter. That rebuild is
+not a Shorebird release, so patches will not apply.
+
+Build with Shorebird first, then tell `package:msix` to package the existing
+output.
+
+## Step 1: Create a Shorebird Windows release
+
+```bash
+shorebird release windows
+```
+
+The Windows executable is written to `build/windows/x64/runner/Release`. See
+[Create a Release](/code-push/release/) for flavors, targets, and
+`--flutter-version`.
+
+## Step 2: Disable the MSIX rebuild
+
+Add [`package:msix`](https://pub.dev/packages/msix) as a dev dependency if you
+do not already use it:
+
+```bash
+flutter pub add dev:msix
+```
+
+Then set `build_windows: false` in the `msix_config` section of `pubspec.yaml`:
+
+```yaml
+msix_config:
+ display_name: My App
+ publisher_display_name: Example
+ publisher: CN=00000000-0000-0000-0000-000000000000
+ identity_name: com.example.myapp
+ msix_version: 1.0.0.0
+ store: true
+ build_windows: false
+```
+
+`build_windows: false` skips `flutter build windows` and packages the directory
+Shorebird already produced.
+
+Copy `identity_name`, `publisher`, and `publisher_display_name` from Partner
+Center (Product identity). With `store: true`, `package:msix` refuses to build
+if any of them is missing. The fourth part of `msix_version` must be `0` for
+Store submissions.
+
+## Step 3: Create the MSIX package
+
+```bash
+dart run msix:create
+```
+
+Submit the generated `.msix` file to the Microsoft Store.
+
+:::caution
+
+After `shorebird release windows`, do not run `flutter build windows`, or
+`msix:create` without `build_windows: false`. Those commands rebuild with
+non-Shorebird Flutter and overwrite the build output, so the resulting MSIX will
+not receive patches.
+
+:::