Beta . Ortha CMS is in public beta. Every plan is free until it ends.
Get started
Menu

Platform · 21 / 23

Plugins

Every capability in the product is a plugin on the same public contract your own code uses.

Host apps/server/src/plugins.ts 10 / 10 plugins

How it works

  1. 01

    Each capability ships as its own package.

  2. 02

    Register the ones you want in plugins.ts, on the server and in the admin.

  3. 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.

Ours and yours are 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.

Full reference in the docs