World Building

Import / Export

Compendium exchange files let you seed a realm's compendium with entities and relationships before play begins, or carry lore from one realm to another.


An exchange file is a plain JSON document you upload through the realm compendium settings. When imported, every entity in the file is added to the compendium; V2 and later files also create the relationships between them. Existing entities with the same ID are updated in place rather than duplicated.

Everything an import adds or changes is recorded in each entity's History as “Import”, so a description an import replaced can be restored. A relationship in the file that you had previously deleted is brought back rather than created again. History itself is not exported.

Exchange files come in four versions. V1 supports entities only and is suitable for simple lore drops. V2 adds a relationships array for richer world graphs. V3 adds a notes array for realm-level notes that carry across imports. V4 adds a quests array, carrying each quest's hook, goal, reward, tags, linked entities, and full step timeline.


Exports can be downloaded as a single JSON file, or as a bundle: a ZIP archive containing the same export.json file alongside one Markdown file per entity (entities/<name>.md) and, as of V4, one per quest (quests/<title>.md) with its hook, goal, reward, and timeline written out as readable text. Only the JSON file is used on import; the Markdown files are for reading outside the platform.


All versions share the same envelope fields. The version field determines which additional fields are required.

version

Must be the string "4".

entities

Array of entity objects. Each entity requires id, type, name, description, notes, and accessIds. isPublicToRealm is optional; when a file omits it, the existing visibility of that entity is left alone on import.

{
  "version": "4",
  "exportedAt": "2024-03-01T00:00:00Z",
  "exportedBy": "gamelord@example.com",
  "entities": [
    {
      "id": "ent_01",
      "type": "character",
      "name": "Seraphine Voss",
      "description": "A disgraced knight seeking redemption in the northern wastes.",
      "notes": null,
      "accessIds": null,
      "isPublicToRealm": true
    }
  ]
}

relationships

Array of relationship objects. Each requires id, fromEntityId, toEntityId, type, and accessIds. isPublicToRealm is optional, with the same import behavior as on entities. The fromEntityId and toEntityId must reference ids defined in the entities array.

{
  "version": "4",
  "exportedAt": "2024-03-01T00:00:00Z",
  "exportedBy": "gamelord@example.com",
  "entities": [],
  "relationships": [
    {
      "id": "rel_01",
      "fromEntityId": "ent_01",
      "toEntityId": "ent_02",
      "type": "resides_in",
      "accessIds": null,
      "isPublicToRealm": true
    }
  ]
}

notes

Array of realm-level note objects. Each note requires id, name, text, and accessIds. Set accessIds to null to give all realm members access, or provide a list of user IDs to restrict visibility.

{
  "version": "3",
  "exportedAt": "2024-03-01T00:00:00Z",
  "exportedBy": "gamelord@example.com",
  "entities": [],
  "relationships": [],
  "notes": [
    {
      "id": "note_01",
      "name": "Campaign Hook",
      "text": "The vault beneath the temple belongs to The Iron Accord. Its contents have not been catalogued.",
      "accessIds": null
    },
    {
      "id": "note_02",
      "name": "GM Only",
      "text": "Seraphine is a sleeper agent. She does not know it yet.",
      "accessIds": ["gamelord_user_id"]
    }
  ]
}

quests

Array of quest objects. Each quest requires id, title, hook, goalTitle, goalDescription, rewardTitle, rewardDescription, mechanic, motive, source, isPublicToRealm, entityIds, accessIds, and steps. rewardTitle, rewardDescription, mechanic, motive, and source may be null. entityIds reference ids in the entities array or entities already in the realm. accessIds works like it does on notes: null means every realm member, otherwise it is a list of user IDs.

quests[].steps

Array of step objects making up the quest timeline, ordered oldest to newest on import. Each step requires id, type, note, and createdAt.

