Skip to main content
KilnCMS

Headless CMS on Phoenix + Ash

Model content once. Publish everywhere.

KilnCMS combines Ash resources, a LiveView block editor, version history, and headless GraphQL + JSON:API delivery — Postgres-centric, real-time by default, and built for teams who want control without the ops tax.

The KilnCMS block editor: a page's headings, text and image blocks, with the inspector alongside.

See it in action

The editing console, as your team uses it every day.

The KilnCMS content list, showing pages and posts with their states.

All your content in one list

Pages and posts with their workflow state, author and last change.

The KilnCMS publishing calendar with scheduled posts.

A publishing calendar

See what goes live when, and drag an item to reschedule it.

The KilnCMS media library with a grid of images.

A media library

Uploads get responsive variants, alt text and tags.

Everything a content team needs

Editing, review and delivery in one application you run yourself.

Block editor

TipTap rich text, drag-and-drop blocks, live preview, and version restore — all in LiveView.

Editorial workflow

Draft, review and publish, with scheduled publishing and content releases that ship several changes at once.

Roles and permissions

Admins, editors and viewers, enforced by policies on every read and write — in the editor and the APIs alike.

Headless delivery

AshGraphql and AshJsonApi expose your content model to any frontend, with signed preview tokens for drafts.

Search built in

PostgreSQL full-text search, with optional semantic and hybrid ranking on pgvector.

Media pipeline

Uploads are checked by their contents, stripped of location metadata, and resized into responsive variants.

Also included

  • Translations
  • Version history
  • Navigation menus
  • Redirects
  • Forms
  • Newsletters
  • Webhooks
  • Analytics
  • A/B experiments
  • Compliance reports
  • MCP server for AI assistants

Built for developers

Your frontend asks for published content over GraphQL or JSON:API, in any framework. Drafts stay private until you share a signed preview link.

  • GraphQL and JSON:API, both generated from one content model
  • Only published content is readable without a key
  • Webhooks when content changes
  • An OpenAPI spec and a browsable API explorer
Read the API docs
POST /gql GraphQL
query {
  postBySlug(slug: "hello-world", locale: "en") {
    title
    excerpt
    seoDescription
  }
}

Run it on your own servers

KilnCMS is self-hosted and needs only PostgreSQL — no Redis, no message broker, no separate search service. Your content stays in your own database.

Built on Elixir · Phoenix LiveView · Ash Framework · PostgreSQL · Oban