DocsUOSTroubleshooting

Troubleshooting

Quick diagnoses for the most common UOS pain points. Each section starts with the symptom and walks through the cause + fix.

SteamAPI_Init returns false

Symptom: UOS Steam Subsystem -> Is Steam Initialized stays false.

Causes

  • -Steam isn't running. Start the Steam client; SteamAPI_Init talks to the Steam process via shared memory.
  • -Missing steam_appid.txt next to the editor / packaged executable. Set bAutoWriteSteamAppIdFile = true in Project Settings; UOS writes it automatically.
  • -Wrong AppID. App 480 (Spacewar) is fine for testing but you must own it on the running Steam account. SteamWorks API: AppID 0 in logs = config not loaded.
  • -Steam restart needed. After changing the appid file, restart Steam (not just the editor) - it caches the app launch context.

EOS Is Platform Ready stays false

Symptom: every EOS subsystem call no-ops.

Causes

  • -Empty credentials in Project Settings. The Product / Sandbox / Deployment / Client ID + Secret are all required.
  • -Wrong sandbox / deployment. The deployment must belong to the sandbox; the sandbox must belong to the product.
  • -PIE init disabled. Add EOSPlatformFlags = 2 (LOADING_IN_EDITOR) if you want EOS up while running PIE.
  • -EOSSDK module not packaged. Confirm EOSSDK is listed under PrivateDependencyModuleNames in your project's Build.cs (UOS already declares it for itself, but a packaged shipping target needs the SDK in dependencies of the game module too if you call it directly).

My callbacks never fire

Symptom: you call something, the request issues, but the result event never comes back.

Causes

  • -No tick pump. UOS Steam Subsystem ticks SteamAPI_RunCallbacks and UOS EOS Subsystem ticks EOS_Platform_Tick. Both are FTickableGameObjects. If you have something pausing ticks (like custom SetGamePaused with all tickables frozen), no async results surface. Override IsTickableWhenPaused remains true on UOS subsystems but check for any blanket pause logic.
  • -Subsystem destroyed mid-flight. UOS uses TWeakObjectPtr to bridge callbacks to the game thread - if the GameInstance shut down before the result arrived, the callback no-ops. Verify by triggering the call when the subsystem is alive and waiting at least one tick.
  • -Wrong delegate binding. EOS notifications return a NotificationId; if you don't store it, the unbinder runs on Deinit but Steam callbacks won't arrive for events you registered for. Re-check that Bind Event ran before the action.

Lobby search returns 0 results

EOS

  • -BucketId mismatch. The lobby was created with BucketId = "A" but you're searching "B". Bucket IDs are exact-match.
  • -Permission level. Only PublicAdvertised lobbies are returned by attribute / bucket search. InviteOnly and JoinViaPresence lobbies are invisible.
  • -Attributes private. If you set bPublic = false on a lobby attribute, it isn't indexed. Make filter attributes public.
  • -Wrong sandbox. Lobbies are scoped to a sandbox / deployment. Two clients on different sandboxes don't see each other.

Steam

  • -Filter mismatch. Add Lobby String Filter uses string-comparison on the lobby data key. Verify the key is Set Lobby Data'd on the host before searching.
  • -Distance filter too tight. Default is Default. Try Worldwide while debugging.

Anti-cheat won't initialize

Symptom: Begin Session returns false on the client.

  • -No EAC bootstrapper. The runtime API is only half the story. Your packaged build must launch via EasyAntiCheat_x64.exe with a per-title certificate from Epic.
  • -Unsigned executable. EAC validates code signatures; a debug-built unsigned binary fails to begin a protected session.
  • -Title not registered. EAC requires per-title config in the Epic Dev Portal even for sandbox runs.
  • -Server side missing. UOSEOSAntiCheatServerSubsystem -> Begin Session on the server complements the client; without it, client integrity events have nowhere to land.

Voice doesn't come through

  • -Send disabled. UOS RTC defaults to bUnmuted = false. Toggle with UOS EOS RTC Audio Subsystem -> Update Sending.
  • -Wrong device. Get Input Devices -> Set Input Device if the user has multiple mics.
  • -Token expired. Participant tokens have an expiry. Re-mint via your backend on rejoin.

Workshop upload fails partway

  • -Content folder too big. Steam has size limits per item; check the SteamCmd dashboard.
  • -Preview not provided. Set Item Preview is required before Submit Item Update for items the user expects to be visible.
  • -Permissions. The item visibility flag (defaults to community) determines whether your account can publish it.

Dedicated server doesn't show in browser

  • -Mode mismatch. NoAuthentication = LAN-only; AuthenticationAndSecure = public + VAC.
  • -Ports blocked. GamePort + QueryPort must be reachable from the master server.
  • -No SetMapName. Some browsers filter out servers without a map.
  • -Not logged on. Bind OnLoggedOn - the server is invisible until that event fires.

Plugin doesn't compile

  • -Wrong Dist version. The Dist for UE 5.6 won't link against UE 5.5. Use the matching folder.
  • -Missing Steamworks third-party. Some custom UE source builds strip Engine/Source/ThirdParty/Steamworks/. Restore from Epic's public source.
  • -Blueprint-only project. UOS contains C++ modules; convert to a C++ project (add one empty C++ class once).

Where are the logs?

UOS routes its log to UE's LogUOS category. To make it verbose:

[Core.Log]
LogUOS=Verbose

in Config/DefaultEngine.ini. Steam SDK warnings come through Steam's own log (visible in the Output Log under LogSteamShared when the OSS plugin is loaded).

Note
Still stuck? Capture the full Output Log starting from UOS entries onward and share it - 90% of UOS issues diagnose from a 100-line slice of that log.