App
A publishable application (game/experience) owned by an organization. Its discoverability is controlled by visibility and its lifecycle by status.
type App {
appId: BigInt!
orgId: BigInt!
name: String!
slug: String
description: String
visibility: AppVisibility!
status: AppStatus!
launchUrl: String
isTrusted: Boolean!
redirectUris: [String!]!
clientType: String!
metadata: String
state: String
createdBy: BigInt!
splitMode: Boolean!
gameApiUrl: String
deploymentTarget: String!
reservedEgressBytesPerSec: BigInt! @deprecated
reservedUdpBytesPerSec: BigInt!
reservedGraphqlOpsPerSec: BigInt!
runtimeStatus: String!
runtimeDenialReason: String
codeAdmissionMode: String!
gridClaimPolicy: String!
gridClaimApproverUserIds: [String!]!
wildernessWritesOpen: Boolean!
replayLoggingEnabled: Boolean!
replayLoggingRecordsMedia: Boolean!
replayLoggingRecordsVoice: Boolean!
replayLoggingRecordsVideo: Boolean!
recording: AppRecording!
claimOwnerKeys: [String!]!
minPlayerAge: Int
effectiveMinPlayerAge: Int!
createdAt: DateTime!
updatedAt: DateTime!
org: Organization
hasSafetyModerator: Boolean
managedPlayerModsEnabled: Boolean!
}
Fields
App.appId ● BigInt! non-null scalar
Unique numeric identifier of the app (primary key).
App.orgId ● BigInt! non-null scalar
Numeric id of the organization that owns this app.
App.name ● String! non-null scalar
Human-readable display name of the app.
App.slug ● String scalar
URL-safe slug, unique within the org; combined with the org slug to form the marketplace path. May be null for legacy rows.
App.description ● String scalar
Short plain-text description shown in listings; also matched by the marketplace free-text filter.
App.visibility ● AppVisibility! non-null enum
Marketplace discoverability (PUBLIC/UNLISTED/PRIVATE). See AppVisibility.
App.status ● AppStatus! non-null enum
Lifecycle state (DRAFT/LIVE/ARCHIVED). See AppStatus.
App.launchUrl ● String scalar
Browser destination (origin/URL) a player is redirected to when they portal into this app from the Overworld. Used to route the player and to validate portal redirect URIs.
App.isTrusted ● Boolean! non-null scalar
True for first-party/trusted apps: portal entry skips the consent screen. The Overworld (app 1) is trusted. Studio admins cannot set this; it is platform-controlled.
App.redirectUris ● [String!]! non-null scalar
OAuth-style redirect-URI allow-list for the portal handoff. A portal authorization code’s redirect_uri must match one of these by origin; empty disallows browser portal entry to this app.
App.clientType ● String! non-null scalar
OAuth client type: "public" (browser/PKCE, no secret) or "confidential" (server-side, holds a secret). Defaults to "public".
App.metadata ● String scalar
Opaque JSON-encoded string of marketplace media (cover image URL, screenshots, long description, etc.). Stored internally as JSONB; clients must JSON.parse on read and JSON.stringify on write. Null/"{}" when unset.
App.state ● String scalar
Base64-encoded binary blob of the app's persisted runtime/world state; opaque to clients and potentially large. Null when no state has been saved.
App.createdBy ● BigInt! non-null scalar
Numeric user id of the account that created the app.
App.splitMode ● Boolean! non-null scalar
True when this app's runtime data lives in a dedicated per-tenant game-api database (rather than the shared game-api). Used together with gameApiUrl to route gameplay calls.
App.gameApiUrl ● String scalar
Resolved game-api base URL for SDK/runtime calls: the per-tenant URL for dedicated apps, or the shared platform URL for shared apps. Null for legacy or not-yet-deployed apps.
App.deploymentTarget ● String! non-null scalar
Where the app runs: "none" (draft / not deployed), "shared" (the shared game-api), or "dedicated" (a provisioned per-tenant environment).
App.reservedEgressBytesPerSec ● BigInt! deprecated non-null scalar
Renamed 2026-09-01 when reservations split by traffic type. Use reservedUdpBytesPerSec; this returns the same value for one release.
Reserved realtime (UDP) capacity in bytes/s for shared apps. Superseded by reservedUdpBytesPerSec.
App.reservedUdpBytesPerSec ● BigInt! non-null scalar
Reserved realtime (UDP) capacity in bytes/s. Guarantees a minimum the platform provisions for you; it is not a limit on what you may send. Billed monthly whether or not used, IN ADDITION TO metered usage -- a reservation buys capacity, not volume, so reserving 5 MB/s does not make the first 5 MB/s free. Independent of reservedGraphqlOpsPerSec. 0 = none.
App.reservedGraphqlOpsPerSec ● BigInt! non-null scalar
Reserved API request rate in GraphQL operations/sec. Guarantees a minimum the platform provisions for you; it is not a limit on how many requests you may make. Billed monthly whether or not used, IN ADDITION TO metered usage -- a reservation buys capacity, not volume. Independent of reservedUdpBytesPerSec: reserving one does not reserve the other. 0 = none.
App.runtimeStatus ● String! non-null scalar
Shared-environment runtime gate, mirrored to the game DB and enforced by game-api + Buddy: "active", "grace", "denied", or "suspended".
App.runtimeDenialReason ● String scalar
When runtimeStatus is not "active", why the runtime is gated: "insufficient_funds", "spend_cap", or "subscription_lapsed". Null when active. Historical rows may carry "free_allowance", which the gate no longer produces -- an app over its allowance with no way to pay is denied as "insufficient_funds".
App.codeAdmissionMode ● String! non-null scalar
Player-code censorship mode: "implicit_allow" (default/off) or "allow_list" (strict admission of every running artifact, including self-authored code).
App.gridClaimPolicy ● String! non-null scalar
How a player claim confers grid ownership (D4): "self_claim" (the claim right alone; default), "approval" (designated approvers accept claim requests), "invite" (standing invites only), or "marketplace_only" (only a marketplace grid purchase; the purchase edge ships in P4b).
App.gridClaimApproverUserIds ● [String!]! non-null scalar
Player user ids allowed to approve grid claim requests in "approval" mode. When empty, approval falls back to org staff holding manage_compute.
App.wildernessWritesOpen ● Boolean! non-null scalar
Whether players may write the app's wilderness: chunks that no grid but the app's world grid covers. True (the default) leaves those writes to the ordinary voxel permission; false refuses every voxel and chunk write there (updateVoxel, sendVoxelUpdate, updateChunk, ck-exec's world.set_voxels, and a client's voxel updates sent straight to the realtime servers), whoever makes it. Set with updateApp (manage_apps).
App.replayLoggingEnabled ● Boolean! non-null scalar
Whether replay logging is on: the realtime servers record every client message they accept for this app, searchable with inputLogSessions and readable with inputLogMessages, and billed as stored input logs. False (the default) records nothing ("No replication logging"). Set with updateApp (manage_apps); turning it on needs a wallet that covers the projected cost of one retention period, or a billing-exempt org.
App.replayLoggingRecordsMedia ● Boolean! non-null scalar
Whether replay logging records the app's voice, webcam video and channel audio messages too: true when either replayLoggingRecordsVoice or replayLoggingRecordsVideo is (the realtime servers record both media while this is true, until they read the two separately). Setting it sets both. Applies only while replayLoggingEnabled is on. Set with updateApp (manage_apps).
App.replayLoggingRecordsVoice ● Boolean! non-null scalar
Whether replay logging records the app's voice and channel audio. True by default. Set with updateApp (manage_apps).
App.replayLoggingRecordsVideo ● Boolean! non-null scalar
Whether replay logging records the app's webcam video. True by default. Set with updateApp (manage_apps).
App.recording ● AppRecording! non-null object
What the safety log records for this app right now, for the notice and the recording indicator a client shows players. Readable with the app's own app token (app(appId)).
App.claimOwnerKeys ● [String!]! non-null scalar
Grid permission keys a player's claim grants its owner on the claimed grid (claimGridOwnership), beside the player-code keys the owner's tier carries; for example update_voxel_data makes a claim buildable without a hub granting it. Never a player-code key; the grid's permission limits still cap them. Empty by default. Set with updateApp (manage_apps).
App.minPlayerAge ● Int scalar
The youngest age the app admits, 13 to 18, when it asks more than the platform's minimum; null for the platform's minimum. Set with updateApp (manage_apps).
App.effectiveMinPlayerAge ● Int! non-null scalar
The youngest age the app admits now: the higher of minPlayerAge and the platform's minimum (18 until players 13 and over are admitted, then 13). A player's country can require more (territoryPolicies); younger players are refused AGE_REQUIREMENT_NOT_MET at mint.
App.createdAt ● DateTime! non-null scalar
Timestamp when the app was created.
App.updatedAt ● DateTime! non-null scalar
Timestamp when the app was last updated.
App.org ● Organization object
The organization that owns this app. Null if the owning org cannot be found.
App.hasSafetyModerator ● Boolean scalar
Whether the app's organization has a safety moderator: a member one of whose roles grants moderate_safety itself (the admin role alone does not count; the moderator is appointed) and who is not deleted, blocked, banned from the organization or a minor. An app that admits players under 18 needs one, or its minors' sign-ins are refused SAFETY_MODERATOR_REQUIRED (the same check). Null unless you are a member of the app's organization (or a super admin).
App.managedPlayerModsEnabled ● Boolean! non-null scalar
Whether the organization lets its org-managed players build and run mods (and use the Studio agent) in this app, paying for their mod compute, egress, storage and model tokens itself. False by default, and false on a tier that does not serve org-managed players. Set with setAppManagedPlayerMods (manage_billing). Players with a Crowded Kingdoms account are unaffected.
Returned By
app query ● appBySlug query ● appsForOrg query ● archiveApp mutation ● createApp mutation ● myApps query ● setAppVisibility mutation ● updateApp mutation
Member Of
AppEdge object ● AppsPage object ● SetAppReservedThroughputResult object