Getting Started with Domma CMS
From npx to first published page in under five minutes.
Scaffold a new site
The fastest way to start — no global install needed.
One command.
npx domma-cms@latest my-site
cd my-site
npm installNo build step, no compilation. Fastify starts in seconds once dependencies are installed.
my-site/
├── bin/ # CLI entry point
├── config/ # All configuration JSON files
│ ├── auth.json
│ ├── content.json
│ ├── navigation.json
│ ├── plugins.json
│ ├── presets.json
│ ├── server.json
│ └── site.json
├── content/ # All content as flat files
│ ├── blocks/ # Reusable HTML block templates
│ ├── collections/ # Collection data (JSON entries)
│ ├── media/ # Uploaded media files
│ ├── pages/ # Markdown pages
│ └── users/ # User accounts (JSON)
├── plugins/ # CMS plugins
├── admin/ # Admin SPA (Domma + Fastify)
├── public/ # Public site assets
├── scripts/ # Utility scripts (setup, seed, reset)
├── server/ # Fastify server
└── .env # Secrets only (JWT_SECRET, NODE_ENV)npm run setup
The wizard asks for:
On completion, the wizard writes config/site.json and creates your admin user in content/users/<uuid>.json.
One more command.
npm run setupLocked out later? Run npm run reset to clear all users and start over. Use npm run fresh for a full reset plus demo content reseed.
npm start
npm startStarts the Fastify server on port 4096 by default. Change the port in config/server.json if needed.
npm run dev
npm run devSame as npm start, but with Node's --watch flag so the server restarts on file changes.
http://localhost:4096/admin/about) — this maps directly to the public URL[card], [hero], [slideover] are all supportedpublished and click SaveYour page is live at http://localhost:4096/about the instant you save.
Batteries, already installed.
| Palette | Dark | Light |
|---|---|---|
| Charcoal | charcoal-dark | charcoal-light |
| Ocean | ocean-dark | ocean-light |
| Forest | forest-dark | forest-light |
| Sunset | sunset-dark | sunset-light |
| Royal | royal-dark | royal-light |
| Lemon | lemon-dark | lemon-light |
| Silver | silver-dark | silver-light |
| Grayve | grayve-dark | grayve-light |
| Christmas | christmas-dark | christmas-light |
| Unicorn | unicorn-dark | unicorn-light |
| Dreamy | dreamy-dark | dreamy-light |
analytics
Lightweight page-hit tracking, stored in a JSON file — no third-party service.
theme-roller
Lets visitors cycle through the public site's themes with one click.
domma-effects
Scroll-triggered entrance animations for page elements — tunable per page.
| Key | Description |
|---|---|
default |
Standard page with navbar and footer |
with-sidebar |
Page with navbar, sidebar, and footer |
minimal |
Clean page with no navbar or footer |
landing |
Full-width landing page layout |
| Script | Purpose |
|---|---|
npm start |
Start the server |
npm run dev |
Start with --watch for development |
npm run setup |
Interactive first-run setup wizard |
npm run seed |
Populate demo content |
npm run reset |
Delete users and clear setup state |
npm run fresh |
Full reset plus reseed |
npm run build |
Bundle admin JS with esbuild |