SubstruktSUBSTRUKT
DocsGitHub
SUBSTRUKT · OPEN SOURCE CMS

Your content as files. Your CMS as one binary.

A headless CMS that stores content as JSON files on disk and serves it over a REST API. No database server, no SaaS — run it anywhere.

Read the docsGitHub$docker pull ghcr.io/wavefunk/substrukt
RUNTIME
SINGLE BINARY
SCHEMA
JSON SCHEMA
DATA
REST API
STORAGE
FILES ON DISK
— 01 / FEATURES

No vendor lock-in.

Content lives as plain JSON files you can inspect, version control, and move between environments. The CMS is a single binary with SQLite for auth. Nothing else to install or maintain.

— 01

Editors that build themselves

Define a content type in JSON Schema and the web UI generates the forms — text fields, file uploads, nested objects, arrays. Change the schema, the editor updates.

— 02

Content you can read

Every entry is a JSON file on disk, not a row in a database. Inspect it, diff it, commit it to git, or copy it to another server. In-memory caching keeps reads fast.

— 03

Full REST API

Every content type gets CRUD endpoints with bearer token auth and role-based access control. Export and import bundles to sync content between local, staging, and production.

— 04

One binary, nothing to install

A single Rust binary with embedded SQLite for auth. No runtime dependencies, no database server to configure, no Node.js. Docker image included.

— 05

AI-friendly CLI

Run `substrukt prime` to give any AI agent full context on your schemas, API, and CLI. AI tools can generate JSON Schemas, create content via the API, and manage deployments without manual setup.

— 06

Production-ready out of the box

Prometheus metrics, audit logging, content-addressed uploads with SHA-256 deduplication, version history with one-click revert, S3 backups, and deployment webhooks.

— 02 / HOW IT WORKS

Four steps to content.

Describe your content types in JSON Schema, edit through a generated UI, consume via API, and sync between environments.

— 01

Describe your content

Write a JSON Schema (or let an AI generate one) with the fields, types, and validation rules for your content type.

— 02

Edit in the browser

The web UI generates a full editing interface from your schema. Create, edit, publish, and manage entries without touching JSON directly.

— 03

Consume via API

Fetch published content as JSON through the REST API. Authenticate with bearer tokens scoped per app with admin, editor, or viewer roles.

— 04

Sync and deploy

Export everything as a bundle and import it on another instance. Set up deployment webhooks to trigger rebuilds when content changes.

— 03 / QUICK START

Running from the CLI.

Pull the Docker image or build from source, create the first admin from the CLI, then sign in.

# Docker (recommended)
docker pull ghcr.io/wavefunk/substrukt
docker run --rm -v substrukt-data:/data ghcr.io/wavefunk/substrukt create-admin --email admin@example.com --username admin --password 'change-me-now'
docker run -p 3000:3000 -v substrukt-data:/data ghcr.io/wavefunk/substrukt

# Or build from source
git clone https://github.com/wavefunk/substrukt.git
cd substrukt && cargo build --release
./target/release/substrukt create-admin --email admin@example.com --username admin --password 'change-me-now'
./target/release/substrukt serve