Skip to main content

Scene Schema Reference

This is a complete reference for the scene JSON schema. All scenes must conform to this schema to load successfully.

Top-Level Properties

Required Properties

name (string, required)

The name of the scene. Must be at least 1 character.

"name": "My Awesome Scene"

version (string, required)

The version of the scene. Use semantic versioning (e.g., "1.0", "1.2.3").

"version": "1.0"

schemaVersion (string, required)

The schema version this scene conforms to. Currently "1.0".

"schemaVersion": "1.0"

assets (array, required)

Array of asset definitions. Can be empty [] but must be present.

"assets": [
{
"id": "model1",
"type": "model",
"uri": "https://example.com/model.obj",
"mediaType": "model/obj"
}
]

Optional Properties

description (string, optional)

A description of the scene.

"description": "A beautiful 3D environment"

id (string, optional)

Unique identifier for the scene. Used for scene discovery and references.

"id": "my_scene_001"

author (string, optional)

The author or creator of the scene.

"author": "John Doe"

rating (string, optional)

Content rating. Must be one of:

  • "GENERAL" - Suitable for all audiences
  • "MODERATE" - May contain mild content
  • "ADULT" - Mature content
"rating": "GENERAL"

thumbnail (string, optional)

URL to a thumbnail image for the scene. Must be a valid URI.

"thumbnail": "https://example.com/thumbnail.jpg"

manifestUrl (string, optional)

Alternative URL where the scene manifest can be found. Must be a valid URI.

"manifestUrl": "https://example.com/manifest.json"

world (object, optional)

World information for scenes that belong to a larger world.

"world": {
"id": "my_world",
"position": {"x": 0.0, "y": 0.0, "z": 0.0}
}

Properties:

  • id (string): World identifier
  • position (vec3): Position of this scene in the world

spawn (vec3, optional)

Player spawn point. Defaults to (0, 0, 0) if not specified.

"spawn": {"x": 0.0, "y": 1.0, "z": 0.0}

movementBounds (object, optional)

Limits player movement to a bounding box.

"movementBounds": {
"min": {"x": -10.0, "y": 0.0, "z": -10.0},
"max": {"x": 10.0, "y": 20.0, "z": 10.0}
}

Properties:

  • min (vec3, required): Minimum bounds
  • max (vec3, required): Maximum bounds

Defaults to (-100, -100, -100) to (100, 100, 100) if not specified.

gameType (string, optional)

Player movement type. Must be one of:

  • "FPS" - First-person shooter style movement (default)
  • "NONE" - No player movement, view-only
"gameType": "FPS"

instances (array, optional)

Array of instances (objects placed in the scene). Can be empty [] or omitted.

"instances": [
{
"id": "instance1",
"asset": "model1",
"position": {"x": 0.0, "y": 0.0, "z": 0.0},
"rotation": {"x": 0.0, "y": 0.0, "z": 0.0},
"scale": {"x": 1.0, "y": 1.0, "z": 1.0}
}
]

gamemode (object, optional)

Gamemode script for scene-wide logic.

"gamemode": {
"file": "gamemode-script"
}

Properties:

  • file (string, required): Asset ID of the gamemode script

skybox (object, optional)

Skybox configuration for environment mapping.

"skybox": {
"uri": "https://example.com/skybox.jpg",
"rotation": {"x": 0.0, "y": 0.0, "z": 0.0}
}

Properties:

  • uri (string, required): URL to skybox texture
  • rotation (vec3, optional): Rotation in degrees

autosaveNotification (object, optional)

Configuration for autosave notifications.

"autosaveNotification": {
"text": "Game saved!",
"position": {"x": 0.02, "y": 0.95},
"font": "default-font",
"color": {"x": 1.0, "y": 1.0, "z": 1.0}
}

Properties:

  • text (string, optional): Notification text
  • position (vec2, required): Screen position (0-1 normalized)
  • font (string, optional): Font asset ID
  • color (vec3, optional): Text color (RGB, 0-1)

Validation Rules

  • All required fields must be present
  • Field types must match (string, number, boolean, object, array)
  • Enum values must be from the allowed set
  • URIs must be valid HTTPS URLs
  • Vec3 values must have x, y, z components
  • Scale values must be > 0
  • Asset IDs must be unique within the scene
  • Instance IDs must be unique within the scene
  • Asset references in instances must exist

Example Complete Scene

{
"name": "Complete Scene Example",
"version": "1.0",
"schemaVersion": "1.0",
"description": "A complete scene with all optional fields",
"id": "complete_scene",
"author": "Scene Creator",
"rating": "GENERAL",
"thumbnail": "https://example.com/thumb.jpg",
"world": {
"id": "my_world",
"position": {"x": 0.0, "y": 0.0, "z": 0.0}
},
"spawn": {"x": 0.0, "y": 1.0, "z": 0.0},
"movementBounds": {
"min": {"x": -50.0, "y": 0.0, "z": -50.0},
"max": {"x": 50.0, "y": 100.0, "z": 50.0}
},
"gameType": "FPS",
"assets": [],
"instances": []
}

Next Steps