Platform · 21 / 23
Plugins
Every capability in the product is a plugin on the same public contract your own code uses.
How it works
- 01
Each capability ships as its own package.
- 02
Register the ones you want in plugins.ts, on the server and in the admin.
- 03
Your own plugin uses the same contract, slots and tools.
- Packages
- Published under @orthacms
- Registration
- Two arrays, server and admin
- Your code
- Same contract as ours
In depth · For engineers, agencies and platform teams
Everything here is a plugin
Content, media, translation, the dashboard and the assistant are all plugins in one list — and your plugin is registered in that same list.
The host knows nothing
Two small hosts, one for the API and one for the admin, each build an application from an array of plugins. Remove a plugin and its screens, routes and tables go with it; each server plugin owns its own schema and migrations.
Under the hood
Plugins integrate through declared ports and named UI slots. An absent collaborator degrades rather than crashes.
A host with four plugins docked into it: content, media, copilot and one of your own, all registered the same way.
What ships as a plugin
Show the table
| Plugin | What it contributes |
|---|---|
| content | The model, entries, revisions and the public API. |
| media | Folders, assets and the storage seam. |
| i18n | Locales, the fallback chain and per-locale rows. |
| identity | Sign-in, invites, roles and API tokens. |
| workspaces | The tenancy boundary and its guards. |
| activity | The audit log. |
| insights | The dashboard frame. |
| alarms | Content rules and their findings. |
| segments | Reader entitlements on the public API. |
| copilot | The assistant and its providers. |
| mcp | The endpoint external agents connect to. |
| content-graphql | GraphQL over the same services. |
Why it matters
- The extension API is ours
- There is no internal fast path and no privileged plugin.
- Thirty-two named slots
- Eighteen of them in the Content Library — toolbars, columns, editor tabs, dashboard panels and more.
- Your tools reach the agents
- A tool your plugin adds is available to the assistant and MCP clients, with the same permission check.
- Missing plugin, smaller product
- Optional dependencies are optional: without MCP the assistant still runs.
Questions
What language is a plugin?
TypeScript: a NestJS module with a Drizzle schema on the server, a React package on the admin.
Do I have to fork to add something?
No. Your plugin is a package in your repository, added to the array your application already has.
Will there be a plugin marketplace?
No. Plugins are packages in your build, so there is nothing to install at runtime.