Publishing
Publishing Your Game
You have built your game — now ship it. This guide covers building release binaries, packaging for distribution, and publishing to the most popular storefronts and platforms.
Download the runnable sample project
Use the verified ZIP bundle for this article to review the extracted example files, run the sample host, and repackage the sources without bin or obj folders.
Building a release binary
Always publish in Release configuration. This enables compiler optimisations, strips debug symbols, and ensures your game runs at full speed.
dotnet publish -c Release -o ./publish/
# Output folder contains all files needed to distribute
Self-contained publishing
A self-contained publish bundles the .NET runtime so players do not need to install it separately. Specify the target runtime identifier (RID).
# Windows x64
dotnet publish -c Release -r win-x64 --self-contained -o ./publish/win-x64/
# Linux x64
dotnet publish -c Release -r linux-x64 --self-contained -o ./publish/linux-x64/
# macOS x64
dotnet publish -c Release -r osx-x64 --self-contained -o ./publish/osx-x64/
# macOS Apple Silicon
dotnet publish -c Release -r osx-arm64 --self-contained -o ./publish/osx-arm64/
Trimming and single-file
Reduce your output size by trimming unused framework code and bundling into a single executable.
dotnet publish -c Release -r win-x64 --self-contained \
-p:PublishSingleFile=true \
-p:PublishTrimmed=true \
-p:IncludeNativeLibrariesForSelfExtract=true \
-o ./publish/win-x64-trimmed/
Trimming can remove code accessed via reflection. Test your trimmed build thoroughly. Add [DynamicallyAccessedMembers] attributes or trimming roots for any reflection-heavy code.
Publishing to Steam
Steam is the largest PC game distribution platform. Follow these steps to publish your MonoGame project.
Prerequisites
- A Steamworks developer account (one-time fee).
- The Steamworks SDK and
steamcmdcommand-line tool. - Store page assets: capsule images (various sizes), screenshots, trailer video.
Steam SDK integration (optional)
Use Steamworks.NET to integrate achievements, leaderboards, cloud saves, and the Steam overlay.
// In Program.cs or Game1 constructor
if (!SteamAPI.Init())
{
Console.WriteLine("Steam not running. Exiting.");
return;
}
// Call every frame
protected override void Update(GameTime gameTime)
{
SteamAPI.RunCallbacks();
base.Update(gameTime);
}
// On exit
protected override void OnExiting(object sender, EventArgs args)
{
SteamAPI.Shutdown();
base.OnExiting(sender, args);
}
Upload with steamcmd
steamcmd +login your_username +run_app_build app_build.vdf +quit
Publishing to itch.io
itch.io is the easiest platform for indie releases. Create a project page, upload your ZIP, and you are live within minutes.
Using butler (recommended)
itch.io’s butler CLI provides incremental uploads and versioning.
# Install butler
# Download from https://itch.io/docs/butler/
# Push Windows build
butler push ./publish/win-x64/ yourusername/your-game:windows
# Push Linux build
butler push ./publish/linux-x64/ yourusername/your-game:linux
# Push macOS build
butler push ./publish/osx-x64/ yourusername/your-game:mac
Google Play Store
Publish your MonoGame Android project as an AAB (Android App Bundle) and upload it to the Google Play Console.
# Build signed AAB
dotnet publish -c Release -f net8.0-android \
-p:AndroidPackageFormat=aab \
-p:AndroidKeyStore=true \
-p:AndroidSigningKeyAlias=mykey \
-p:AndroidSigningKeyStore=mykey.keystore \
-p:AndroidSigningStorePass=yourpassword
Required assets
- App icon (512×512 PNG)
- Feature graphic (1024×500 PNG)
- At least 2 screenshots
- Privacy policy URL
- Content rating questionnaire
Apple App Store
iOS apps are submitted through Xcode or Transporter. You need an Apple Developer account and your app must pass App Store Review.
Key requirements
- Apple Developer Programme membership (£79/year).
- App icons at all required resolutions (1024×1024 master icon).
- Launch screen storyboard or static images.
- Privacy nutrition labels in App Store Connect.
- TestFlight beta testing before submission is recommended.
Microsoft Store
Package your game as an MSIX or submit a bare executable via the Microsoft Partner Centre. UWP and Win32 apps are both supported.
# Use the Windows Application Packaging Project
# or MakeAppx.exe from the Windows SDK
MakeAppx pack /d ./publish/win-x64/ /p MyGame.msix
SignTool sign /fd sha256 /a /f cert.pfx MyGame.msix
Icons, splash screens, and metadata
Professional presentation matters. Prepare these assets before publishing:
Required images by platform
| Platform | Icon sizes | Screenshots | Other |
|---|---|---|---|
| Steam | Various capsule sizes | Min 5 (1280×720+) | Header, hero, logo |
| itch.io | Cover image (630×500) | Optional | Banner, background |
| Google Play | 512×512 | Min 2 per device type | Feature graphic |
| App Store | 1024×1024 | Per device class | Preview video optional |
Setting the application icon
<PropertyGroup>
<ApplicationIcon>Icon.ico</ApplicationIcon>
</PropertyGroup>
Release checklist
Before pressing the publish button, verify every item:
- Game runs in
Releaseconfiguration without errors. - All content builds and loads correctly.
- Self-contained publish tested on a clean machine (no .NET SDK installed).
- Fullscreen, windowed, and resolution switching all work.
- Gamepad, keyboard, and (if applicable) touch input all function.
- Audio plays correctly (sound effects, music, volume levels).
- Save/load works and persists between sessions.
- No debug overlays or development shortcuts in the release build.
- Application icon set for the target OS.
- Store page metadata, screenshots, and description finalised.
- Privacy policy written (required for mobile stores).
- Version number and build date set in the application.
- Tested on the minimum supported OS version.
- Anti-virus false positive check (submit to major AV vendors if needed).
Publishing is iterative. Your first release will not be perfect. Launch, gather feedback, patch, and improve. The community will appreciate your commitment to making it better.