Skip to main content

world.json

world.json identifies the world and provides its top-level presentation and initial settings.

{
"id": "9d56bc2e-83ac-4eb0-b7bf-fac48772a6ef",
"name": "Blackwater Observatory",
"description": "A coastal town watches a silent observatory above the cliffs.",
"author": {"name": "Example Author", "url": "https://example.com"},
"metadata": {"tags": ["mystery", "historical"]},
"opening_message": [
{"type": "narration", "text": "Rain moves in from the sea."},
{"type": "utterance", "character": "mara", "text": "We should go before dark."}
],
"alternate_openings": [{"title": "Arriving late", "text": "You reach the observatory after dark."}],
"narration_voice": "narrator",
"variables": {"storm_warning": false}
}
FieldRequirementMeaning
idStable; generated if absentWorld identity across folder moves
nameRequiredDisplay name
descriptionOptionalPlayer-facing summary
author.nameRequired when author existsAttribution
author.urlOptionalAttribution link
metadata.tagsOptional listCatalogue filtering and presentation
opening_messageOptionalText or ordered narration/utterance parts
alternate_openingsOptional listOther first messages the player may choose when starting a session: {title, text}, plain narration, at most 30 of at most 20,000 characters; a missing title is the first words of the text
narration_voiceOptionalInitial TTS voice for narration
variablesOptional objectInitial values for world-scoped variables

The start dialog offers the alternate openings beside the world's own. A session started from one stores it as its first finished turn like any other opening.

An utterance's character must name a defined character. Invalid opening parts prevent session creation. The opening is stored as the first finished chat turn without a model call.

Older export manifests and separate author.json files are not part of this native format.