HomeDeveloper docsAll extension capabilities and where to implement them
Implementation tutorials 13 min read

All extension capabilities and where to implement them

An explicit method-by-method map to projects, local helpers, surfaces, server integrations and release limits.

How to use this map

This index crosses public contracts from host 0.3.1, revision 0e91fef, with implementation projects. It covers 139 domain API methods, 17 original SDK operations, 13 surfaces and lifecycle helpers. Each method links to runnable code, inputs and a test, rather than promising arbitrary unsupported combinations.

Begin with the outcome you want to build. Use this table to locate a specific capability. A recipe can combine create/configure/read/remove because they are parts of one feature. Actions execute on click and destructive operations are identified. Use a disposable installation/campaign.

Choose the package structure

DeliverableStructureComplete tutorial
Journal, sheet, cards, audio or table toolBrowser package with entry and registerFirst module and families below
RPG sheets, types, initiative and catalogOne system package with entry/assets/content.compendiumsComplete system
Translate your own modulePrivate api.i18n catalogsTranslation and events
Add an installation languagelocales package without system/DjangoLanguage package
Trusted Python routes/servicesDjango package, owner/Runner activationServer integration
Distribute an approved releaseImmutable ZIP, hash, signature and HTTPS catalogPublication

There is no global module-type enum. A compendium can mean a mutable campaign pack, an installed system catalog or an operator-managed local catalog, with different rules. Mounting depends on its surface rather than your module’s label.

Every domain method

Generic methods take api.domain.method(payload,{signal,requestId}) with recipe-specific fields. Reads do not need requestId. list/get project authorized state. actors.sheet, dice.roll, table.search, chat.remove and other convenience methods use their own demonstrated signatures. JavaScript method names differ from native Python action names.

api.actors

MethodNative actionImplementation project
actors.createactor.createCode, inputs and test
actors.updateactor.updateCode, inputs and test
actors.deleteactor.deleteCode, inputs and test
actors.setPermissionsactor.permissionsCode, inputs and test
actors.saveSheetsheet.saveCode, inputs and test
actors.createFolderfolder.createCode, inputs and test
actors.updateFolderfolder.updateCode, inputs and test
actors.deleteFolderfolder.deleteCode, inputs and test
actors.deleteAssetasset.deleteCode, inputs and test
actors.statestateCode, inputs and test
actors.liststate projectionCode, inputs and test
actors.getstate projectionCode, inputs and test
actors.sheetsheetCode, inputs and test

api.tokens

MethodNative actionImplementation project
tokens.placeplaceCode, inputs and test
tokens.movemoveCode, inputs and test
tokens.removeremoveCode, inputs and test
tokens.duplicateduplicateCode, inputs and test
tokens.setHiddenhiddenCode, inputs and test
tokens.setVisionvisionCode, inputs and test
tokens.configureconfigureCode, inputs and test
tokens.addConditioncondition-addCode, inputs and test
tokens.removeConditioncondition-removeCode, inputs and test
tokens.statestateCode, inputs and test
tokens.liststate projectionCode, inputs and test
tokens.getstate projectionCode, inputs and test

api.maps

MethodNative actionImplementation project
maps.updateupdateCode, inputs and test
maps.movemoveCode, inputs and test
maps.deletedeleteCode, inputs and test
maps.activateactivateCode, inputs and test
maps.updateObjectsobjectsCode, inputs and test
maps.createFolderfolder-createCode, inputs and test
maps.updateFolderfolder-updateCode, inputs and test
maps.deleteFolderfolder-deleteCode, inputs and test
maps.statestateCode, inputs and test
maps.liststate projectionCode, inputs and test
maps.getstate projectionCode, inputs and test
maps.layerslayersCode, inputs and test

api.journals

MethodNative actionImplementation project
journals.createcreateCode, inputs and test
journals.updateupdateCode, inputs and test
journals.deletedeleteCode, inputs and test
journals.movemoveCode, inputs and test
journals.setAccessaccessCode, inputs and test
journals.presentpresentCode, inputs and test
journals.createFolderfolder-createCode, inputs and test
journals.updateFolderfolder-updateCode, inputs and test
journals.moveFolderfolder-moveCode, inputs and test
journals.deleteFolderfolder-deleteCode, inputs and test
journals.setStatusstatusCode, inputs and test
journals.setObjectiveobjectiveCode, inputs and test
journals.assignCharactersassignCode, inputs and test
journals.createBoardQuestboard-createCode, inputs and test
journals.addQuestboard-addCode, inputs and test
journals.removeQuestboard-removeCode, inputs and test
journals.pinQuestboard-pinCode, inputs and test
journals.reorderQuestsboard-reorderCode, inputs and test
journals.rollrollCode, inputs and test
journals.resetresetCode, inputs and test
journals.statestateCode, inputs and test
journals.liststate projectionCode, inputs and test
journals.getstate projectionCode, inputs and test

