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.

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.