Plugins are the beating heart.

A curated library ships free with every install. Premium plugins unlock more power. Build your own in three files — no revenue share, no restrictions.

Six free plugins. Zero strings attached.

Todo — task manager with priorities
Notes — Markdown note-taking
Contacts — full CRM with CSV export
Site Search — full-text ⌘K search
Theme Switcher — visitor colour picker
Garage — UK vehicle + DVLA lookup

Included. No strings attached. These plugins ship with every Domma installation — self-hosted or managed. No account required, no licence fee, no catch.

Premium plugins — more power when you need it. Included in all hosted plans. Available as add-ons for self-hosted installs. Contact us if you want a specific plugin.

Enterprise — custom deployments and multi-site. For organisations running multiple domains from a single installation. Not self-service: consultation, scoping, and deployment are handled directly. Contact us to discuss your requirements.

Custom, scoped, and deployed with you.

Enterprise
Site Manager

The multi-site supervisor. Route multiple domains to their own isolated sites — each with its own content, plugins, theme, and configuration — all managed from a single admin panel. Built for agencies and organisations running multiple brands, clients, or regional sites from one installation.

Virtual host routing per domain
Per-site plugin activation and theming
Licence management and update distribution
Client plugin store — distribute your own plugins

Talk to Us

Build your own. Sell your own. Keep 100% of it. Full Fastify access, three-file plugin architecture, built-in Code Editor, plugin store distribution — no revenue share, no licence check, no restrictions.

Build. Ship. Sell.

Three files. Full Fastify 5 access. A built-in Code Editor in the admin panel. Zero revenue share. Distribute your own plugins through the built-in store — you keep everything you charge. From idea to production in an afternoon. From production to reseller in a month.

This isn't a walled garden. It's real Node.js, real Fastify, real server code — with a proper plugin API that hooks into every lifecycle event and lets you register shortcodes, routes, admin views, and storage adapters without forking the core.

Plugin Docs   Reseller Programme

Code on a developer's screen
Three files
Manifest, logic, config.

plugin.json for the manifest. plugin.js for the Fastify plugin. config.js for defaults. That's it. No scaffolding generator, no build step, no config hell. Drop a folder, restart, done.

Built-in Code Editor
In development.

Edit plugin source directly from the admin panel — syntax highlighting, autocomplete, inline docs, and live reload. No SSH, no deploy pipeline, no leaving the CMS. Save and the plugin restarts itself.

Full Fastify access
Not a DSL. Real Node.js.

Routes, hooks, middleware, decorators, request lifecycle — the entire Fastify 5 API is yours. Use any npm package. Talk to any database. Hit any third-party service. If you can do it in Node, you can do it in a Domma plugin.

Lifecycle hooks
React to everything.

form:submitted, collection:entryCreated, content:pageUpdated, user:loggedIn — plus a registerHook API for your own events. Build workflows, integrations, notifications, automations — no polling, no cron, no glue code.

Plugin store
Distribute built-in.

Ship your plugin through the built-in plugin store. Free, paid, freemium, licence-gated, your call. Other Domma installations discover and install with one click. Updates handled. Users managed. You own the relationship.

Zero revenue share
Keep 100%.

No commission. No platform cut. No revenue share on plugin sales. You set the price, you take the payment, you keep every penny. Your plugins, your terms, your customers — forever.

Three files. Full access. Zero boilerplate.

plugin.json
{ "name": "my-plugin", "displayName": "My Plugin", "version": "1.0.0", "icon": "star", "description": "A plugin that does something useful.", "author": "You", "tier": "free" }
plugin.js
export default async function (fastify, opts) { // Register a custom shortcode fastify.cms.registerShortcode('hello', (attrs) => { return 'Hello, ' + (attrs.name || 'world') + '!' }) // React to form submissions fastify.cms.on('form:submitted', async (data) => { console.log('New submission:', data.formSlug) }) // Add a custom route fastify.get('/api/my-plugin/status', async () => { return { ok: true, version: '1.0.0' } }) }