Skip to main content

Console Variables

This page lists 51 crowdy.* console entries. They come in three kinds: trace gates that turn on informational logging for one area, behavior switches that change what the SDK does, and diagnostic commands that run once and hold no stored value. A row badged Editor only exists only in the editor process. Five of the diagnostic commands (crowdy.rpc.dumpfn, crowdy.state.heartbeat.advisories, crowdy.registry.dump, crowdy.mass.derive, crowdy.mass.state.verdict) and every other crowdy.mass.* entry are compiled out of a Shipping build and are absent there rather than silent; every other row ships in Development and Shipping.

When you land here​

You want to know what a crowdy.* name does before you type it, or you are looking for the switch that turns on a specific area's logging. For the workflow around them (loopback testing, two-PIE setups), see Testing locally; this page is the lookup table.

Trace gates​

All 19 are off by default. Seventeen turn on that area's informational lines when set to 1; the two .scopes entries add Unreal Insights CPU scopes instead and log nothing. Warnings and errors print regardless of the setting.

NameKindRoleTrace gateHelpModule
crowdy.entity.tracevariabletraceyesWhen non-zero, logs CrowdyReplication entity activity: registry add/remove, event routing and dispatch, entity components, and actor tracking/management. Off by default.CrowdyReplication
crowdy.exec.tracevariabletraceyesWhen non-zero, logs Server Object activity: status changes, applied reads and pushes with their epoch and seq, re-reads, subscribes, calls and the connection. Never values or tokens. Off by default.CrowdyExec
crowdy.hud.tracevariabletraceyesWhen non-zero, logs CrowdyServices HUD activity: HUD base and widgets. Off by default.CrowdyServices
crowdy.mass.anim.tracevariabletraceyesLog every animation sequence index the Crowdy animation processor writes, per entity.CrowdyMass
crowdy.mass.neartier.tracevariabletraceyesSay when a crowd entity gains a near tier actor, whether that actor was built or taken from the pool, and when it goes back. 1 on, 0 off.CrowdyMass
crowdy.mass.nodes.trace Editor onlyvariabletraceyesLog where the Call Crowdy Event on Entity dropdown's entries came from (0 = off, 1 = on).CrowdyMassNodes
crowdy.net.tracevariabletraceyesWhen non-zero, logs CrowdyNet UDP transport activity: socket open/close, message sends and receives, worker-thread pool, and buffer pool churn. Off by default.CrowdyNet
crowdy.pool.tracevariabletraceyesWhen non-zero, logs CrowdyReplication actor-pool activity: spawn, release, reuse, and rendering-backend churn. Off by default.CrowdyReplication
crowdy.query.tracevariabletraceyesWhen non-zero, logs CrowdyNet GraphQL activity: query dispatch and responses. Off by default.CrowdyNet
crowdy.rpc.reliable.tracevariabletraceyesWhen non-zero, logs just the reliable (channel-transport) RPC path: a Multicast CrowdyEvent's channel send and the matching receive on every member. Narrower than crowdy.rpc.trace, which covers all RPC sends and receives; either one surfaces the reliable lines.CrowdyReplication
crowdy.rpc.tracevariabletraceyesWhen non-zero, logs every CrowdyEvent RPC send and receive: function, entity, addressing, owned/delegated classification, and parameter byte size.CrowdyReplication
crowdy.sdk.tracevariabletraceyesWhen non-zero, logs top-level CrowdySDK activity: subsystem lifecycle and configuration / gameplay-tag path registration. Off by default.CrowdySDK
crowdy.serialize.scopesvariabletraceyesWhen non-zero, emits the fine-grained CPU trace scopes inside payload decode. Each one costs two timestamps per received message and is nested inside a scope that is itself measured, so it is off by default and a reading must say whether the run carried it.CrowdyNet
crowdy.serialize.tracevariabletraceyesWhen non-zero, logs CrowdyNet payload serialization: message encode/decode and payload/class registry resolves. High frequency, so off by default.CrowdyNet
crowdy.services.tracevariabletraceyesWhen non-zero, logs CrowdyServices activity: authentication, teams, avatars, persistence, host subsystem, utilities, and Blueprint reception. Off by default.CrowdyServices
crowdy.state.scopesvariabletraceyesWhen non-zero, emits a CPU trace scope around each CrowdyState delta decode. Nested inside the enclosing delivery scope, so it shifts that scope's own figure: turn it on only for a run that needs the split. Off by default.CrowdyReplication
crowdy.state.tracevariabletraceyesWhen non-zero, logs CrowdyReplication CrowdyState replicator activity: owned-entity diffing, delta emission, and datagram sizes. Off by default.CrowdyReplication
crowdy.studio.trace Editor onlyvariabletraceyesWhen non-zero, logs each CrowdyStudio console GraphQL op: its plane, operation name, and outcome (HTTP code, error count). The bearer token is never logged. Off by default.CrowdyStudio
crowdy.voice.tracevariabletraceyesWhen non-zero, logs CrowdyVoice activity: microphone, playback and audio device changes. Off by default.CrowdyVoice
crowdy.serialize.trace and crowdy.serialize.scopes are high frequency.