{
  "version": "4",
  "exportedAt": "2024-03-01T00:00:00Z",
  "exportedBy": "gamelord@example.com",
  "entities": [],
  "relationships": [],
  "notes": [],
  "quests": [
    {
      "id": "quest_01",
      "title": "The Silver Locket",
      "hook": "A merchant offers coin for a locket lost in the sewers.",
      "goalTitle": "Recover the locket",
      "goalDescription": "Bring the locket back to the merchant.",
      "rewardTitle": "50 gold",
      "rewardDescription": "Paid on delivery.",
      "mechanic": "fetch",
      "motive": "wealth",
      "source": "commission",
      "isPublicToRealm": true,
      "entityIds": ["ent_01"],
      "accessIds": null,
      "steps": [
        {
          "id": "step_01",
          "type": "discovery",
          "note": "The party learned the locket fell through a grate on Mill Street.",
          "createdAt": 1716550000000
        }
      ]
    }
  ]
}

The type field on each entity must be one of the values below.

Character

TypeDescription
characterA named individual: player character, NPC, or historical figure.
creatureA non-humanoid being, monster, or animal.
speciesA biological species or lineage.
raceA cultural or racial group of humanoids.

Location

TypeDescription
cityA large, populous urban settlement.
townA mid-sized settlement with established trade.
villageA small rural community.
settlementA generic inhabited place that does not fit other location types.
regionA broad geographic area such as a kingdom or province.
territoryLand claimed or controlled by a specific faction.
landmarkA notable fixed point of interest.
natural_featureA geographic feature: mountain, forest, river, etc.
ruinThe remnants of a destroyed or abandoned place.

Organization

TypeDescription
factionA political or ideological group.
guildA trade or craft organization.
political_bodyA governing council, senate, or ruling body.
cultA secretive religious or devotional group.
religionA formalized faith or spiritual tradition.
merchantA trading enterprise or merchant company.
armyAn organized military force.
clanA kinship group or extended family unit.
dynastyA ruling lineage across generations.
sanctuaryA protected organization offering refuge.
militaryA generic military organization or branch.
residenceA noble house, estate, or household.

Item

TypeDescription
weaponA named weapon or class of weapons.
magicA spell, enchantment, or magical effect.
heirloomAn item passed down through a family or lineage.
relicA sacred or historically significant object.
toolA practical implement or instrument.
artifactA powerful or unique constructed object.
consumableA potion, food, or other single-use item.
itemA generic item that does not fit other item types.

Event

TypeDescription
battleA military engagement or skirmish.
disasterA catastrophic event: plague, flood, collapse.
upheavalA political or social revolution or shift.
festivalA celebration or recurring cultural ceremony.
meetingA significant gathering or summit.
treatyA formal agreement between parties.
eventA generic historical or in-world event.

Misc

TypeDescription
vehicleA ship, carriage, airship, or other transport.
mapA chart, diagram, or navigational document.
letterA written correspondence or message.
currencyA coin, token, or monetary system.
lawA decree, edict, or legal code.
documentA manuscript, contract, or official record.
resourceA natural or manufactured material resource.
technologyAn invention, technique, or technological system.
unknownType is not yet determined.

Establishment

TypeDescription
shopA retail store or vendor stall.
marketplaceA market district or trading post.
templeA place of worship.
businessA generic commercial establishment.
archiveA library, records hall, or repository of knowledge.
treasuryA vault or financial institution.
healing_centerA hospital, apothecary, or healing house.
political_centerA courthouse, palace, or seat of governance.
academyA school, university, or training institution.

The type field on each relationship must be one of the values below. Relationships are directional: fromEntityId is the subject and toEntityId is the object (e.g. Seraphine resides_in Ashenveil).

Organizational

TypeDescription
member_ofSubject belongs to the object organization.
affiliated_withSubject has a loose association with the object.
parent_ofSubject is a parent organization of the object.
governsSubject holds authority over the object.
regulated_bySubject is subject to rules or oversight from the object.

Locational

