Campaign
A container for an ongoing game run by the user.
A Campaign groups the content and live state of one table: its own pages, maps,
encounters and entities, plus the currently running Game, the map on screen and the
set of loaded maps. Exactly one campaign is primary at a time — that is the campaign
the battle map and player display are driving.
Where a Module is authored content that is distributed, a campaign is the user’s own
working container; content can belong to either, or to both.
Each campaign owns a directory under URL.campaigns/<id> (see dataURL) holding its
images and other resources.
- SeeAlso:
Module,Game
| Property | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | The unique identifier for this campaign. A UUID string automatically generated when the campaign is created. This serves as the primary key in the Realm database and names the campaign’s data directory on disk. |
system |
string |
No | The game system this campaign is played with. Identifies which game system or ruleset the campaign’s content targets. Should be lowercased. A nil value marks the campaign as system-agnostic. Examples: "dnd5e"; "pf2e" SeeAlso: System |
name |
string |
Yes | The display name of the campaign. The primary human-readable identifier shown in the library and campaign switcher. Examples: "The Sunless Citadel" |
slug |
string |
Yes | A URL-friendly identifier for the campaign. A simplified, lowercase version of the name suitable for use in URLs, file paths, or as a readable unique identifier. Used to resolve links such as /campaign/the-sunless-citadel/map/entrance. Examples: "the-sunless-citadel" |
descr |
string |
No | The full description of the campaign. Contains the premise, running notes, or overview of the campaign. Displayed in detail views. |
shortDescr |
string |
No | A condensed one-line description of the campaign. A brief summary used where the full descr is too long, such as list rows and cards. |
image |
string |
No | The file path to the campaign’s cover image. The main visual asset shown for the campaign in the library. Note: Relative file paths are resolved against the campaign’s dataURL. Examples: "cover.jpg" |
banner |
string |
No | The file path to the campaign’s banner image. A wide image used as a header behind the campaign’s title. Note: Relative file paths are resolved against the campaign’s dataURL. Typical Specifications: Wide aspect ratio (roughly 3:1); At least 1200 pixels wide |
tags |
Array<string> |
Yes | Custom tags for categorization and filtering. A flexible tagging system allowing users to organize campaigns with custom labels. Example Tags: "active", "archived", "one-shot" |
references |
Array<string> |
Yes | Additional reference links pinned to this campaign. Stores URLs to content the game master wants quick access to during play — pages, entities, rules references. Examples: "/module/lost-mine-of-phandelver/page/goblin-ambush"; "/monster/goblin" |
data |
Object |
No | Flexible JSON storage for system-specific or arbitrary structured data. Stores metadata that does not fit the standard schema, allowing campaigns to carry system-specific information without schema modifications. Note: The structure of this data varies by system. |
attributes |
Object |
Yes | Dynamic attribute storage supporting various data types. A flexible key-value store for attributes and properties that need to be queryable or frequently accessed. Supports multiple data types through RealmAny. Common Attributes: Custom fields defined by the loaded system. |
systemVersion |
string |
No | The game system version this campaign’s content was authored against. Records the system version to support data migration, debugging, and compatibility tracking across game system updates. Format: Semantic versioning: "1.2.3" Note: Useful for identifying campaigns created with older system versions that may need migration. |