They log on every message encode and decode. Leave them off unless you are actively debugging serialization.

crowdy.net.trace logs every routed send and every received spatial message.

Since 2.17.0 it also prints one line per spatial message received ("Received opcode ... for actor ... in chunk ...") and the transport's totals (datagrams received, verification failures, drops) about once a second. That is what tells "the server never sent it" apart from "the client dropped it"; it is too chatty to leave on.

crowdy.serialize.scopes and crowdy.state.scopes are nested CPU trace scopes.

Each nests inside a wider enclosing scope, so turning one on shifts the timing you read for that enclosing scope too. If you are taking a performance reading, say whether the flag was on.

crowdy.studio.trace and crowdy.mass.nodes.trace are editor only. crowdy.studio.trace never logs the bearer token, a pattern worth copying in your own logging around Studio calls.

Behavior switches​

These change what the SDK does rather than what it logs. None of the 24 exist only in the editor.

NameKindRoleTrace gateHelpModuleWhere the Help cell is empty
crowdy.kit.emotes.burstvariablebehaviourHow many inbound emotes may arrive at once before the per-second budget applies (default 16).CrowdyReplication
crowdy.kit.emotes.maxpersecondvariablebehaviourHow many inbound emotes per second are read, shared by every sender (default 64). Emotes over the budget are dropped before they are parsed.CrowdyReplication
crowdy.kit.emotes.persender.burstvariablebehaviourHow many inbound emotes one sender may send at once before its per-second budget applies (default 4).CrowdyReplication
crowdy.kit.emotes.persender.maxpersecondvariablebehaviourHow many inbound emotes per second are read from one sender (default 4). The shared budget still caps all senders together.CrowdyReplication
crowdy.mass.anim.dumpvariablebehaviourWhile set to 1, log a summary of the animation sets in use and of the instance batches handed to each instanced skinned mesh component, once per second. Set back to 0 to stop.CrowdyMass
crowdy.mass.anim.forcevariablebehaviourForce this animation bank sequence index on every Mass entity the Crowdy animation processor sees. A negative value disables forcing, which is the default.CrowdyMass
crowdy.mass.derive.forcevariablebehaviourSpawn every remote entity from a Mass entity config built out of its own class, pushing aside the per-class binding, the backend override and the project-wide Remote Entity Config. 1 on, 0 off. The class's animation set is pushed aside with it, so the entity animates from the set and the Bank the class itself declares, and an entity that appears in bind pose under this is showing what an unconfigured class carries. Entities already spawned keep the config they were built from; every class's animation answer is worked out again.CrowdyMass
crowdy.mass.event.proxyvariablebehaviourRun an inbound event's own body on a per-class stand-in for entities held here as rows. 1 on, 0 off. Off, an event nothing registered a handler for lands nothing beyond the action write a declared action gets, which is what this client did before the stand-in existed.CrowdyMass
crowdy.mass.interp.adaptivevariablebehaviourReplay each remote segment over the observed arrival interval. 1 on, 0 off (fixed duration), -1 to follow the project setting.CrowdyMass
crowdy.mass.interp.maxvariablebehaviourLongest span a remote segment may be replayed over, in seconds. Negative to follow the project setting.CrowdyMass
crowdy.mass.interp.minvariablebehaviourShortest span a remote segment may be replayed over, in seconds. Negative to follow the project setting.CrowdyMass
crowdy.mass.interp.overshootvariablebehaviourHow much longer than the observed arrival interval a remote segment is replayed over. Negative to follow the project setting.CrowdyMass
crowdy.net.http2variablebehaviourAsks for HTTP/2 on the SDK's own requests, falling back to HTTP/1.1 when the server does not offer it; 0 leaves the engine's HTTP version. With HTTP/2 the curl diagnostics the engine logs for a failed request can include the request headers, bearer token included, so set 0 if you ship logs from builds with logging enabled.CrowdyCppBridge
crowdy.net.receive.maxdrainmsvariablebehaviourCrowdyNetHow many milliseconds of one frame may be spent delivering inbound messages. Raise the message count first. Default 4.
crowdy.net.receive.maxmessagesvariablebehaviourCrowdyNetHow many inbound replication messages one frame may deliver; whatever is left waits for the next frame. Default 3072.
crowdy.net.receive.poolactorupdatesvariablebehaviourReuse actor update message objects instead of allocating one per received message (default 1). Turn it off to measure what the pool is worth on the same build.CrowdyNet
crowdy.net.recv.signedbundlesvariablebehaviourCrowdyNetTell the replication server this client reads signed inbound bundles, so notifications arrive with one signature per datagram instead of one per member. A server older than v0.30.0 ignores it. Default 1, read when a connection opens.
crowdy.net.retry.busyvariablebehaviourSends an SDK query, a password sign-in or an app-token mint or refresh again, up to 3 times with backoff, when the platform refuses it and says to retry (blame PLATFORM, retryable). 0 hands every refusal straight to the caller.CrowdyCppBridge
crowdy.net.send.bundlevariablebehaviourCrowdyNetPack one network pass's outbound messages into one datagram. Needs a replication server of v0.27.0 or later; against an older one every bundled message is dropped together. Default 1, read when a connection opens.
crowdy.replication.tracker.maxgatheredupdatesvariablebehaviourCrowdyReplicationHow many actor updates for already-tracked actors may be gathered before the backlog is discarded; reached only when the world tick is not consuming them. Default 8192.
crowdy.replication.tracker.maxqueuedupdatesvariablebehaviourCrowdyReplicationHow many updates for actors not yet on screen may wait for a worker thread before further ones are dropped, counted, and reported once a second; reached only when the worker pool is not draining them. A dropped actor appears on a later update. Default 8192.
crowdy.rpc.allowObjectLoadvariablebehaviourWhen non-zero, a received object or class reference whose asset is not already resident is loaded from disk by path. Default 0 (find-only) so an untrusted peer cannot trigger arbitrary asset loads; an unresolved reference is delivered as null.CrowdyReplication
crowdy.rpc.loopbackvariablebehaviourWhen non-zero, a sent replicated CrowdyEvent is also delivered to this client's own receive path, so the whole serialize/resolve/dispatch round-trip can be tested without a second client. The call runs once locally through that path; a call made from the replayed body is sent normally but does not loop back, so there is no cascade.CrowdyReplication
crowdy.state.loopbackvariablebehaviourWhen non-zero, a sent CrowdyState delta for an owned entity is also decoded onto a local 'mirror' entity (a lazily-spawned second instance of the same class, RemoteProxy role, a distinct NetID) so decode/OnRep/host-authority checks can be exercised from one PIE client. Unlike crowdy.rpc.loopback this cannot replay onto the same actor (an owner's own entity silently drops a non-host-sourced delta, and decode's changed-detection would report no change against identical values); the mirror is a genuinely distinct receive target instead.CrowdyReplication