TypeDescription
resides_inSubject lives or is based in the object location.
exists_withinSubject is physically contained inside the object.
found_inSubject can be found or encountered in the object location.
operates_withinSubject conducts its activities in the object location.
adjacent_toSubject and object are neighboring locations.
located_nearSubject is in the general vicinity of the object.
travels_toSubject moves toward or visits the object.

Ownership

TypeDescription
ownsSubject has legal or recognized ownership of the object.
possessesSubject currently holds or carries the object.
hasSubject has a general association or attribute tied to the object.

Social

TypeDescription
ally_ofSubject and object are in a cooperative relationship.
enemy_ofSubject and object are in active opposition.
competes_withSubject and object are rivals.
trades_withSubject and object exchange goods or services.
influencesSubject has sway over the object's behavior or decisions.
seeksSubject is pursuing or searching for the object.

Employment

TypeDescription
employsSubject has hired the object.
servesSubject works for or is loyal to the object.
leadsSubject is in charge of the object.
commandsSubject has direct authority over the object.

Commerce

TypeDescription
createsSubject produces or manufactures the object.
acceptsSubject accepts the object as payment or offering.
purchasesSubject buys or has bought the object.

General

TypeDescription
associated_withA catch-all for any meaningful connection not covered by other types.

A V4 quest's mechanic, motive, and source fields, and each step's type field, must be one of the values below, or null for the quest-level tags.

Mechanic

TypeDescription
fetchRetrieve an item or person.
deliverBring something to a destination.
escortProtect someone on a journey.
rescueFree someone from danger or captivity.
huntTrack down and defeat a target.
defendHold a position against a threat.
investigateUncover facts or solve a mystery.
exploreChart or discover unknown territory.
infiltrateGet in and out undetected.
negotiateReach an agreement between parties.
sabotageDisrupt an opponent's plans or assets.
escapeGet away from danger or confinement.
heistSteal something of value.
buildConstruct or establish something.
recruitBring someone onto the party's side.
otherA mechanic that does not fit the list above.

Motive

TypeDescription
justiceRighting a wrong.
vengeanceSettling a score.
wealthPursuing riches.
dutyAn obligation that must be honored.
survivalStaying alive.
goodwillHelping simply because it is good.
loyaltyStanding by an ally or cause.
curiosityWanting to know more.
glorySeeking renown.
powerGaining influence or control.
faithActing on belief or devotion.
redemptionMaking amends for the past.
coercionActing under threat or blackmail.
otherA motive that does not fit the list above.

Source

TypeDescription
commissionHired for pay.
requestAsked for by someone in need.
orderHanded down by an authority.
rumorHeard secondhand.
discoveryStumbled upon.
crisisForced by an unfolding emergency.
backstoryRooted in a character's history.
self_directedThe party set this goal themselves.
omenForetold or foreshadowed.
consequenceA direct result of an earlier choice.
otherA source that does not fit the list above.

Step Type — Progress

TypeDescription
discoveryThe party learned something new.
milestoneA meaningful step forward.
complicationSomething made the quest harder.
clock_tickTime or pressure advanced.
encounterA confrontation or meeting occurred.
atmosphereColor or mood without plot movement.
decisionThe party made a meaningful choice.

Step Type — Ending

TypeDescription
completedThe quest succeeded. Ends the quest.
failedThe quest failed. Ends the quest.
abandonedThe party gave up on the quest. Ends the quest.

A quest's status is not stored in the file. It comes from the steps: a quest with no steps is proposed, a quest with steps is active, and the latest ending step decides whether it is completed, failed, or abandoned.


Entities, relationships, notes, and quests each support visibility fields.

accessIds (entities & relationships)

An array of player user IDs who can view this entity or relationship. Set to null to make it visible to all realm members. When importing, these IDs must correspond to existing users in the realm.

isPublicToRealm (entities & relationships, V4+)

When true, the entity or relationship is visible to every current and future realm member, the same as turning on Public to Realm in the UI. Optional: a file that omits this field leaves the existing visibility of that entity or relationship unchanged on import.

