Skip to main content
Version: 5.x

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.

PluginVersionModules (type / loading phase)Depends onPurpose
RedwoodCore (shown as Redwood MMO Framework)5.0.0Redwood (Runtime / PreDefault), RedwoodEditor (Editor / PostDefault), RedwoodTests (Editor / Default)SocketIOClient, GameplayMessageRouter, LatencyCheckerEverything core: backend connections, auth, characters, servers, persistence, sync, social
RedwoodChat5.0.0RedwoodChat (Runtime / PreDefault), RedwoodXMPP (Runtime / PreDefault)RedwoodCoreText chat over XMPP
RedwoodSteam5.0.0RedwoodSteam (Runtime / PreDefault)OnlineSubsystem, OnlineSubsystemSteam, RedwoodCoreSteam authentication
RedwoodEOS5.0.0RedwoodEOS (Runtime / PreDefault)OnlineSubsystem, OnlineSubsystemEOS, RedwoodCoreEpic Account Services authentication
RedwoodGAS5.0.0RedwoodGAS (Runtime / PreDefault)RedwoodCore, GameplayAbilitiesGameplay Ability System persistence
ThirdParty/SocketIOClient (Redwood fork of getnamo's plugin)2.7.9SocketIOClient, SIOJson, SocketIOLib, CoreUtility (Runtime / PreDefault), SIOJEditorPlugin (Editor)noneWebsocket transport and the USIOJsonObject JSON type
ThirdParty/LatencyChecker1.0LatencyChecker (Runtime / Default)noneRegion ping measurement
ThirdParty/GameplayMessageRouter (from Epic's Lyra sample)1.0GameplayMessageRuntime (Runtime), GameplayMessageNodes (UncookedOnly)GameplayTagsEditorLocal, in-process message bus Redwood uses for a few events
warning

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. RedwoodCore depends on LatencyChecker (Win64, Mac, Linux, LinuxArm64) and SocketIOClient (Win64, Linux, Mac, Android, iOS), so the platforms they share are the ones RedwoodCore builds 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"
});
note

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 onClassWhat it does
ClientsURedwoodClientGameSubsystemEverything 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.
ServersURedwoodServerGameSubsystemTalks 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.
BothURedwoodCommonGameSubsystemShared helpers, most importantly ShouldUseBackend.

The server-side logic is gated by net mode:

  • URedwoodServerGameSubsystem only 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.
  • URedwoodSyncComponent only 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:

ClassKindWhere it goesDocumented in
URedwoodSettingsDeveloper settingsProject Settings > Plugins > RedwoodSettings
URedwoodEditorSettingsDeveloper settingsEditor Preferences > Plugins > RedwoodSettings
URedwoodClientGameSubsystemGame instance subsystemClientsClient Subsystem
URedwoodClientInterfaceUObjectClients (used internally by the client subsystem)Client Subsystem
URedwoodServerGameSubsystemGame instance subsystemServersGame Framework
URedwoodCommonGameSubsystemGame instance subsystemBothGame Framework
ARedwoodGameModeBase / ARedwoodGameModeGame modeParent of every server game modeGame Framework
URedwoodGameStateComponentActor componentYour AGameStateBase classGame Framework
URedwoodPlayerStateComponentActor componentYour APlayerState classGame Framework
ARedwoodPlayerStatePlayer state (deprecated)Game Framework
URedwoodCharacterComponentActor componentYour pawn (or player state)Persistence and Sync
IRedwoodPersistenceComponentInterfaceC++ interfaceYour own componentsPersistence and Sync
URedwoodSyncComponentActor componentAny synced/persisted actor, or the game statePersistence and Sync
URedwoodGameModeAssetPrimary Data AssetOne per backend game profilePersistence and Sync
URedwoodMapAssetPrimary Data AssetOne per map used by a profilePersistence and Sync
URedwoodSyncItemAssetPrimary Data AssetOne per sync item typePersistence and Sync
ARedwoodZoneSpawnActorPlaced in levelsZones and Interactables
B_PortalSpline / B_PortalComponentBlueprint actors (plugin content)Placed on zone boundariesZones and Interactables
ARedwoodInteractable, ARedwoodInteractableProxied, URedwoodInteractComponent, ARedwoodProxyActors / componentInteractable objects and your pawnZones and Interactables
ARedwoodClientExecCommandActorSpawned by CallExecCommandOnAllClientsZones and Interactables
URedwoodSaveGameSave gameWritten by the client subsystem for "remember me"Client Subsystem
Structs and enums (FRedwood*, ERedwood*)TypesTypes
URedwoodClientChatSubsystem, URedwoodChatSettingsSubsystem / settingsClientsOptional Plugins
URedwoodSteamClientInterfaceStatic helpers + async nodeClientsOptional Plugins
URedwoodEOSClientInterfaceStatic helpers + async nodeClientsOptional Plugins
URedwoodAbilitySystemComponentAbility system componentYour pawn or player stateOptional Plugins
USIOJsonObject, USIOJsonValue, USIOJLibraryJSON helpersAnywhereOptional Plugins
Renamed classes

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).