Quick Start

1 - Enable the plugin

Open Edit -> Plugins, type Crimson in the search box, tick CrimsonOnlineSubsystem's checkbox, and restart the editor when prompted. For a Blueprint project that's the entire install - you never hand-edit the .uproject or any .Build.cs.

Blueprint-only project?
Enabling the plugin in Edit -> Plugins is the whole installation - there is no .uproject or .Build.cs to edit. The editor writes the plugin entry for you. The C++ step below is needed only when you reference CrimsonOnlineSubsystem types from your own C++ code.
Verify
Restart the editor. Project Settings -> Crimson -> Crimson Online Subsystem exists, and the plugin's subsystem is available from any Blueprint graph.

2 - Pick an online provider in DefaultEngine.ini

This plugin never chooses a provider for you - it reads whichever IOnlineSubsystem your project activates. Enable the provider's own plugin (for example OnlineSubsystemSteam) in Edit -> Plugins, then add its settings to Config/DefaultEngine.ini:

ini
[OnlineSubsystem]
DefaultPlatformService=Steam
[OnlineSubsystemSteam]
bEnabled=true
; 480 is Valve's public test AppId (Spacewar). Replace it before shipping.
SteamDevAppId=480
Ready-made overlays ship with the plugin
The plugin's Config/CustomTemplates/ folder carries complete DefaultEngine.ini overlays for Steam, EOS and SteamEOS, including the net driver and CompatibleUniqueNetIdTypes entries each provider needs. Copy the one you want into your project's config; nothing loads them from inside the plugin. The header comment in each file explains what it assumes.

3 - Configure Project Settings

Open Project Settings -> Crimson -> Crimson Online Subsystem. Set DLCMappingTable if you ship DLC, and set DebugPlatformOverride while testing in PIE - PIE has no storefront launcher to inject a platform, so detection otherwise lands on Unknown or Null. Values are written to Config/DefaultGame.ini.

4 - Login at game start (C++)

Login is fire-and-forget: it takes only a local user index, and the result arrives on the service's OnLoginComplete dynamic multicast delegate. Bind before you call.

cpp
// MyOnlineBootstrap.h
#pragma once
#include "CoreMinimal.h"
#include "Subsystems/GameInstanceSubsystem.h"
#include "CrimsonOnlineTypes.h"
#include "MyOnlineBootstrap.generated.h"
UCLASS()
class UMyOnlineBootstrap : public UGameInstanceSubsystem
{
GENERATED_BODY()
public:
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
private:
// Must be a UFUNCTION - OnLoginComplete is a dynamic multicast delegate.
UFUNCTION()
void HandleLoginComplete(bool bSuccess, const FCrimsonOnlinePlayerInfo& PlayerInfo);
};
// MyOnlineBootstrap.cpp
#include "MyOnlineBootstrap.h"
#include "CrimsonOnlineSubsystemGI.h"
#include "Services/CrimsonOnlineIdentityService.h"
void UMyOnlineBootstrap::Initialize(FSubsystemCollectionBase& Collection)
{
Super::Initialize(Collection);
if (UCrimsonOnlineSubsystemGI* Online = UCrimsonOnlineSubsystemGI::Get(this))
{
UCrimsonOnlineIdentityService* Identity = Online->GetIdentityService();
Identity->OnLoginComplete.AddDynamic(this, &UMyOnlineBootstrap::HandleLoginComplete);
Identity->Login(0);
}
}
void UMyOnlineBootstrap::HandleLoginComplete(bool bSuccess, const FCrimsonOnlinePlayerInfo& PlayerInfo)
{
if (bSuccess)
{
// PlayerInfo.DisplayName / PlayerInfo.PlatformUserId are now populated.
}
}

5 - Blueprint async login

Right-click in any Blueprint graph and add Login (Online) (UCrimsonAsyncAction_Login). It takes one input, Local User Num (default 0), and has two execution pins, On Success and On Failure; both carry bSuccess and a Player Info struct. The node resolves UCrimsonOnlineSubsystemGI from the world context for you, so there is nothing else to wire.

Verify
Play in Editor and watch the Output Log for CrimsonOnlineSubsystem initialized. Platform: <name> from LogCrimsonOnline. Then confirm your On Success branch runs and Player Info -> Display Name is your platform account name. On Steam and EOS on PC login usually completes on the next tick, because the platform has already authenticated the process.
One subsystem per game instance
UCrimsonOnlineSubsystemGI is a GameInstance subsystem, so it lives on the client and on the server alike, and each PIE instance gets its own. Do not treat login state on one instance as authoritative for another - query the identity service on the instance you are running on.
What's next
Work through the service areas your game needs: Identity & Sessions, Social: Friends, Presence & Party, Progression: Achievements, Stats & Leaderboards, Economy: Store, Purchases & DLC, and Platform Services: Cloud Save, User, Voice & External UI. Every type the callbacks hand you is listed in Type Reference.