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.
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.
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.
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.
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.
A single Rust binary with embedded SQLite for auth. No runtime dependencies, no database server to configure, no Node.js. Docker image included.
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.
Prometheus metrics, audit logging, content-addressed uploads with SHA-256 deduplication, version history with one-click revert, S3 backups, and deployment webhooks.
Describe your content types in JSON Schema, edit through a generated UI, consume via API, and sync between environments.
Write a JSON Schema (or let an AI generate one) with the fields, types, and validation rules for your content type.
The web UI generates a full editing interface from your schema. Create, edit, publish, and manage entries without touching JSON directly.
Fetch published content as JSON through the REST API. Authenticate with bearer tokens scoped per app with admin, editor, or viewer roles.
Export everything as a bundle and import it on another instance. Set up deployment webhooks to trigger rebuilds when content changes.
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