api.items

MethodNative actionImplementation project
items.createcreateCode, inputs and test
items.updateupdateCode, inputs and test
items.deletedeleteCode, inputs and test
items.duplicateduplicateCode, inputs and test
items.setPermissionspermissionsCode, inputs and test
items.createFolderfolder-createCode, inputs and test
items.updateFolderfolder-updateCode, inputs and test
items.deleteFolderfolder-deleteCode, inputs and test
items.statestateCode, inputs and test
items.liststate projectionCode, inputs and test
items.getstate projectionCode, inputs and test

api.combat

MethodNative actionImplementation project
combat.addaddCode, inputs and test
combat.removeremoveCode, inputs and test
combat.configureconfigureCode, inputs and test
combat.setInitiativeinitiativeCode, inputs and test
combat.rollInitiativerollCode, inputs and test
combat.toggletoggleCode, inputs and test
combat.moveUporder-upCode, inputs and test
combat.moveDownorder-downCode, inputs and test
combat.setTurnset-turnCode, inputs and test
combat.nextRoundnext-roundCode, inputs and test
combat.previousRoundprevious-roundCode, inputs and test
combat.startstartCode, inputs and test
combat.stopstopCode, inputs and test
combat.nextTurnnextCode, inputs and test
combat.previousTurnpreviousCode, inputs and test
combat.statestateCode, inputs and test

api.cards

MethodNative actionImplementation project
cards.definedefineCode, inputs and test
cards.instantiateinstantiateCode, inputs and test
cards.createcreateCode, inputs and test
cards.drawdrawCode, inputs and test
cards.shuffleshuffleCode, inputs and test
cards.resetresetCode, inputs and test
cards.deleteDeckdelete-deckCode, inputs and test
cards.discarddiscardCode, inputs and test
cards.returnreturnCode, inputs and test
cards.givegiveCode, inputs and test
cards.placeplaceCode, inputs and test
cards.taketakeCode, inputs and test
cards.flipflipCode, inputs and test
cards.movemoveCode, inputs and test
cards.statestateCode, inputs and test

api.audio

MethodNative actionImplementation project
audio.updateTracktrack-updateCode, inputs and test
audio.deleteTracktrack-deleteCode, inputs and test
audio.createPlaylistplaylist-createCode, inputs and test
audio.updatePlaylistplaylist-updateCode, inputs and test
audio.deletePlaylistplaylist-deleteCode, inputs and test
audio.createSpatialSoundspatial-createCode, inputs and test
audio.updateSpatialSoundspatial-updateCode, inputs and test
audio.deleteSpatialSoundspatial-deleteCode, inputs and test
audio.playplayCode, inputs and test
audio.pausepauseCode, inputs and test
audio.stopstopCode, inputs and test
audio.seekseekCode, inputs and test
audio.setVolumevolumeCode, inputs and test
audio.startScorescore-startCode, inputs and test
audio.pauseScorescore-pauseCode, inputs and test
audio.resumeScorescore-resumeCode, inputs and test
audio.stopScorescore-stopCode, inputs and test
audio.nextScorescore-nextCode, inputs and test
audio.previousScorescore-previousCode, inputs and test
audio.statestateCode, inputs and test

api.compendiums

MethodNative actionImplementation project
compendiums.createcreateCode, inputs and test
compendiums.configureconfigureCode, inputs and test
compendiums.readreadCode, inputs and test
compendiums.deletedeleteCode, inputs and test
compendiums.addaddCode, inputs and test
compendiums.removeremoveCode, inputs and test
compendiums.importimportCode, inputs and test
compendiums.setPermissionspermissionsCode, inputs and test
compendiums.statestateCode, inputs and test

api.chat

MethodNative actionImplementation project
chat.historyhistoryCode, inputs and test
chat.sendsendCode, inputs and test
chat.removeremoveCode, inputs and test
chat.clearclearCode, inputs and test

api.dice

MethodNative actionImplementation project
dice.rollrollCode, inputs and test

api.table

MethodNative actionImplementation project
table.searchsearchCode, inputs and test
table.lobbylobbyCode, inputs and test
table.updateLobbyupdateLobbyCode, inputs and test

Every original SDK operation

Use host.call(name,payload,{signal,onProgress}) with its corresponding contract. File/Blob must be real objects rather than JSON or local paths. Original DTOs/expectedRevision differ from domain version/sheetVersion; the linked projects demonstrate that difference.

