One binary, zero dependencies
Server and admin interface in a single executable. Download, start, done — or use Docker.
v1.0 is out — install it today
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
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.
Server and admin interface in a single executable. Download, start, done — or use Docker.
No external database to set up. A backup is one file to copy. Postgres stays optional.
Compiled, with ETag and HTTP caching built in. No caching layer to configure first.
Your content model lives in one readable YAML file in git. The visual builder edits that same file.
Block-based rich text, autosave, scheduled publishing, and live preview next to your own frontend.
Every change kept, with a visual diff and one-click restore. Work does not get lost.
Design goals
These are the limits that shape the design. What does not fit does not go in.
For developers
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
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