notes (entity field)

A free-text field on each entity for the exporting user's own private notes. Every realm member has a separate copy, and none are visible to players even if accessIds is null. On import, the provided text seeds every member listed in accessIds; each person's copy then diverges independently. Set to null to omit.

accessIds (notes & quests arrays)

Each entry in the top-level notes and quests arrays has its own accessIds field. Set to null to give all realm members access, or provide a list of user IDs to restrict it. On a quest, isPublicToRealm takes precedence when true. Notes and quests are imported as-is and are not linked to any specific session.


A complete V4 exchange file with three entities, two relationships, two notes, and a quest with its step timeline, with realm-wide visibility and selective access control throughout.

{
  "version": "4",
  "exportedAt": "2024-06-15T12:00:00Z",
  "exportedBy": "worldbuilder@example.com",
  "entities": [
    {
      "id": "ent_kael",
      "type": "character",
      "name": "Kael Dawnspire",
      "description": "A former war mage who now sells information out of a cramped tower in the merchant district.",
      "notes": "Knows about the vault beneath the old temple. Owes a debt to the thieves guild.",
      "accessIds": ["player_marlowe", "player_britta"],
      "isPublicToRealm": false
    },
    {
      "id": "ent_ironhold",
      "type": "city",
      "name": "Ironhold",
      "description": "A sprawling trade hub built around a collapsed volcano, now home to the largest smithing guilds on the continent.",
      "notes": null,
      "accessIds": null,
      "isPublicToRealm": true
    },
    {
      "id": "ent_ashen",
      "type": "guild",
      "name": "The Ashen Circle",
      "description": "A secretive mage guild operating out of Ironhold, specializing in fire-based transmutation.",
      "notes": null,
      "accessIds": null,
      "isPublicToRealm": false
    }
  ],
  "relationships": [
    {
      "id": "rel_01",
      "fromEntityId": "ent_kael",
      "toEntityId": "ent_ironhold",
      "type": "resides_in",
      "accessIds": null,
      "isPublicToRealm": true
    },
    {
      "id": "rel_02",
      "fromEntityId": "ent_kael",
      "toEntityId": "ent_ashen",
      "type": "member_of",
      "accessIds": ["player_marlowe", "player_britta"],
      "isPublicToRealm": false
    }
  ],
  "notes": [
    {
      "id": "note_01",
      "name": "Campaign Hook",
      "text": "The vault beneath the old temple belongs to The Ashen Circle. Kael knows the combination but will not give it freely.",
      "accessIds": null
    },
    {
      "id": "note_02",
      "name": "GM Secret",
      "text": "The Ashen Circle is actively searching for Kael. He has three days before they find him.",
      "accessIds": ["player_marlowe"]
    }
  ],
  "quests": [
    {
      "id": "quest_vault",
      "title": "Open the Temple Vault",
      "hook": "Kael offers the vault's combination in exchange for safe passage out of Ironhold.",
      "goalTitle": "Reach the vault",
      "goalDescription": "Get Kael past The Ashen Circle's watchers and into the vault beneath the old temple.",
      "rewardTitle": "The vault's contents",
      "rewardDescription": "Whatever The Ashen Circle has been hiding beneath the temple.",
      "mechanic": "escort",
      "motive": "wealth",
      "source": "request",
      "isPublicToRealm": true,
      "entityIds": ["ent_kael", "ent_ashen", "ent_ironhold"],
      "accessIds": null,
      "steps": [
        {
          "id": "step_01",
          "type": "discovery",
          "note": "Kael admits the vault belongs to The Ashen Circle.",
          "createdAt": 1718452800000
        },
        {
          "id": "step_02",
          "type": "complication",
          "note": "Ashen Circle watchers are posted at every gate out of the merchant district.",
          "createdAt": 1718456400000
        }
      ]
    }
  ]
}

Join us and connect for poems, content, updates, direct questions, community discussion, and more.

© 2026 Realms of Shod. All rights reserved.