A platform-agnostic online layer: identity, sessions, friends, presence, parties, achievements, stats, leaderboards, store, purchases, entitlements, voice, and cloud save behind one typed, Blueprint-friendly subsystem.
Coming Soon · Online · Unreal Engine 5
One online API for Steam, EOS and the console backends.
CrimsonOnlineSubsystem wraps Epic's OnlineSubsystem behind a typed, Blueprint-friendly GameInstance subsystem. One UCrimsonOnlineSubsystemGI owns 15 specialised services, from identity, sessions and friends to store, entitlements, voice and cloud save. The platform is detected once at boot, and DebugPlatformOverride pins it so PIE resolves against the backend you are testing.
Why CrimsonOnlineSubsystem
Write your online code once against typed services; the right platform backend is resolved at boot.
One subsystem, 15 typed services
UCrimsonOnlineSubsystemGI owns one service per interface, each with a typed accessor: GetSessionService(), GetFriendsService(), GetStoreService() and twelve more. Every service exists on every platform, so an accessor is never null. Where a backend lacks the interface, the call fails safely; handle the failure branch.
Six backends, one set of calls
Detection reads IOnlineSubsystem::GetSubsystemName() and maps it: Steam, Epic Online Services, PlayStation (PS4/PS5), Xbox (XboxOne / XboxOneGDK / GDK), Nintendo Switch, and Null for LAN development. Anything else resolves to Unknown and logs a warning. Your calls stay identical across all of them.
Sessions without the boilerplate
FCrimsonSessionSettings configures a session in one struct: max players, LAN, presence, invites, join-in-progress, travel map and game-mode label. Create, find, join, start, end and destroy are typed calls with a completion delegate each, and OnSessionJoined hands you the resolved TravelURL, ready for ClientTravel.
The whole social stack
Read the platform friend list into FCrimsonFriendInfo, send and answer friend requests, block, query recent players. Publish rich presence; remote players arrive as an Online / Away / Offline state. Then create a party (invite, kick, transfer leadership) with party delegates driving the UI.
Achievements, stats & leaderboards
Write achievement progress 0 to 100; the platform unlocks at 100. Submit ranked scores to a named leaderboard and read the top N or a range centred on the player. Track raw per-player int64 stats with Sum / Set / Largest / Smallest write semantics.
Store, DLC & cloud save
Query storefront offers, open the platform checkout, and read receipts back. A DataTable DLC mapping resolves one FName to the right Steam, EOS, PSN, Xbox or Switch product before checking ownership. Cloud save moves byte blobs keyed by file name, whatever save format you write.
A closer look
Host, browse, join: a session flow designers can wire
Log in with the Login (Online) Blueprint node, create a session from an FCrimsonSessionSettings struct, and populate a server browser straight from the OnSessionsFound results. Every step is a typed call with a completion delegate.
- Each
FCrimsonSessionSearchResultcarries session id, owner name, current and max players, and ping - Pass the whole struct back to
Join Session, take theTravelURLthe delegate hands you, and travel
Friends, presence, and parties in one pass
Read the platform friend list once and render it from FCrimsonFriendInfo: display name, platform id, condensed presence, and whether an invite is pending in either direction. Then send and answer invites and move the group into a party.
- Re-read the list whenever
OnFriendsListChangedfires - Create, invite, join, kick and transfer leadership, with member-joined, member-left and leader-changed delegates keeping every frame in sync
- One party is active at a time;
GetPendingInviterIdslists everyone waiting on an answer
Point it at a backend, then test it from PIE
The plugin never chooses a provider for you: enable the provider's own plugin and set it in DefaultEngine.ini. To skip the fiddly part, complete config overlays for Steam, EOS and SteamEOS ship in Config/CustomTemplates/. Copy one into your project.
- Net driver and
CompatibleUniqueNetIdTypesentries included DebugPlatformOverridepins the platform, so PIE resolves DLC ids and platform branches against the backend you are testing
Honest about what the wrapper does not do
Two project settings, bVerboseLogging and bEnableCloudSave, are declared but not read by anything yet. They change nothing today and are documented that way rather than quietly removed. bVerboseCloudSaveLogging is the logging switch that works.
FCrimsonCloudFileHeader::LastModifiedis always zero, so version-stamp your save payload instead of building a newest-wins sync on it- No receipt-finalize call: grant content when checkout reports
Purchased - Re-query receipts when
OnUnexpectedReceiptfires; that is how a purchase from another device reaches this session
Technical details
- Engine
- UE 5.8
- Tested platforms
- Windows
- Blueprint-ready
- Yes
- C++ required
- No
- Network replicated
- No
- Dependencies
- OnlineSubsystem, OnlineSubsystemUtils, GameplayTags, DeveloperSettings
Frequently asked questions
Which online backends does it support?
Unknown, where DLC lookups return an empty id and log a warning.Do I need C++ to use it?
.uproject or .Build.cs edits), and the services are Blueprint-callable with Blueprint-pure accessors. Three flows also ship as async Blueprint nodes: Login (Online), Write Achievement Progress and Query Entitlements (DLC). C++ teams get the same 15 services through strongly-typed accessors on UCrimsonOnlineSubsystemGI.Does it work in multiplayer?
Does it configure the backend for me?
IOnlineSubsystem your project activates rather than picking one. You enable the provider's plugin and set DefaultPlatformService in DefaultEngine.ini. What it does ship is ready-made config overlays for Steam, EOS and SteamEOS under Config/CustomTemplates/, each with a header comment explaining what it assumes; copy the one you want into your project's config.Does it depend on other Crimson plugins?
OnlineSubsystem and OnlineSubsystemUtils plugins plus whichever platform OSS module you ship with. CrimsonCore, the free integration layer for the full suite, uses it for identity, presence and friends in its front end; nothing on this side needs wiring.Can I buy it yet?
Go online without marrying a platform
Enable the plugin, point DefaultEngine.ini at your backend (or copy one of the shipped overlays), and log in with one async node. The same session, social, progression, and store code then ships everywhere your game does.
Completes your setup
Each Crimson plugin runs standalone, so add only what your game needs:
Fragment-based saving: each system owns its own data.
- Independent Fragments
- No Cross-Plugin Coupling
- Blueprint-Ready
Tag-based teams & factions with dynamic attitude.
- Tag-Based Teams
- Dynamic AI Re-Aggro
- GAS Target Filtering
- Team Colors
- Multiplayer Dev Tools