GameClientBootstrap
Startup contract for browser game clients. Fetch this after login to initialize protocol/version checks and UDP proxy state in one round trip.
type GameClientBootstrap {
appId: BigInt!
me: User!
versionInfo: ServerVersionInfo!
udpProxyConnectionStatus: UdpProxyConnectionStatus!
realtimeProtocol: String!
subscriptionName: String!
maxReplicationDistance: Int!
maxDecayRate: Int!
sequenceNumberModulo: Int!
binaryRelayEnabled: Boolean!
binaryRelayPath: String!
binaryRelayProtocol: String!
discoveryUrl: String
gameApiUrl: String
gameApiWsUrl: String
}
Fields
GameClientBootstrap.appId ● BigInt! non-null scalar
The app (game) this bootstrap was requested for, echoed back. A BigInt as a decimal string. Reuse this exact appId to scope the udpNotifications subscription and on every spatial send for this play session.
GameClientBootstrap.me ● User! non-null object
The authenticated user resolved from the bearer game token on the request. Use this for the local player identity instead of a separate me call.
GameClientBootstrap.versionInfo ● ServerVersionInfo! non-null object
Current server version and the minimum client version the server accepts. Compare your build against minimumClientVersion before connecting; prompt the player to update if it is too old.
GameClientBootstrap.udpProxyConnectionStatus ● UdpProxyConnectionStatus! non-null object
UDP proxy session status for this game token at bootstrap time. connected is false until you open a session (via connectUdpProxy, any send* mutation, or subscribing to udpNotifications); fetching the bootstrap does not open one.
GameClientBootstrap.realtimeProtocol ● String! non-null scalar
GraphQL WebSocket subprotocol expected by udpNotifications.
GameClientBootstrap.subscriptionName ● String! non-null scalar
GraphQL subscription field that carries UDP proxy notifications.
GameClientBootstrap.maxReplicationDistance ● Int! non-null scalar
Maximum allowed value for the distance (chunk fan-out radius) field on spatial sends. Currently 8; the server clamps send distance to 0..this. distance is the number of chunks outward the message is replicated.
GameClientBootstrap.maxDecayRate ● Int! non-null scalar
Maximum allowed value for the decayRate (named attenuation algorithm id) field on spatial sends. Currently 5; the server clamps send decayRate to 0..this. decayRate selects how the message attenuates with distance (0 = none).
GameClientBootstrap.sequenceNumberModulo ● Int! non-null scalar
The modulus the per-message sequenceNumber wraps at (256), i.e. sequenceNumber is a uint8 in 0-255. sequenceNumber exists ONLY to correlate asynchronous responses/errors (delivered on udpNotifications) with the send that produced them — it is NOT an idempotency key, and the server does not dedupe replays.
GameClientBootstrap.binaryRelayEnabled ● Boolean! non-null scalar
Whether this server exposes the binary realtime relay (crowdy-relay-v1): a raw WebSocket endpoint at binaryRelayPath that relays complete client-signed Buddy wire datagrams as BINARY frames in both directions, replacing the GraphQL send*/udpNotifications hot path. When false, use the GraphQL realtime surface.
GameClientBootstrap.binaryRelayPath ● String! non-null scalar
HTTP path of the binary realtime relay WebSocket endpoint on this origin (e.g. "/realtime"). Connect with ?appId=<appId> and offer the binaryRelayProtocol subprotocol; authenticate with an app-scoped bearer token via the Authorization header, a bearer.<base64url(token)> subprotocol entry, or ?token=. Wire format: cks docs, client-wire-formats.
GameClientBootstrap.binaryRelayProtocol ● String! non-null scalar
Required WebSocket subprotocol for the binary realtime relay. The client must offer it during the upgrade; the server selects it. Currently "crowdy-relay-v1".
GameClientBootstrap.discoveryUrl ● String scalar
Stable entry point that always resolves to SOME healthy API instance — the environment’s shared load balancer. Use this to RE-DISCOVER an endpoint when the instance you are connected to stops answering: call gameClientBootstrap (or mintAppToken) against it and use the gameApiUrl it returns. This is the recovery path for direct connect, where gameApiUrl is a single instance that can die; discoveryUrl is chosen so that it cannot die with it. Null only if the server has no public URL configured.
GameClientBootstrap.gameApiUrl ● String scalar
HTTPS origin the client should use for GraphQL right now: the app's OWN datacenter, because that is where its shards live and a query answered elsewhere crosses a WAN silently. Under direct connect it is one specific instance in that datacenter, which is NOT interchangeable with other instances for an open realtime session. Not to be confused with discoveryUrl, which is the shared origin resolving to every datacenter — fall back to that if requests here start failing.
GameClientBootstrap.gameApiWsUrl ● String scalar
The wss:// form of gameApiUrl, for the graphql-transport-ws subscription socket and the binary relay. Same origin, same caveat: under direct connect it is one instance.
Returned By
gameClientBootstrap query