Unreal Plugin Reference
This section is the complete reference for the Redwood Unreal plugins: every class, component, setting, function, and data structure you're expected to use. If you're integrating Redwood for the first time, start with the Getting Started guide, which walks through the same pieces in order; come back here when you need the exact name, type, or default of something.
Everything here describes the 5.0.0 plugins. C++ names are used throughout; Blueprint nodes have the same names with spaces (e.g. MarkMetadataDirty is the Mark Metadata Dirty node) unless noted otherwise.
The Plugins
The plugins are distributed as source only (there are no prebuilt binaries), so your project must be able to compile C++. See Installing for how to download them. Put the whole repository (including the ThirdParty folder) in your project's Plugins folder.
| Plugin | Version | Modules (type / loading phase) | Depends on | Purpose |
|---|---|---|---|---|
RedwoodCore (shown as Redwood MMO Framework) | 5.0.0 | Redwood (Runtime / PreDefault), RedwoodEditor (Editor / PostDefault), RedwoodTests (Editor / Default) | SocketIOClient, GameplayMessageRouter, LatencyChecker | Everything core: backend connections, auth, characters, servers, persistence, sync, social |
RedwoodChat | 5.0.0 | RedwoodChat (Runtime / PreDefault), RedwoodXMPP (Runtime / PreDefault) | RedwoodCore | Text chat over XMPP |
RedwoodSteam | 5.0.0 | RedwoodSteam (Runtime / PreDefault) | OnlineSubsystem, OnlineSubsystemSteam, RedwoodCore | Steam authentication |
RedwoodEOS | 5.0.0 | RedwoodEOS (Runtime / PreDefault) | OnlineSubsystem, OnlineSubsystemEOS, RedwoodCore | Epic Account Services authentication |
RedwoodGAS | 5.0.0 | RedwoodGAS (Runtime / PreDefault) | RedwoodCore, GameplayAbilities | Gameplay Ability System persistence |
ThirdParty/SocketIOClient (Redwood fork of getnamo's plugin) | 2.7.9 | SocketIOClient, SIOJson, SocketIOLib, CoreUtility (Runtime / PreDefault), SIOJEditorPlugin (Editor) | none | Websocket transport and the USIOJsonObject JSON type |
ThirdParty/LatencyChecker | 1.0 | LatencyChecker (Runtime / Default) | none | Region ping measurement |
ThirdParty/GameplayMessageRouter (from Epic's Lyra sample) | 1.0 | GameplayMessageRuntime (Runtime), GameplayMessageNodes (UncookedOnly) | GameplayTagsEditor | Local, in-process message bus Redwood uses for a few events |
Redwood needs its fork of SocketIOClient (it adds functions like TryGetStringField that Redwood uses). If your project already has the Marketplace/Fab version of SocketIOClient, or its own copy of GameplayMessageRouter (e.g. a Lyra-based project), you'll have two plugins with the same name. Keep only one copy: Redwood's SocketIOClient, and either GameplayMessageRouter (they're the same code).
Supported Engines and Platforms
- Unreal Engine 5.4 and newer. None of the Redwood plugins have engine-version-specific behavior you need to care about.
- Win64, Linux, and Mac.
RedwoodCoredepends onLatencyChecker(Win64, Mac, Linux, LinuxArm64) andSocketIOClient(Win64, Linux, Mac, Android, iOS), so the platforms they share are the onesRedwoodCorebuilds for. Dedicated servers are typically packaged for Linux.
Build.cs Module Names
You only need to change your Build.cs if you reference Redwood types from C++. Blueprint-only use needs no changes (but the plugins still have to compile, so your project needs to be a C++ project).
| If you use this from C++ | Add to PublicDependencyModuleNames |
|---|---|
| RedwoodCore | "Redwood". We also recommend explicitly listing the modules whose types you include directly: "SIOJson" (for USIOJsonObject), "GameplayMessageRuntime" and "GameplayTags" (to broadcast or listen to Redwood gameplay messages), and "Json"/"JsonUtilities" if you use FJsonObject/FJsonObjectConverter. |
| RedwoodChat | "Redwood", "RedwoodChat", and "RedwoodXMPP" (the public chat subsystem header includes XMPP headers, so you need it even though you won't use it directly) |
| RedwoodSteam | "Redwood", "RedwoodSteam" (plus "OnlineSubsystem" if you call the online subsystem yourself) |
| RedwoodEOS | "Redwood", "RedwoodEOS" (plus "OnlineSubsystem" if you call the online subsystem yourself) |
| RedwoodGAS | "Redwood", "RedwoodGAS", "GameplayAbilities", "GameplayTags", "GameplayTasks" |
For example:
PublicDependencyModuleNames.AddRange(new string[] {
"Core", "CoreUObject", "Engine", "InputCore",
"Redwood", "SIOJson"
});
The Data Asset classes URedwoodGameModeAsset, URedwoodMapAsset, and URedwoodSyncItemAsset aren't exported from the Redwood module, so you can't reference them from your own C++ code (you can still create and use them in the editor and from Blueprints).
Client vs. Server
Redwood code runs in both your game clients and your dedicated servers, and it's useful to know which parts run where:
| Runs on | Class | What it does |
|---|---|---|
| Clients | URedwoodClientGameSubsystem | Everything a player does outside of a game server: connect to the Director and Realm, log in, manage characters, join servers, social features. Exposed to Blueprints through async nodes. |
| Servers | URedwoodServerGameSubsystem | Talks to the sidecar that runs next to each game server: receives which map/mode to load, authenticates joining players, saves data, syncs items, and transfers players between zones. |
| Both | URedwoodCommonGameSubsystem | Shared helpers, most importantly ShouldUseBackend. |
The server-side logic is gated by net mode:
URedwoodServerGameSubsystemonly initializes when the game instance starts as a dedicated server or listen server (checked once, when the game instance initializes).- The Redwood game mode classes only change engine behavior when the world is a dedicated or listen server. In Standalone they behave like the normal
AGameModeBase/AGameMode. URedwoodSyncComponentonly registers on dedicated servers.
Whether Redwood talks to the backend at all is decided by URedwoodCommonGameSubsystem::ShouldUseBackend: packaged builds always use the backend, and in the editor it depends on the Use Backend in PIE editor setting. When it's off, Redwood runs in no-backend mode and stores data in JSON files instead.
Class Map
Every user-facing class, and where it's documented:
| Class | Kind | Where it goes | Documented in |
|---|---|---|---|
URedwoodSettings | Developer settings | Project Settings > Plugins > Redwood | Settings |
URedwoodEditorSettings | Developer settings | Editor Preferences > Plugins > Redwood | Settings |
URedwoodClientGameSubsystem | Game instance subsystem | Clients | Client Subsystem |
URedwoodClientInterface | UObject | Clients (used internally by the client subsystem) | Client Subsystem |
URedwoodServerGameSubsystem | Game instance subsystem | Servers | Game Framework |
URedwoodCommonGameSubsystem | Game instance subsystem | Both | Game Framework |
ARedwoodGameModeBase / ARedwoodGameMode | Game mode | Parent of every server game mode | Game Framework |
URedwoodGameStateComponent | Actor component | Your AGameStateBase class | Game Framework |
URedwoodPlayerStateComponent | Actor component | Your APlayerState class | Game Framework |
ARedwoodPlayerState | Player state (deprecated) | Game Framework | |
URedwoodCharacterComponent | Actor component | Your pawn (or player state) | Persistence and Sync |
IRedwoodPersistenceComponentInterface | C++ interface | Your own components | Persistence and Sync |
URedwoodSyncComponent | Actor component | Any synced/persisted actor, or the game state | Persistence and Sync |
URedwoodGameModeAsset | Primary Data Asset | One per backend game profile | Persistence and Sync |
URedwoodMapAsset | Primary Data Asset | One per map used by a profile | Persistence and Sync |
URedwoodSyncItemAsset | Primary Data Asset | One per sync item type | Persistence and Sync |
ARedwoodZoneSpawn | Actor | Placed in levels | Zones and Interactables |
B_PortalSpline / B_PortalComponent | Blueprint actors (plugin content) | Placed on zone boundaries | Zones and Interactables |
ARedwoodInteractable, ARedwoodInteractableProxied, URedwoodInteractComponent, ARedwoodProxy | Actors / component | Interactable objects and your pawn | Zones and Interactables |
ARedwoodClientExecCommand | Actor | Spawned by CallExecCommandOnAllClients | Zones and Interactables |
URedwoodSaveGame | Save game | Written by the client subsystem for "remember me" | Client Subsystem |
Structs and enums (FRedwood*, ERedwood*) | Types | Types | |
URedwoodClientChatSubsystem, URedwoodChatSettings | Subsystem / settings | Clients | Optional Plugins |
URedwoodSteamClientInterface | Static helpers + async node | Clients | Optional Plugins |
URedwoodEOSClientInterface | Static helpers + async node | Clients | Optional Plugins |
URedwoodAbilitySystemComponent | Ability system component | Your pawn or player state | Optional Plugins |
USIOJsonObject, USIOJsonValue, USIOJLibrary | JSON helpers | Anywhere | Optional Plugins |
If you're upgrading an older project, you may see old names in your assets. DefaultRedwoodCore.ini contains [CoreRedirects] so these load correctly: for example RedwoodTitleInterface is now RedwoodClientInterface, RedwoodTitleGameSubsystem is now RedwoodClientGameSubsystem, RedwoodGameSubsystem is now RedwoodServerGameSubsystem, RedwoodPersistenceComponent is now RedwoodSyncComponent, and RedwoodPersistentItemAsset is now RedwoodSyncItemAsset. "Server" in older function and struct names generally became "Proxy" (e.g. CreateServer is now CreateProxy).