Skip to content

The Module Model

Everything deployable in TAPPaaS is a module — the smallest deployable unit. The foundation (cluster, network, templates, automation, backup, identity, logging) and every app you install are all modules, built the same way and operated by the same managers. This uniformity is what makes the platform composable: there is one model to understand, whether you are reading about the firewall or about Nextcloud.

The contract

Each module is a directory carrying a json contract (<module>.json, schema-checked) that declares:

  • provides — the services the module offers, addressed as <module>:<service> (e.g. cluster:vm, identity:identity, nextcloud:fileservice);
  • dependsOn — the services it consumes from other modules, in the same coordinates;
  • the resources and zones it needs (sizing, network placement);
  • the maintainer, so issues can be routed automatically.

Alongside the json sit the scripts the platform calls (install.sh, update.sh, test.sh) and the module's own documentation (README / INSTALL / DESIGN). The full authoring contract is in Develop; the catalog of what exists, stack by stack, is under Stacks.

The dependency model

Because every module declares its dependencies in its own json, the platform's dependency model is computed, never drawn by hand — install order is derived from it (ADR-003), and the picture below can never go stale (regenerated by src/generate-module-dependencies.sh in the source repo):

Module Dependencies

It comes in three views: the near-universal platform plumbing services every module consumes (as a table — drawing them would bury the structure), the application topology graph of the dependencies that actually shape the platform, and the complete per-module reference.

Where the design depth lives

Each module's design rationale and alternatives considered live with the module — every page under Stacks carries its architecture diagram and links the module's README and DESIGN. How the software behind a module gets chosen is a principle, not an accident: see curation criteria in the Design Principles (principle 4).