Open World Format

Status: draft 0.1. This specification describes .world packages at manifest schema version 3. The normative definitions are:

  1. 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.
  2. The conformance worlds — behavior is specified by what these render to. An implementation claiming a profile renders its worlds.
  3. These documents — the rules the schema cannot express (identity, folding, versioning, must-ignore).

Reading order

  1. The world document — L0: what a world is.
  2. The package — L2/L3: the folder, assets by hash, metadata, integrity.
  3. The session log — L1: the ops that build a world and the history around them.
  4. The state document — L0: where the game is.
  5. Profiles and extensions — what an implementation must, may and must-ignore.
  6. 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)