Skip to Content
New to cms0? Start with the hosted, self-hosted, or app integration path.
Self-hostingOverview

Self-hosting means you run @cms0/admin yourself.

The admin app gives you the editor UI, runtime API, schema snapshots, API keys, backups, triggers, and usage views.

What you run

  • @cms0/admin
  • PostgreSQL
  • filesystem or S3-compatible storage
  • email delivery for account and invitation flows
  • a reverse proxy with HTTPS

Setup order

Create a Postgres database

Set DATABASE_URL to the database used by @cms0/admin.

Choose storage

Use filesystem storage for local or single-host deployments, or S3-compatible storage for movable containers.

Configure auth and origins

Set CMS0_PUBLIC_APP_URL, BETTER_AUTH_URL, BETTER_AUTH_SECRET, and TRUSTED_ORIGINS.

Bootstrap the first admin

Set ADMIN_EMAIL and ADMIN_PASSWORD, start the app, then sign in.

Create an API key

Point your app and cms0.config.ts at the runtime URL ending in /api/content.

Runtime URL

For a local admin running on port 4002, the runtime API base URL is:

Local runtime URL
http://localhost:4002/api/content

In production, use your admin origin:

Production runtime URL
https://cms.example.com/api/content

Self-hosted app integrations still use @cms0/cms0; only the runtime base URL changes.

Success check

Your self-hosted instance is ready when:

  • you can sign in as the bootstrap admin
  • /api/content/health responds through the deployed origin
  • you can create an API key
  • pnpm exec cms0 build publishes a schema into the admin UI