Status: draft 0.1. This specification describes .world packages at
manifest schema version 3. The normative definitions are:
schema/world.schema.json— the world document’s data model, machine-readable. Where prose and schema disagree, the schema wins and the prose gets fixed.- The conformance worlds — behavior is specified by what these render to. An implementation claiming a profile renders its worlds.
- These documents — the rules the schema cannot express (identity, folding, versioning, must-ignore).
Reading order
- The world document — L0: what a world is.
- The package — L2/L3: the folder, assets by hash, metadata, integrity.
- The session log — L1: the ops that build a world and the history around them.
- The state document — L0: where the game is.
- Profiles and extensions — what an implementation must, may and must-ignore.
- Versioning policy — the compatibility contract.
The one invariant
State at any revision is a pure fold of the log over the base.
fold(base, entries with revision > base_revision) == state at head
Everything the format offers is a consequence: rendering (fold nothing, read the base), editing (append edit ops), multiplayer (one authority orders the ops), undo (append inverses), save games (base + a player’s log), replays (fold with a clock), mods (patches against a pinned base revision), forking (base + log prefix).
What this format is not
Not a game engine, not a physics solver, not a renderer, not glTF’s job (meshes are glTF leaves), not a content-management system. The spec describes what a world is; what an engine does with it stays the engine’s.
Open items (before 1.0)
- The state document is specified (experimental until 1.0) but has no
JSON Schema yet; it joins
world.schema.jsonwhen it settles. - The extension registry accepts its first real extension (physics, tracking the glTF drafts, is the expected first).
- More prose around replay determinism as implementers arrive.
- The world document (L0) — A world document — `manifest.json`, or a snapshot — is a self-contained description of a world: its entities, their shapes and materials, the lights, the environment, the sound, an
- The package (L2/L3) — A `.world` is a directory. A zip of that directory is the transport form for finished, published worlds; the directory is canonical because the log appends.
- The session log (L1) — `ops.jsonl` is the one history: one JSON entry per line, each entry a committed batch of ops by one author. It holds what changed the world (edits) and what happened around the cha
- The state document (L0) — A world's *document* says what the scene is. Its *state* says where the game is: score, inventory, quests, doors opened. Without a state document those live in engine memory and di
- Profiles and extensions — Cover use cases through a small mandatory core plus profiles — never through maximalism. An implementation implements a profile; a package declares which profiles it uses.
- Versioning policy — The compatibility contract, written as policy from lessons already paid for in the format's lineage.