DocsUniversal Online Services

Universal Online Services

Universal Online Services (UOS) is a single Unreal Engine plugin that exposes both Steamworks and Epic Online Services to your game. Every Steam interface and every EOS Interface is wrapped in a typed, Blueprint-friendly UGameInstanceSubsystem. You don't pick one or the other - both run side by side, in the same project, ready for whichever platform a given player is on.

What you get

  • -22 Steam subsystems covering the full Steamworks surface: friends, lobbies, matchmaking, stats and achievements, cloud, apps/DLC, screenshots, music, parental settings, remote play, auth tickets, voice, controller input, inventory, Workshop (UGC), HTTP, modern P2P, server browser, Timeline (2024 recording), and dedicated server.
  • -24 EOS subsystems covering every public EOS Interface: auth, connect, user info, friends, presence, achievements, stats, leaderboards, player and title data storage, P2P, lobbies, sessions, ecom, custom invites, mods, progression snapshots, sanctions, reports, anti-cheat (client + server), metrics, KWS, RTC voice + audio, UI overlay, and version.
  • -Direct access: each subsystem maps 1:1 to its underlying SDK. No abstraction layer, no shared identity model, no leaky "OnlineSession" in between.
  • -Blueprint-first: every callable method is a UFUNCTION(BlueprintCallable) and every event is a multicast delegate. Drop nodes onto a graph and wire them up.
  • -UE 5.5, 5.6, and 5.7 all build clean from the same source. Per-engine prebuilt Dist binaries are shipped in the same plugin archive.
  • -Latent / async Blueprint nodes (Success / Failure exec pins) for every request-response API across both Steam and EOS - login, lobby create/join/search, stats query, UGC upload, achievement unlock, presence query, file read/write, checkout, RTC join, HTTP request, and more. No more manual delegate binding in graphs.
  • -Conversion / utility library: BlueprintPure helpers for round-tripping FUOSSteamID, FUOSEpicAccountId, FUOSProductUserId to and from strings / integers, plus byte / hex / UTF-8 conversions for tickets, tokens, and payloads.

Why UOS instead of OnlineSubsystemSteam / OnlineSubsystemEOS?

The built-in OSS plugins are great for cross-platform sessions, but they only expose the slice of each SDK that the OnlineSubsystem abstraction agrees on. If you want EOS lobbies with attribute filters, Steam Workshop, RTC voice, custom invites, the timeline recording API, or any of the dozens of other interfaces - you have to drop down to C++ and call the SDK directly.

UOS does that work for you. It wraps the SDK in idiomatic Unreal subsystems, maps the C-style callbacks back to the game thread, and exposes everything to Blueprints. Use it instead of OSS, alongside OSS, or both - they don't collide.

Where to go next

Tip
Subsystems are lazily reachable from any Blueprint. Use Get Game Instance Subsystem with the class you want (for example UOS Steam Friends Subsystem or UOS EOS Lobby Subsystem), and call methods directly. Every subsystem checks SDK readiness before it does anything, so calling them before init returns a sentinel value rather than crashing.

Quality-of-life helpers

On top of the raw subsystems, UOS ships two helper layers for the ergonomic use cases competing plugins (SteamCore, EOSCore) advertise:

  • -Latent async nodes - UBlueprintAsyncActionBase wrappers under categories like UOS|Steam|*|Async and UOS|EOS|*|Async. Drop one onto a graph and you get Success / Failure exec pins with the result already on output pins, no AddDynamic wiring required. Coverage:
    • -Steam: Create / Join Lobby, Request Lobby List, Request / Store User Stats, UGC query & create & submit-update & download, Inventory Get All / Grant Promo / Consume / Trigger Drop, Request Encrypted App Ticket, Send HTTP Request, Request Internet Server List.
    • -EOS: Auth Login / Logout, Connect Login (token & device-id) / Create User / Logout / Create Device ID, Query User Info (by id & by display name), Query Friends, Query Presence, Query Achievement Definitions / Player Achievements / Unlock Achievements, Ingest Stat (single & batch) / Query Stats, Query Leaderboard Definitions / Ranks / User Scores, Player & Title Storage list / read / write / delete, Create / Join / Leave / Search Lobby, Create / Update / Start / End / Destroy / Search Session, Query Entitlements / Offers, Checkout, RTC Join / Leave Room.
  • -UOS Conversion Library - BlueprintPure helpers for converting between strings, integers, and the typed identity structs you receive from the SDKs. Common picks: Conv_StringToSteamID, Conv_SteamIDToString, Conv_SteamIDToInt64, Conv_StringToEpicAccountId, Conv_StringToProductUserId, BytesToHex / HexToBytes, StringToUTF8Bytes / UTF8BytesToString, plus IsValid and EqualEqual / NotEqual for each id type.
Tip
The latent and fire-and-forget APIs co-exist - both target the same underlying subsystem and the same multicast events. Use whichever matches your graph: latent for one-shot "await result" flows, the multicast delegates when you need a long-lived listener (presence changes, lobby member status, RTC participants).