How to Publish a Unity Game on Steam and itch.io

Illustration: a game box launching like a rocket from a laptop toward an online storefront window

Finishing a game is hard. Getting it from “it runs in the Editor” to “people can download it” is a separate project with its own checklist, and it’s where many indie games stall for weeks. This guide walks through publishing a Unity game on itch.io and Steam in Unity 6: preparing a release build, the settings people forget, uploading to itch.io (including WebGL and the butler tool), the full Steam process from Steam Direct to release day, and a pre-launch checklist you can copy.

itch.io or Steam (or Both)?

itch.io Steam
Cost to publish Free $100 Steam Direct fee per game (recouped after $1,000 in gross revenue)
Revenue share You choose (default 10% to itch.io, can be 0%) 30% to Valve (lower above $10M and $50M)
Time to go live Minutes At least about 30 days after paying the fee, plus reviews and a “Coming Soon” period
Browser (WebGL) games Yes, playable on the page No
Audience Smaller; game jams, experimental and free games The largest PC audience, with wishlists and discovery
Best for Jams, prototypes, demos, free games, testing Commercial releases

A common path is to release a free demo or jam version on itch.io to collect feedback, while building a Steam page early to gather wishlists for the commercial release. You can sell on both; itch.io doesn’t require exclusivity.

Prepare a Release Build

Before building, go through Edit > Project Settings > Player:

  • Company Name, Product Name and Version. Product Name becomes the window title and the save-data folder name (Application.persistentDataPath uses Company and Product names). Changing these after release moves players’ saves, so set them now.
  • Icon: assign a default icon (at least 1024×1024 source) so the executable doesn’t show the Unity logo.
  • Resolution and Presentation: Fullscreen Mode (Fullscreen Window is the friendliest default), whether the window is resizable, and Run In Background.
  • Splash Screen: in Unity 6, Personal-licence projects can turn off the “Made with Unity” splash. Add your own logo or remove the splash entirely.
  • Scripting Backend: IL2CPP makes faster, harder-to-decompile builds; Mono builds faster while iterating. Many PC games ship on IL2CPP.

Then in File > Build Profiles:

  1. Check the Scene List includes every scene, with the main menu or bootstrap scene first.
  2. Untick Development Build. Development builds are slower, show a debug overlay and include the profiler connection.
  3. Build into an empty folder outside the Assets folder, for example Builds/Windows/.
  4. Delete the *_BurstDebugInformation_DoNotShip and *_BackUpThisFolder_ButDontShipItWithYourGame folders from the output before uploading. Keep the _Data folder, UnityPlayer.dll, UnityCrashHandler64.exe and the game’s .exe.

Test the build on a different computer if you can, ideally one that never had Unity installed. Our Project Settings checklist covers more of the settings worth reviewing before shipping.

Publish on itch.io

  1. Create an itch.io account and go to Dashboard > Create new project.
  2. Fill in the title, a short tagline, the Kind of project (Downloadable or HTML for WebGL), and the Pricing (free, paid, or “name your own price” with a minimum).
  3. Upload a zip of your build folder, and tick the platform checkbox (Windows, macOS, Linux) for it.
  4. Add a cover image (630×500), screenshots, a description, genre and tags. These matter for itch.io’s search and browse pages.
  5. Set Visibility to Draft while testing (you can share a secret URL), then Public when ready.

WebGL games on itch.io: build with Web as the platform, zip the contents of the output folder (so index.html sits at the root of the zip), upload it, choose This file will be played in the browser, and set the embed size to match your canvas. Compression is the usual problem: in Player Settings > Publishing Settings, use Gzip with Decompression Fallback enabled, or disable compression. Brotli builds often fail on hosts that don’t send the right headers. Our WebGL optimization guide covers build size and load times, and the WebGL build size estimator helps you plan.

Upload Updates with butler

Re-uploading zips through the browser gets old fast. butler is itch.io’s command-line uploader. It only sends the files that changed, and the itch.io app patches players’ installs automatically.

butler login
butler push Builds/Windows yourname/your-game:windows --userversion 1.0.3
butler push Builds/Web yourname/your-game:html5

The part after the colon is the channel. Channel names containing windows, mac, linux or html are tagged with the right platform automatically. Put the push commands in a small script and releasing an update becomes a one-liner.

Publish on Steam: the Full Process

Steam takes longer, mostly because of required waiting periods. Here’s the sequence:

  1. Join Steamworks. Sign up at partner.steamgames.com, complete the company or individual paperwork, tax interview (W-8/W-9) and bank details. Identity verification can take a few days.
  2. Pay the Steam Direct fee ($100 per game). You receive an App ID. There’s a waiting period of about 30 days between paying and being allowed to release.
  3. Build the store page. Capsule images in several required sizes, at least five screenshots, a trailer (strongly recommended), descriptions, tags, system requirements and a content survey. Submit it for review (typically a few business days).
  4. Go “Coming Soon”. Once the page is approved, publish it as Coming Soon. It must be public for at least two weeks before release, but in practice longer is better: this is when you collect wishlists, which drive Steam’s visibility on launch day.
  5. Upload your build with SteamPipe (below), set up the default branch, and submit the build for review.
  6. Release. After both reviews pass and the waiting periods are over, set a release date or click the release button.

