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 steamcmd command-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 Release configuration 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.