The notes map above stands in for these six rows because the surface exporter drops a CVar help built from adjacent TEXT() literals.

Turn crowdy.net.http2 off if you ship, or collect logs from, a build with logging enabled.

On by default, it asks for HTTP/2 on the SDK's own requests (falling back to HTTP/1.1 when the server does not offer it); the game's other HTTP traffic and the engine's http.CurlAllowHTTP2 are untouched. With HTTP/2, when a request fails at the network level (not a cancel or a timeout), the curl diagnostics the engine logs at Warning can include the request headers, bearer token included. A default Shipping build compiles logging out, so most projects never see this; if yours ships or collects logs from a build with logging enabled, set crowdy.net.http2 0.

crowdy.net.retry.busy resends a refusal the platform blames on itself before the caller ever sees Failed.

On by default. An SDK query resends on any platform-blamed retryable refusal except WRONG_DATACENTER and APP_UNAVAILABLE. At most 3 retries, with the server's suggested wait when it names one or a doubling local wait otherwise. Password sign-in, the app token mint and the app token refresh are retried the same way when the platform answers that it is busy, and a retried request is dropped if the account's token changed meanwhile. Registration, link and social completion, password changes, email sends, logout and account deletion are never retried. Turn it off (0) only to compare against the un-retried behavior; leave it on for a shipping build.

crowdy.kit.emotes.* cap the emotes a client will read, per sender and across all senders.

Each sender has its own small budget, and every emote also has to fit one budget shared across all senders. crowdy.kit.emotes.persender.maxpersecond (default 4) is how fast one sender's budget refills; crowdy.kit.emotes.persender.burst (default 4) is the most it holds. The per-sender budget is checked first, so one player flooding emotes runs out of their own budget and no longer uses up the shared one. An emote the shared budget drops costs its sender nothing. A client tracks at most 256 senders, and when that is full the sender that has been silent longest is forgotten.

The shared budget exists because a sender id is only what the sender claims. crowdy.kit.emotes.maxpersecond (default 64) is how fast it refills; crowdy.kit.emotes.burst (default 16) is the most it holds. An emote over either budget is dropped before it is read, with one Warning in the log. A peer that forges a player's id can use up that player's per-sender budget, which costs that player nothing but their own emotes. Raise the numbers only if a busy scene legitimately sends more emotes than that. See Send an emote.

