Skip to content

PackagedGameConfig

Defined in: runtime/packagedRuntime.ts:39

game.config.json — what an export bakes about the project, and the contract between the export pipeline that writes it and every runtime that reads it. One declaration so the two sides cannot drift.

optional achievements?: string[]

Defined in: runtime/packagedRuntime.ts:85

The achievement ids this game declares. The runtime refuses an unlock outside the set, because a store accepts an unknown id and does nothing.


optional aot?: object

Defined in: runtime/packagedRuntime.ts:126

The compiled twins this build produced (docs/REARCH_AOT.md). wasm is package-relative; the manifest rides here so there is not a second file to keep in step. Absent unless the project marked something @compiled, so a runtime reads presence and needs no mode flag.

manifest: AotManifest

module: string


optional audioConfig?: AudioProjectConfig

Defined in: runtime/packagedRuntime.ts:106

Project mixer state: bus volumes, custom buses, effects, duck rules. Absent ⇒ the default mix.


optional colorSpace?: "linear" | "gamma"

Defined in: runtime/packagedRuntime.ts:66

Project color space — ‘linear’ boots the linear-light pipeline.


optional debugChannel?: DebugChannelConfig

Defined in: runtime/packagedRuntime.ts:129

Where the editor that made this development build listens for it. Never written by a shipping export.


optional depthLayers?: number

Defined in: runtime/packagedRuntime.ts:64

Bitmask of render layers (0..31) that resolve by real depth (2.5D).


optional engineBytes?: number

Defined in: runtime/packagedRuntime.ts:94

The engine binary’s size as it arrives in the page, decompressed. A host that compresses states a Content-Length for fewer bytes than a download counts, so the boot bar measures against this instead.


entryScene: string

Defined in: runtime/packagedRuntime.ts:45

Project-relative path of the scene the game boots into.


optional hotUpdate?: object

Defined in: runtime/packagedRuntime.ts:109

Hot-update delivery: the CDN root remote-group assets resolve against + the storage key an applied update persists under (both optional).

optional persistUpdateKey?: string

optional remoteRoot?: string


optional leaderboardEncryptionKey?: string

Defined in: runtime/packagedRuntime.ts:43

Public client encryption key for invited CrazyGames leaderboards; never a server API key.


optional msaaSamples?: number

Defined in: runtime/packagedRuntime.ts:71

Scene-target multisampling the project asked for; absent ⇒ 4. Clamped by the device, which answers capability and never policy.


optional outputTransform?: "none" | "aces" | "neutral"

Defined in: runtime/packagedRuntime.ts:68

The curve the frame applies on the way to the display; absent = none.


optional physicsConfig?: Physics2DPluginConfig

Defined in: runtime/packagedRuntime.ts:103

The physics world the project declared: gravity, solver, collision matrix. Absent ⇒ the engine’s own defaults.


optional physicsEnabled?: boolean

Defined in: runtime/packagedRuntime.ts:100

Install physics even when the shipped scene shows no bodies — a project that spawns them from script (Project Settings → Physics → Enabled). Absent ⇒ physics installs only when a scene actually uses it.


optional quality?: QualityConfig

Defined in: runtime/packagedRuntime.ts:72


optional renderBackend?: "webgl2" | "webgpu"

Defined in: runtime/packagedRuntime.ts:75

GPU backend the build asks for; absent ⇒ WebGL2. A request for ‘webgpu’ falls back where the machine cannot serve one.


optional scenes?: object[]

Defined in: runtime/packagedRuntime.ts:47

Every switchable scene (SceneManager name + cooked path); includes the entry.

name: string

path: string


optional screenFit?: object

Defined in: runtime/packagedRuntime.ts:78

Project camera fit (design resolution + scale mode) — letterboxes the main camera without a UI Canvas; absent = no fit.

designHeight: number

designWidth: number

matchWidthOrHeight: number

scaleMode: number


optional scripts?: string

Defined in: runtime/packagedRuntime.ts:60

The project’s own bundled code, as a payload-relative file name. Absent means this build has none — which is how a host tells “no project script” from “the project script failed to load”. Guessing between those with a catch runs the empty world and calls it a success.


optional sideModules?: object[]

Defined in: runtime/packagedRuntime.ts:119

Optional native modules this project supplied itself, staged beside the engine’s own (see .esengine/modules/<id>/).

The declaration ships rather than being discovered, because discovery is not possible where it matters: a mini-game cannot list a directory and a playable has no directory at all. The export knows what it staged, so it says so, and every transport resolves these ids exactly like a built-in.

file: string

optional globalName?: string

id: string


optional steamAppId?: number

Defined in: runtime/packagedRuntime.ts:88

The Steam application id, when this build ships to Steam. Its presence is what makes the runtime try to bring a Steam client up at all.


optional uiTheme?: "light"

Defined in: runtime/packagedRuntime.ts:80

Project widget theme; absent = dark.


optional uiThemeColors?: Record<string, string>

Defined in: runtime/packagedRuntime.ts:82

Project theme color overrides (role → #rrggbbaa hex).


optional webChannel?: "poki" | "crazygames" | "youtube"

Defined in: runtime/packagedRuntime.ts:41

External Web distribution SDK selected by this export.


optional worlds?: object[]

Defined in: runtime/packagedRuntime.ts:53

Scenes the cook cut into cells, each with the manifest describing them. Deliberately not in scenes: a cell is content residency brings in, not a place a game switches to.

manifest: string

scene: string


optional ySortLayers?: number

Defined in: runtime/packagedRuntime.ts:62

Bitmask of render layers (0..31) that y-sort within the layer.