Skip to main content

Backend modules

Each backend module owns a single business capability and never reaches into another module's internals. Where a module's code lives is the platform's answer rather than a path worth writing down: most modules are workspace packages under packages/modules/<id>/, a few are owned by the host, and the module map names the package that ships each one. The pages below describe each module so two audiences can use them:

  • Developers who need to extend the module — internal entities, services, and hooks they can plug into.
  • Product Owners who need to understand what a module does and which flows it powers without reading code.

The OpenAPI document at GET /api/v1/_openapi.json is the live contract for every HTTP surface listed here; see API Contracts for how to consume it.

Module map​

The map is generated — one row per module the platform registers, with the capability from each page's own description front matter and the package that ships it. See Module map.

Reference pages​

Beside every module's prose page the site carries a reference page, also generated: the permissions the module declares and their labels, its command palette actions and the route each opens, the settings it owns, whether an operator can switch it off and what that control defaults to, what it depends on, and the package that ships it. Every one of those is in the module's own manifest, so the reference page is rendered from the manifest and from nothing written by hand — which is why it cannot disagree with the platform. The navigation reaches it from the module's own entry, and a module nobody has written prose about yet has its reference page there under its id.

Write prose about what a module does; leave what it declares to the reference page rather than restating it. A restated declaration is a sentence that goes stale the next time somebody edits a manifest, with nothing to say so.

It is generated because it was wrong. Three hand-maintained lists described one population — this table, the sidebar and the pages on disk — and all three disagreed with the platform and with each other: 23 registered modules had no row here, eight written pages were reachable from no navigation at all, and nothing in the repository could see any of it. Adding a module now touches no file under docs/ but the module's own page.