Extend Appstrate like you extend Kubernetes.
Modules declare routes, schemas, hooks, and permissions. Load via MODULES env var. Zero footprint when absent.
A platform that can't be extended is a closed product with a Docs page.
Real platforms evolve. You need custom routes, custom logic, custom tables — without forking.
Appstrate ships a formal module contract. Modules own their DB tables, their routes, their hooks. Core knows nothing about them. Removing a module is removing a directory.
Declare. Load. Done.
A module exports an AppstrateModule default. The loader discovers built-ins, resolves npm packages, topologically sorts by dependencies.
Every piece of Appstrate is a declared, versioned artifact — the agent, its tools, its skills, its provider connections. You describe them once; the platform handles packaging, dependencies, isolation, and execution.
Each section below goes deeper on what that means for extend appstrate like you extend kubernetes.
View the full example in the docs →What makes it work.
Own your tables
Drizzle migrations, per-module tracking table. Forward references only.
Hooks + events
beforeRun, afterRun, onRunStatusChange. Gates + broadcasts.
Declare permissions
Extend the RBAC matrix in the same PR.
Feature flags
UI gates on module presence. Disable = zero footprint.
Build on Appstrate without forking.
Full authoring guide in /docs. Published modules load via npm specifier.