Leave crowdy.rpc.allowObjectLoad off in production.

While it is off, an untrusted peer cannot trigger an arbitrary asset load; an unresolved object or class reference in a received RPC is delivered as null instead.

crowdy.rpc.loopback and crowdy.state.loopback are not the same switch wearing two names. crowdy.rpc.loopback delivers a sent event back to your own receive path. crowdy.state.loopback cannot replay onto the same actor that sent the delta: an owner's own entity drops a non-host-sourced delta, and changed-detection on decode sees no change against identical values. Instead it spawns a distinct, lazily-created mirror entity and replays deltas onto that, so CrowdyOnRep still fires with one PIE client. Expect two entities, not one, when you turn it on.

crowdy.net.receive.poolactorupdates defaults to 1 (pooling on). Turning it off is for an A/B measurement against the same build, not a fix for anything.

Diagnostic commands​

Eight commands with no stored value. Only crowdy.rpc.dumpfn and crowdy.mass.derive take arguments and print usage without them; every other command acts as soon as you run it. Five are compiled out of a Shipping build: crowdy.rpc.dumpfn, crowdy.state.heartbeat.advisories, crowdy.registry.dump, crowdy.mass.derive and crowdy.mass.state.verdict. crowdy.registry.dump logs every entry the cook baked into the registry, one line each: the structs and their layout hashes, the CrowdyState properties, and the CrowdyEvent functions, with their ids. It is the console version of the Registry page (see Inspector and Registry).

NameKindRoleTrace gateHelpModuleBuild
crowdy.auth.consent.previewcommandcommandShows the consent prompt over the game viewport without recording anything; Accept and Decline only close it.CrowdyServices
crowdy.auth.signin.filecommandcommandSigns in with the password account in a JSON file, {"email": "...", "password": "..."}, for headless smoke tests. For test accounts and development builds only: the password sits in that file, so keep it out of source control. Never type a password as a console argument, which the console logs. Args: <path to the file>.CrowdyServices
crowdy.auth.signoutcommandcommandSigns the player out through the SDK's normal logout.CrowdyServices
crowdy.auth.statuscommandcommandPrints whether this game instance is signed in, the user id, whether the app token is set and when it expires, and whether the app is paused. Never prints a token.CrowdyServices
crowdy.cpp.selftestcommandcommandLink + exception-containment self test for the vendored CrowdyCPP library.CrowdyCppBridgeEvery build
crowdy.mass.derivecommandcommandSays what a Mass entity config derived from an actor class would contain, without spawning anything. Args: <class>, a short name, an asset path or a full object path.Usage: crowdy.mass.derive <class>, a short name, an asset path or a full object path.crowdy.mass.derive:CrowdyMassNot in Shipping
crowdy.mass.state.verdictcommandcommandPrint one block describing whether CrowdyState is reaching crowd entities: every replicated property no fragment field claims, deltas claimed and applied, every drop reason, and which road wrote the pose. Paste the whole block when reporting a gate.CrowdyMassNot in Shipping
crowdy.net.routescommandcommandPrints the network router's subscription table: every payload key and opcode, with the struct behind it where one is registered, and every subscriber by role.CrowdyNetEvery build
crowdy.registry.dumpcommandcommandLogs every entry of the baked registry, one line each: persistent and singleton structs, layout hashes, CrowdyState properties and CrowdyEvent functions with their ids.CrowdyReplicationNot in Shipping
crowdy.rpc.dumpfncommandcommandReports what a Crowdy event is in this process: resolved, replicated, its recipient, its FunctionID, and whether its compiled body carries the dispatch gate. Args: <ClassPathOrName> <FunctionName>. A Blueprint class name ends in _C.CrowdyReplicationNot in Shipping
crowdy.state.heartbeat.advisoriescommandcommandLists every CrowdyState enum property this process found outside the keyframe heartbeat, and how many resolutions each one's single warning stands for.CrowdyReplicationNot in Shipping
crowdy.rpc.dumpfn and crowdy.state.heartbeat.advisories print structured text you can paste directly into a bug report.

The development-build sign-in commands crowdy.auth.signin.file, crowdy.auth.status and crowdy.auth.signout are described under Sign in from the console.

crowdy.cpp.selftest and crowdy.net.routes carry no build guard, so they exist in every build including Shipping; the four diagnostics above do not, and a Shipping console answers them with an unknown command.

Gotchas​

  • Warnings and errors are never gated behind a trace flag. They print under the module's log category no matter what.
  • crowdy.net.receive.maxdrainms (4 ms) and crowdy.net.receive.maxmessages (3072) bound one frame's receive drain. If drains keep ending on the time budget, delivery is costing more per message than the frame can afford, and raising the count is not the lever.