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

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

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

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:

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.