Classes and Subsystems
The consumer-facing classes you fetch most, with the module they live in and where to read more. The manifest carries 31 classes tagged as subsystems; 8 are excluded here because they are internal plumbing or deprecated, listed at the bottom of this page for completeness.
When you come here
You know the shape of what you need (send an event, read a team, elect a host) but not which class owns it, or you want the one-line reminder of what a class you already use is for.
| Class | Base | Outer | Module | Read more | What it is for |
|---|---|---|---|---|---|
UCrowdySDKSubsystem | UGameInstanceSubsystem | GameInstance | CrowdySDK | whats-changed | Sign-in, UDP connection, and voice. Sign-in returns the identity session token; the UDP connection uses an app-scoped token minted after sign-in. |
UCrowdyGameSession | UGameInstanceSubsystem | GameInstance | CrowdyNet | authentication | The client's own connection and sign-in state: app id, user id, this client's actor identity, and the elected host. |
UCrowdyUDPSubsystem | UGameInstanceSubsystem | GameInstance | CrowdyNet | connection-and-reconnect | Owns the realtime UDP connection: connect, disconnect, and the receive drain that feeds every other plane. |
UCrowdyActorManager | UTickableWorldSubsystem | World | CrowdyReplication | continuous-state | Spawns and destroys the actor for a remote entity and keeps the entity id to actor mapping. |
UCrowdyActorPoolSubsystem | UWorldSubsystem | World | CrowdyReplication | rendering-backends | The default rendering backend: draws replicated entities from a pool of reusable actors instead of spawning one per entity. |
UCrowdyActorTracker | UTickableWorldSubsystem | World | CrowdyReplication | entities-and-spawning | Receives remote entities' continuous-state updates, hands them on once a frame, and raises On Remote Entity Appeared, Timed Out and Left for the actor manager and your Blueprints. |
UCrowdyAutoRegistry | UGameInstanceSubsystem | GameInstance | CrowdyReplication | rpc-events-cpp | Builds the wire-type and CrowdyEvent function registries at startup and on each world init; the event router resolves an incoming call's class and function id through it. |
UCrowdyAutoReplicator | UTickableWorldSubsystem | World | CrowdyReplication | Ticks the continuous-state plane: polls each Dynamic entity's executor on its owner, decides full update, heartbeat or nothing per interval, and sends the snapshot. | |
UCrowdyEntitySubsystem | UWorldSubsystem | World | CrowdyReplication | entities-and-spawning | The entity registry and the spawn and destroy path. Also enrolls non-actor participants and drives ownership transfer; FindParticipant looks one up by entity id. |
UCrowdyEventRouter | UTickableWorldSubsystem | World | CrowdyReplication | recipients-and-routing | Routes an incoming CrowdyEvent RPC to the receiving function once it is decoded. |
UCrowdyKitActorSubsystem | UWorldSubsystem | World | CrowdyReplication | ||
UCrowdyKitEmotes | UWorldSubsystem | World | CrowdyReplication | play-together | |
UCrowdyReplicatedGameInstanceSubsystem | UGameInstanceSubsystem | GameInstance | CrowdyReplication | replicated-subsystems | Optional base class that enrolls and unenrolls a game-instance-scoped subsystem for replication automatically. |
UCrowdyReplicatedWorldSubsystem | UWorldSubsystem | World | CrowdyReplication | replicated-subsystems | Optional base class that enrolls and unenrolls a world-scoped subsystem for replication automatically. |
UCrowdyStateReplicator | UTickableWorldSubsystem | World | CrowdyReplication | crowdy-state | Ticks the Crowdy State plane: diffs owned entities, sends and receives property deltas; MarkAllStateDirty forces a full resend of every owned entity's state. |
UCrowdyVideoFrameReceiver | UWorldSubsystem | World | CrowdyReplication | video-frames | Receives raw encoded video frames sent over the SDK's channels and hands them to your decoder. |
UCrowdyAuthentication | UGameInstanceSubsystem | GameInstance | CrowdyServices | authentication | Owns sign-in (email and password, magic link, social), the app-scoped token mint and refresh lifecycle, and encrypted session persistence. |
UCrowdyAvatars | UGameInstanceSubsystem | GameInstance | CrowdyServices | avatars | Player profiles and per-app avatar state; only GetMyAvatars writes the local cache. |
UCrowdyChannels | UGameInstanceSubsystem | GameInstance | CrowdyServices | channels | Create and manage channels, channel membership, and raw channel messages. |
UCrowdyHostSubsystem | UWorldSubsystem | World | CrowdyServices | host-election | Host election and the server-validated host query. |
UCrowdyKitSocial | UGameInstanceSubsystem | GameInstance | CrowdyServices | play-together | |
UCrowdyPlayers | UGameInstanceSubsystem | GameInstance | CrowdyServices | player-names | |
UCrowdyProximityChat | UGameInstanceSubsystem | GameInstance | CrowdyServices | nearby-text-chat | Nearby text chat: send a line to the players within a distance of your pawn's chunk, and hear theirs. |
UCrowdyTeams | UGameInstanceSubsystem | GameInstance | CrowdyServices | teams | Create, join, leave, and query teams and roles at runtime. |
UVoiceChatSubsystem | UTickableWorldSubsystem | World | CrowdyVoice | voice-chat | The voice capture and playback of one map. A world subsystem; use the voice nodes on UCrowdySDKSubsystem, which carry their settings from map to map. |
UCrowdyServerObjectSubsystem | UGameInstanceSubsystem | GameInstance | CrowdyExec | whats-changed | |
UCrowdyMassEntitySubsystem | UWorldSubsystem | World | CrowdyMass | whats-changed | The crowd rows of a map that draws with Mass: targets, traces, events and fields. A world subsystem that exists only when the map profile selects the Crowdy Mass Rendering Backend; check it for null. |
UCrowdyMassServerRecordsSubsystem | UWorldSubsystem | World | CrowdyMass | whats-changed | The Server Object records of crowd rows, and a callback when one changes. A world subsystem that exists only when the map profile selects the Crowdy Mass Rendering Backend; check it for null. |
Fetching a subsystem
How you fetch a subsystem depends on its scope. Game instance subsystems come from the game instance, world subsystems come from the world.
Game instance subsystems:
UCrowdySDKSubsystem* SDK = GetGameInstance()->GetSubsystem<UCrowdySDKSubsystem>();
UCrowdyTeams* Teams = GetGameInstance()->GetSubsystem<UCrowdyTeams>();
World subsystems:
UCrowdyEntitySubsystem* Entities = GetWorld()->GetSubsystem<UCrowdyEntitySubsystem>();
Blueprint function libraries (UCrowdyUtilities, UCrowdyStateBlueprintLibrary, UCrowdyOwnershipTransfer, UCrowdyReplicatedSubsystemLibrary) are static and need no fetch; see Entities and spawning, Marking state from outside the actor, Ownership transfer and Replicated subsystems.
Excluded from this table
Eight of the manifest's 31 subsystem classes do not appear in the table above:
UCrowdyCppClientSubsystem,UCrowdyCppReplicationSubsystem,UCrowdySDKBridgeSubsystem,UCrowdyWorkerThreadsSubsystem: the vendored CrowdyCPP bridge and its worker threads. The game-facing surface isUCrowdySDKSubsystem; see Connection and reconnect.UCrowdyConnectionMonitor: the SDK reconnects on its own after a timeout, so starting the monitor adds a second retry loop. What it reports is covered on Connection and reconnect.- Two test harnesses in the Mass module that the SDK uses to verify itself. They are not part of the surface a game uses.
UCrowdyPersistenceSubsystem: superseded by server code on ck-exec; still present and working, and the plugin does not mark it deprecated. It reads theCrowdyPersistentandCrowdySingletonstruct tags. See What's Changed for what still works and what does not get further development.
Gotchas
- A world subsystem needs a valid world; fetch it after
BeginPlay, not in a constructor. - Read the Outer column for scope; the class name does not always say it (
UCrowdyGameSessionis a game instance subsystem,UCrowdyHostSubsystema world one). UCrowdySDKDeveloperSettingslooks like it belongs here but is not a subsystem at all; it lives on Project Settings.