Package kinds
Choose a system, module, content pack, or mod from the authority and distribution each one needs.
The package kind determines which contract owns the contribution. It is not only a folder name.
#System
A system defines a game's document schemas, native sheets, grid defaults, initiative expression, and automation. Exactly one system is active in a world. The system id is stored with that world, so changing the id creates a different system rather than renaming the existing one.
Systems are composed into the host application's registry. They are not dynamically imported from a world and cannot be installed from Marketplace today.
#Module and content pack
A module contributes reusable types or content. The maintained modules/worldbuilding package
exports both a type taxonomy and a content pack with documents and an embedded asset.
A content pack is validated data: types, documents, assets, and references between them. Installing a pack remaps package-local ids to world ids. A pack does not run arbitrary code in the server.
First-party content packs can be distributed through Marketplace. A source package is still the maintained implementation and test surface.
#Mod
A mod is a sandboxed web application that requests named capabilities. It can contribute panels, settings, chat commands, semantic actions, scene tools, or shared scene-object presentations when the manifest declares the matching surface and the GM grants the required access.
Native panel descriptions are host-rendered data. A custom app panel runs in an iframe. Headless mods run in a hidden sandbox. All three use the same capability-gated host bridge, and network egress is denied by the default sandbox policy.
First-party mods can be installed through Marketplace. A local mod can also be built and installed from its development manifest URL.
#A practical choice
- If it defines what a character is, use a system.
- If it adds validated documents or assets, use a module and content pack.
- If it reacts to events or adds interactive engine behavior, use a mod.
- If it mutates authoritative world state in response to a game action, put the script in system automation and invoke it through a declared gesture.
Do not move trusted server authority into a mod just because TypeScript can express it. The server still validates permissions, document changes, rolls, and scene writes.