Quick answer: Place steam_appid.txt with your appid next to the shipping .exe. Configure DefaultEngine.ini for OnlineSubsystemSteam. Launch through Steam, or run with the appid file for local testing.

Editor finds Steam friends fine. Shipping build prints “Steam initialization failed” and falls back to NULL subsystem. The appid file or DefaultEngine.ini section is missing.

The Symptom

Logs in shipping show “Steam Init failed” or “Steam not available.” Multiplayer matchmaking, achievements, friend lookup all fail. Editor was happy because it has its own setup.

The Fix

Step 1: DefaultEngine.ini.

[OnlineSubsystem]
DefaultPlatformService=Steam

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480           ; or your real appid
GameServerQueryPort=27015

[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

480 is Spacewar (Steam test). Use your real appid for shipping.

Step 2: steam_appid.txt. A text file with just your appid number, no extension or BOM. Placed in the same folder as the executable. Steam reads this on init.

Step 3: Build with the OnlineSubsystem plugins enabled. Plugins window → Online Platform → Online Subsystem Steam → Enabled. Rebuild.

Step 4: Launch via Steam (production). Add the game to Steam as a non-Steam game while testing, or upload to Steamworks. Launching from Explorer skips the auth and init may partial-fail.

Verifying

Run shipping. Logs should show “Steam: subsystem started successfully.” SDK version printed. Friends list loads. If still failing, check the appid file location and DefaultEngine.ini section names.

“DefaultEngine.ini set. steam_appid.txt next to exe. Plugins enabled. Steam comes up.”

Related Issues

For Replication Graph, see replication. For DataAsset cooked build, see DataAsset.

App ID. Plugin. INI. Steam responds.