Skip to main content

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.

Every subsystem here initializes automatically. You fetch it, you never create one.
ClassBaseOuterModuleRead moreWhat it is for
UCrowdySDKSubsystemUGameInstanceSubsystemGameInstanceCrowdySDKwhats-changedSign-in, UDP connection, and voice. Sign-in returns the identity session token; the UDP connection uses an app-scoped token minted after sign-in.
UCrowdyGameSessionUGameInstanceSubsystemGameInstanceCrowdyNetauthenticationThe client's own connection and sign-in state: app id, user id, this client's actor identity, and the elected host.
UCrowdyUDPSubsystemUGameInstanceSubsystemGameInstanceCrowdyNetconnection-and-reconnectOwns the realtime UDP connection: connect, disconnect, and the receive drain that feeds every other plane.
UCrowdyActorManagerUTickableWorldSubsystemWorldCrowdyReplicationcontinuous-stateSpawns and destroys the actor for a remote entity and keeps the entity id to actor mapping.
UCrowdyActorPoolSubsystemUWorldSubsystemWorldCrowdyReplicationrendering-backendsThe default rendering backend: draws replicated entities from a pool of reusable actors instead of spawning one per entity.
UCrowdyActorTrackerUTickableWorldSubsystemWorldCrowdyReplicationentities-and-spawningReceives 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.
UCrowdyAutoRegistryUGameInstanceSubsystemGameInstanceCrowdyReplicationrpc-events-cppBuilds 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.
UCrowdyAutoReplicatorUTickableWorldSubsystemWorldCrowdyReplicationTicks 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.
UCrowdyEntitySubsystemUWorldSubsystemWorldCrowdyReplicationentities-and-spawningThe entity registry and the spawn and destroy path. Also enrolls non-actor participants and drives ownership transfer; FindParticipant looks one up by entity id.
UCrowdyEventRouterUTickableWorldSubsystemWorldCrowdyReplicationrecipients-and-routingRoutes an incoming CrowdyEvent RPC to the receiving function once it is decoded.
UCrowdyKitActorSubsystemUWorldSubsystemWorldCrowdyReplication
UCrowdyKitEmotesUWorldSubsystemWorldCrowdyReplicationplay-together
UCrowdyReplicatedGameInstanceSubsystemUGameInstanceSubsystemGameInstanceCrowdyReplicationreplicated-subsystemsOptional base class that enrolls and unenrolls a game-instance-scoped subsystem for replication automatically.
UCrowdyReplicatedWorldSubsystemUWorldSubsystemWorldCrowdyReplicationreplicated-subsystemsOptional base class that enrolls and unenrolls a world-scoped subsystem for replication automatically.
UCrowdyStateReplicatorUTickableWorldSubsystemWorldCrowdyReplicationcrowdy-stateTicks the Crowdy State plane: diffs owned entities, sends and receives property deltas; MarkAllStateDirty forces a full resend of every owned entity's state.
UCrowdyVideoFrameReceiverUWorldSubsystemWorldCrowdyReplicationvideo-framesReceives raw encoded video frames sent over the SDK's channels and hands them to your decoder.
UCrowdyAuthenticationUGameInstanceSubsystemGameInstanceCrowdyServicesauthenticationOwns sign-in (email and password, magic link, social), the app-scoped token mint and refresh lifecycle, and encrypted session persistence.
UCrowdyAvatarsUGameInstanceSubsystemGameInstanceCrowdyServicesavatarsPlayer profiles and per-app avatar state; only GetMyAvatars writes the local cache.
UCrowdyChannelsUGameInstanceSubsystemGameInstanceCrowdyServiceschannelsCreate and manage channels, channel membership, and raw channel messages.
UCrowdyHostSubsystemUWorldSubsystemWorldCrowdyServiceshost-electionHost election and the server-validated host query.
UCrowdyKitSocialUGameInstanceSubsystemGameInstanceCrowdyServicesplay-together
UCrowdyPlayersUGameInstanceSubsystemGameInstanceCrowdyServicesplayer-names
UCrowdyProximityChatUGameInstanceSubsystemGameInstanceCrowdyServicesnearby-text-chatNearby text chat: send a line to the players within a distance of your pawn's chunk, and hear theirs.
UCrowdyTeamsUGameInstanceSubsystemGameInstanceCrowdyServicesteamsCreate, join, leave, and query teams and roles at runtime.
UVoiceChatSubsystemUTickableWorldSubsystemWorldCrowdyVoicevoice-chatThe voice capture and playback of one map. A world subsystem; use the voice nodes on UCrowdySDKSubsystem, which carry their settings from map to map.
UCrowdyServerObjectSubsystemUGameInstanceSubsystemGameInstanceCrowdyExecwhats-changed
UCrowdyMassEntitySubsystemUWorldSubsystemWorldCrowdyMasswhats-changedThe 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.
UCrowdyMassServerRecordsSubsystemUWorldSubsystemWorldCrowdyMasswhats-changedThe 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 is UCrowdySDKSubsystem; 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 the CrowdyPersistent and CrowdySingleton struct 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 (UCrowdyGameSession is a game instance subsystem, UCrowdyHostSubsystem a world one).
  • UCrowdySDKDeveloperSettings looks like it belongs here but is not a subsystem at all; it lives on Project Settings.