DrystoneCMS

v1.0 is out — install it today

The headless CMS that just works.

One binary. One database. One API. Drystone runs on your own server — no plugins to maintain, no configuration maze, and no surprises when you update.

Self-hosted SQLite built in REST + OpenAPI Open source

What it is

Content without complexity

Drystone is a headless CMS you download and start. It writes its data to a single SQLite file, serves a predictable REST API, and ships the admin interface in the same binary.

One binary, zero dependencies

Server and admin interface in a single executable. Download, start, done — or use Docker.

SQLite built in

No external database to set up. A backup is one file to copy. Postgres stays optional.

Fast by default

Compiled, with ETag and HTTP caching built in. No caching layer to configure first.

Schema as code

Your content model lives in one readable YAML file in git. The visual builder edits that same file.

Editor with drafts and preview

Block-based rich text, autosave, scheduled publishing, and live preview next to your own frontend.

Version history

Every change kept, with a visual diff and one-click restore. Work does not get lost.

Design goals

Built to stay small

These are the limits that shape the design. What does not fit does not go in.

< 60 sFrom download to a working admin
< 20 msp95 for cached API calls
181 MBMemory use when idle, measured
100%Self-hosted, no lock-in

For developers

Schema as code, types included

You define your content model in YAML and put it in version control. Validation, migrations, TypeScript types and the API all follow from it.

schema.yaml

# Your content model, in git
collections:
  articles:
    fields:
      title:
        type: text
        required: true
      slug:
        type: slug
        from: title
      body:
        type: richtext

REST API

// Predictable, with an OpenAPI spec
GET /api/v1/articles

{
  "data": [
    { "id": "1", "title": "Hello World" }
  ],
  "meta": { "count": 1 }
}

Get started

From nothing to a running admin in under a minute

One command downloads the binary for your platform, verifies its checksum and initialises your project. Node is only the delivery channel — Drystone itself runs as a compiled binary with no runtime to install.

bash

# 1 — create a project
npx create-drystone-cms@latest my-site

# 2 — start it, with the first admin account
cd my-site
DRYSTONE_ADMIN_EMAIL=you@example.com \
  DRYSTONE_ADMIN_PASSWORD=******** ./drystone start

# 3 — you now have an API and an admin UI
→ http://localhost:3000/api/v1
→ http://localhost:3000/admin