Container
Campaign
Section titled “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. |
Module
Section titled “Module”A container for a distributable body of game content.
A Module groups together everything shipped as one unit — pages, maps, encounters,
groups, references, assets and entities. Modules are imported from .module archives
or downloaded as a Package, and every piece of content they own is deleted with them.
Each module owns a directory under URL.modules/<id> (see dataURL) holding its
images, page assets, fonts and other resources.
- SeeAlso:
Campaign,Package
| Property | Type | Required | Description |
|---|---|---|---|
id |
string |
Yes | The unique identifier for this module. A UUID string automatically generated when the module is created. This serves as the primary key in the Realm database and names the module’s data directory on disk. |
system |
string |
No | The game system this module was authored for. Identifies which game system or ruleset the module’s content targets. Should be lowercased. A nil value marks the module as system-agnostic. Examples: "dnd5e"; "pf2e" SeeAlso: System |
name |
string |
Yes | The display name of the module. The primary human-readable identifier shown in the library and content browser. Examples: "Lost Mine of Phandelver" |
slug |
string |
Yes | A URL-friendly identifier for the module. 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 /module/lost-mine-of-phandelver/page/goblin-ambush. Examples: "lost-mine-of-phandelver" |
version |
string |
Yes | The module’s own content version. Set by the module author and used to detect available updates against the published Package version. Format: Semantic versioning: "1.2.3" Note: Defaults to "1.0.0" for modules that do not declare a version. |
descr |
string |
No | The full description of the module. Contains the marketing copy, back-cover blurb, or author’s overview of the module’s content. Displayed in detail views. |
shortDescr |
string |
No | A condensed one-line description of the module. A brief summary used where the full descr is too long, such as list rows and cards. |
acronym |
string |
No | A short code identifying the module. An abbreviation, typically 2–5 uppercase characters, used where the full name does not fit and to attribute content sources. Examples: "LMOP"; "CoS" |
author |
string |
No | The author or publisher of the module. Examples: "Wizards of the Coast"; "Jane Doe" |
category |
string |
No | The broad classification of this module. Stored as the raw value of a ModuleCategory; use categoryValue for the typed form. Arbitrary strings are tolerated for legacy content. Examples: "adventure", "pack", "rules", "compendium", "other" SeeAlso: ModuleCategory |
website |
string |
No | The module’s homepage. An absolute URL string pointing to the product page, author’s site, or documentation. Examples: "https://example.com/modules/lost-mine" |
repository |
string |
No | The source repository hosting the module. An absolute URL string, typically to a Git repository the module is developed in. Examples: "https://github.com/example/lost-mine" |
package |
string |
No | The package manifest this module was installed from. An absolute URL string pointing to the JSON manifest describing the module and its downloadable versions. Used to check for and install updates. SeeAlso: Package, packageURL |
image |
string |
No | The file path to the module’s cover image. The main visual asset shown for the module in the library. Note: Relative file paths are resolved against the module’s dataURL. Examples: "cover.jpg" |
banner |
string |
No | The file path to the module’s banner image. A wide image used as a header behind the module’s title. Note: Relative file paths are resolved against the module’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 modules with custom labels. Example Tags: "official", "homebrew", "third-party"; "low-level", "horror" |
data |
Object |
No | Flexible JSON storage for system-specific or arbitrary structured data. Stores metadata that does not fit the standard schema, allowing modules 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 module’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 modules created with older system versions that may need migration. |

