HomeDeveloper docsLearn to build modules and systems
Implementation tutorials 6 min read

Learn to build modules and systems

Choose what you want to build and follow it from the first file to a working tabletop feature.

The campaign-summary example reads one authorized actor and opens the native modal. Gravewright 0.3.0, English interface.
The campaign-summary example reads one authorized actor and opens the native modal. Gravewright 0.3.0, English interface. · Open full screenshot ↗

Choose the outcome you want to deliver

Use the complete capability map to locate every method, operation, surface and Map Builder family.

I want to buildTutorialWhat I can test
My first moduleCreate, install and update a module from scratchTable button, authorized read and native modal
A journal toolHow to create a journal moduleCreate a journal and append a section from module UI
An action in an existing sheetHow to create a module that acts on a sheetEdit a name while preserving sheet data and token snapshots
A module-created libraryHow to create a compendium moduleCreate a pack, capture content, read an entry and import a copy
Content shipped with my systemHow to include compendiums in a systemInstall one ZIP with a system, JSON files and three original packs

Start with the first tutorial if you have never installed your own module. The table above supplies entry points. The full catalog below also covers actors, items, scenes, tokens, combat, cards, audio, chat/dice, quests, roll tables, files, persistence, translation, windows and server code. Every guide provides files, adaptation points, installation, activation and observable results. Use a development campaign and original content.

Every project and its recipes

Before choosing a “module type”

Journal, sheet and compendium describe what your module does. They are not values for a manifest kind field. A journal module is a regular package registering journal.sheet and calling journals. A sheet action registers actor.sheet and token.sheet. A library can be created as campaign content through the API. A system catalog declares system and content.compendiums in the same manifest.

DecisionChoice
Add a button or panelmode: augment, keeping the existing UI
Draw your system's own sheetmode: replace with system-owned types, as in the sample system
Save journal/actor dataThe public document API with the revision you read
Save a module preferenceModule storage, without overwriting the document
Ship a catalog with a systemPhysical ZIP files and content.compendiums

The complete development cycle

  1. Define an observable action, such as “clicking the button creates a section.” Choose a resource supported by the 0.3.0 contract.

  2. Create a folder containing manifest.json, a JavaScript entry, styles and a license. The manifest names files; it does not implement the action.

  3. Implement start/register/stop. Use the mount's root and api, and register the surface where the tool should appear.

  4. Build a ZIP with the manifest at its root. The installation owner installs it on a development host.

  5. The GM activates the exact version for the table. A system also needs to be selected as the campaign system.

  6. Open the window or directory receiving the mount. Execute the action and inspect persisted data rather than relying on a success message.

  7. Test read access, conflicts, cancellation and player behavior. Installed versions are immutable: increase the package version before installing changed bytes.

When to use the reference

Tutorials teach the full flow. Use Examples by kind to vary a contract and the module reference for limits and signatures. The API guide covers methods. When an idea cannot be implemented on the requested release, explain that limitation before inventing an endpoint or requiring a host upgrade.

How to use AI to start a module

text
I want to build [observable action] on Gravewright 0.3.0. Start from tutorial [link] and its ZIP. Before coding, identify the mounting surface, the API that saves the resource, and package installation/activation. Deliver the complete tree, every file, installation steps and tests with observable results. Preserve revisions, permissions, private sections and snapshots. Do not invent a manifest kind or an unavailable API.