Original operationTransport/effectProject
actor.listjson / readComplete implementation
actor.readjson / readComplete implementation
actor.createjson / writeComplete implementation
actor.updatejson / writeComplete implementation
actor.data.readjson / readComplete implementation
actor.data.updatejson / writeComplete implementation
actor.deletejson / writeComplete implementation
token.readjson / readComplete implementation
token.movejson / writeComplete implementation
token.data.readjson / readComplete implementation
token.data.updatejson / writeComplete implementation
asset.listjson / readComplete implementation
asset.uploadmultipart / writeComplete implementation
asset.downloadbinary / readComplete implementation
actor.image.uploadmultipart / writeComplete implementation
card.asset.uploadmultipart / writeComplete implementation
locale.applyjson / localComplete implementation

Every mounting surface

augment adds controls to native UI. replace owns the complete surface body and its navigation/actions. The complete system demonstrates functional actor/token sheet replacement; an existing-sheet action uses augment. Each surface below has complete source files.

SurfaceAccepted modesComplete example
actor.directoryaugment, replaceactor.directory
actor.sheetaugment, replaceactor.sheet
token.sheetaugment, replacetoken.sheet
item.directoryaugment, replaceitem.directory
item.sheetaugment, replaceitem.sheet
scene.directoryaugment, replacescene.directory
scene.controlsaugment, replacescene.controls
scene.overlayaugment, replacescene.overlay
chat.logaugment, replacechat.log
combat.trackeraugment, replacecombat.tracker
journal.sheetaugment, replacejournal.sheet
preferencesaugment, replacepreferences
table.interfaceaugment, replacetable.interface

Local helpers and lifecycle

CapabilityConcrete APIProject to adapt
Package filesassets.url / text / json / bytesTranslation and assets
Stylesheet lifetimestyles.use and disposerFirst module
Browser settingsstorage.local.get / set / deletePersistence
Account/table settingsstorage.user.get / set / delete / listPersistence
GM-shared settingsstorage.table.get / set / delete / listPersistence
Settings UIcustomize(context) and preferencesComplete form
Private catalogsapi.i18n.locale / t / has / number / register / onChangeTranslation
Native modal/closingapi.ui.openModal; close / suspend / resume; gravewright:sheet-flushCustomize and modals
Component registrationregister, also exposed as UI registration during the register phaseFirst module
Authorized changesapi.events.on and unsubscribeEvents
Legacy actor hintsevents.on actor.created / actor.updated / actor.deletedContract and limits
Coordinates/pan/zoomviewport.sceneToViewport / viewportToScene; scene.viewport.changedWorking overlay
Cancellation/disposalsignal and onDispose per mount; start / register / stopFirst module

Domain events include actors.changed, tokens.changed, maps.changed, maps.layersChanged, journals.changed, items.changed, combat.changed, cards.changed, audio.changed, compendiums.changed, chat.changed, chat.message, table.presence and table.lobbyChanged. They may coalesce invalidations and perform initial/reconnect reads. They are not exactly-once automation triggers. Dispose each subscription.

Map Builder and visual automation

All four door/lever/torch/region owners, execution/data connections and 44 node.type values have complete graphs, JSON and editor steps. The node catalog explains targets, resources and effects. Use native Test behavior/playtest before live application. These graphs are development documents, not a browser API for importing arbitrary JSON or a new manifest field.

The scene tutorial implements public layer/object operations. Adding new kinds or editor ports requires a core contribution and tests; 0.3.1 does not promise a plugin API for arbitrary node-type registration.

Server integrations and release boundaries

The Django integration implements Context.from_request, public commands, authenticated/CSRF routes and after-commit hooks. Python facades api.actors/tokens/maps/journals/items/combat/cards/audio/compendiums/resources/chat/dice/table/events have signatures in the reference. Context retains IDs rather than cached authority, and each service checks access. Account/admin/package/campaign management are global application adapters rather than methods on a mount’s api; see adapter reference for operator tools.

There is no maps.create or audio.upload domain SDK method: tutorials prepare scenes/files through native UI and then use supported public operations. Browser modules do not receive arbitrary SQL/Python execution, implicit GM powers, campaign switching through foreign UUIDs or hidden-data bypasses. system.combat supports declarative initiative. Existing Python providers are trusted server code, not permission to distribute a new RPG as a system plus separate Server Rules companion. Explain unsupported requirements while preserving the requested host version.

Maintain coverage when the host changes

This map uses a versioned frontend.json/registry.json snapshot in extension-contracts.json. For a host upgrade, compare actual source files/revisions, update projects and run their recipes against real services. Matching names alone does not prove payload, permission, visual or transaction behavior. Repeat mutation/snapshot tests in new fixtures.