Uploading builds with SteamPipe: download the Steamworks SDK, and in sdk/tools/ContentBuilder edit the app and depot build scripts (app_build_<appid>.vdf) to point at your build folder. Then run steamcmd with your build account:

steamcmd +login your_build_account +run_app_build ..\scripts\app_build_1234560.vdf +quit

The build appears under SteamPipe > Builds in Steamworks, where you set it live on a branch. Create a private beta branch with a password to test the real Steam download before going live. Also configure the launch options (the executable path) in the app’s Installation settings, or players will see “missing executable” errors.

Steamworks Integration in Unity

A Steam game doesn’t need achievements or the Steam overlay to launch, but most players expect at least achievements and cloud saves. For Unity there are two popular free wrappers:

  • Steamworks.NET: a thin, complete C# wrapper of the Steamworks API.
  • Facepunch.Steamworks: a friendlier, more C#-style API, used by Rust and other big games.

Either way, the basics are: initialise Steam at startup, check it succeeded, call the API, and shut down on quit. During development, put a steam_appid.txt file containing your App ID next to the executable (and in the project root for the Editor), so Steam knows which game is running. Don’t ship that file in the build Steam distributes. Also add a fallback: if Steam isn’t running, either restart through Steam (SteamAPI.RestartAppIfNecessary) or let the game run without Steam features.

Steam Cloud can sync save files with no code at all using Auto-Cloud: in Steamworks, point it at your save folder (for Unity, under AppData/LocalLow/<Company>/<Product> on Windows). Pair it with a solid JSON save system.

🚀 Ship faster with the right tools

Save systems, Steam integration helpers and build automation tools on the Asset Store can save weeks before launch. Our list covers the ones indie developers rely on.

See the best Unity Asset Store tools →

A Realistic Launch Timeline

When What
6–12 months before Steamworks account, pay the fee, publish a Coming Soon page, start collecting wishlists
3–6 months before Trailer, press kit, itch.io demo or playtest, Steam Next Fest (if you have a demo)
1 month before Final store page, release date set, builds tested from a beta branch
2 weeks before Build submitted for review, keys sent to press and creators
Launch week Release, watch crash reports and reviews, ship a quick patch if needed

You can do it faster (the minimum is about a month and a half), but a store page that’s live for months with wishlists building up almost always sells better than a surprise release.

Pre-Launch Checklist

  • Development Build unticked; no debug UI or cheat keys left enabled.
  • Company and Product name final (save paths depend on them).
  • Game works on a clean machine, at different resolutions and aspect ratios, with a controller and with keyboard and mouse.
  • Settings menu: resolution, fullscreen, volume (see our Audio Mixer guide), key rebinding if possible.
  • Saves work, survive an update, and live in persistentDataPath.
  • The game quits properly (Application.Quit on a Quit button) and handles Alt+F4.
  • Crash and error logging: check Player.log for warnings, consider a crash reporting service.
  • Credits include third-party assets and fonts that require attribution.
  • Store assets: capsule art, screenshots, trailer, description, tags, system requirements.

Troubleshooting

The game works in the Editor but crashes or shows a black screen in the build

Look at the player log (%USERPROFILE%\AppData\LocalLow\<Company>\<Product>\Player.log on Windows). Common causes: a scene missing from the Scene List, code using UnityEditor outside an Editor folder or #if UNITY_EDITOR block, or shaders stripped from the build. Our NullReferenceException guide covers errors that only happen in builds.

Windows SmartScreen warns players the game is unrecognised

Unsigned executables trigger this, especially on itch.io. It fades as more people download. Code signing certificates remove it but cost money; Steam downloads don’t usually show it.

WebGL game on itch.io is stuck loading or shows a decompression error

Brotli compression without the right server headers. Switch to Gzip with Decompression Fallback, or disable compression, and re-upload.

Steam says the game is “missing executable” or won’t launch

The launch option points to the wrong file or path. Check Installation > General in Steamworks, and that the depot actually contains the executable at that relative path.

SteamAPI.Init fails in the Editor or build

Steam isn’t running, steam_appid.txt is missing during development, or the Steam account doesn’t own the App ID. Check those three first.

FAQ

How much does it cost to publish a Unity game on Steam?

The Steam Direct fee is $100 per game, returned once the game earns $1,000 in gross revenue. Valve takes a 30% revenue share by default.

Is it free to publish on itch.io?

Yes. Publishing is free and you choose itch.io’s revenue share, from 0% upward. The default is 10%.

Do I need to pay Unity to sell my game?

Not under Unity Personal, as long as you stay below its revenue and funding threshold. Check Unity’s current licence terms for the exact limit.

Can I remove the Made with Unity splash screen?

Yes. In Unity 6, projects on every plan, including Personal, can disable the Unity splash screen in Player Settings.

How long does it take to get a game on Steam?

At least about 30 days after paying the fee, with a Coming Soon page live for at least two weeks and reviews of the store page and build. Plan for longer to build wishlists.

Can I sell my game on Steam and itch.io at the same time?

Yes. Neither platform requires exclusivity. Many developers sell on both, or use itch.io for demos and jam versions.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *