What is cairn?

An open-source website engine that is both a finished CMS and an extensible toolkit.

Editors sign in from a link sent to their email, write in a browser editor with a live preview, and publish; each published change is recorded in the site’s history, under the writer’s name. There are no passwords and no separate content database, and the content is kept as plain files alongside the site itself.

For the developer behind the site, cairn is a toolkit: the interface the editors write in is designed to be extended, so the rest of what an organization needs (sign-ups, schedules, a member list) can be built into the same site.

Core Design Principles
  1. 01

    It’s a writing tool, not a dashboard.

    The editor is built in the lineage of iA Writer, Ulysses, and Typora; writers work in markdown with a preview rendered through the site’s own pipeline.

  2. 02

    The content lives in the organization’s own repository.

    Every publish is a commit under the writer’s name. History, attribution, and ownership come built in, and the writers never see any of it.

  3. 03

    There is nothing to run or protect.

    No server, no content database, no passwords; the site rides Cloudflare’s edge.

  4. 04

    Developers extend it in its own idiom.

    Features are first-class SvelteKit code on documented, versioned seams, and cairn itself is an npm dependency updated like any other.

  5. 05

    One sign-in covers everything the site does.

    Content and custom functions share one interface and one sign-in.

Open source·MIT-licensed

How this site works

A tour of cairn.pub as a deployment: one Worker, markdown in git, a live admin.

18 Jul 2026
Waymark and the cairn theme

Why cairn’s starter template went neutral, and where its identity moved.

17 Jul 2026
01

It’s a writing tool, not a dashboard

The editor is the center of cairn. Its lineage is the dedicated writing tools: iA Writer, Ulysses, Typora. Prose sits at a comfortable measure. Focus mode dims every paragraph except the one being written, and typewriter scrolling keeps the current line centered as the page moves. The live preview renders through the site’s own pipeline, so what an editor sees is what readers get.

Writing happens in markdown. A writer marks what something is (a heading, an emphasis, a list), and the site decides how it looks. That division keeps every page consistent, and the content itself stays plain text, readable in any editor and durable. Nobody has to know the notation to start. A toolbar enters the common marks, and a cheat sheet in the editor covers the rest. A spellchecker runs while the writer types.

A save stays private until a deliberate publish. Two editors cannot overwrite each other’s work, and every save is kept.

Why cairnwhy the editor is built this way

02

The content lives in the organization’s own repository

A cairn site’s content is markdown files in the site’s own GitHub repository. The site and its content live in one place, and the organization owns it. Every publish is a commit under the writer’s name, so the full history is kept, any earlier version can be restored, and attribution is never a mystery. A checkout of the repository brings the site’s code and its written content together in one place. There is no separate database to export and keep in sync.

The writers never see any of this. There is no git in the editor, drafts wait privately, and the version control stays invisible.

On the hosted site builders, Squarespace and its kin, the site lives in the vendor’s system under the vendor’s pricing, and leaving is an export project. The hosted headless services, Sanity and Contentful among them, have polished editors, but the content lives in their database under their pricing. A cairn site is code and files the organization owns outright.

Leaving cairn is cheap by construction. The content was ordinary files in the organization’s own repository all along.

Where each kind of state livesthe rule that puts content in git

03

There is nothing to run or protect

A cairn site deploys as one Cloudflare Worker, with D1 for sessions and R2 for media, and no server anywhere. There is no machine to patch, no content database to back up, and no password store to defend; editors sign in from a link sent to their email.

WordPress, Ghost, and the other server CMSes run on a server and a database that someone maintains, secures, and pays for. A cairn site has neither.

Cloudflare provides security-focused, reliable hosting at near-zero cost for a small site, and the same edge carries sites of any size WordPress could serve. Publishing goes through a GitHub App, and the commit is authored in the editor’s name. When something does need diagnosing, the site keeps a structured log of every sign-in and publish. The log is readable in Cloudflare’s dashboard once the site turns logging on.

cairn.pub runs on cairn, as do ecxc.ski and 907.life.

The security modeleach trust boundary a cairn site owns

04

Developers extend it in its own idiom

Cairn is a library for SvelteKit sites, and it assumes SvelteKit throughout: the admin mounts inside the site’s own app as a route and layout pair, the seams and the starter template are SvelteKit code, and a team working in React or elsewhere is holding the wrong tool.

There is no plugin architecture. WordPress-style plugins are frequently awkward and kludgy; in cairn, extension is ordinary code, in the same patterns and with the same toolkit the CMS itself is built with. SvelteKit is the framework developers consistently enjoy, DaisyUI expresses components as plain named styles, and that idiom is the easiest to copy and extend. The scaffolding carries the design system, so custom screens come out visually coherent with the rest of the admin.

The public surface is narrow, versioned, and checked by gates. What a developer builds on it survives engine updates, and cairn itself is an npm dependency updated like any other. The defaults are replaceable through the same seams: a site can bring its own sign-in or its own authorization rules without forking the engine. One system to run, to update, and to hand to the next developer.

Architecturewhat the engine owns and what the site owns

05

One sign-in covers everything the site does

An organization’s site rarely stops at posts and pages. The rest of what it needs (a sign-up form, a schedule, a member list) is built by the developer as screens in the same admin, and an editor reaches them with the same email-link sign-in as the writing.

The permission model stays small on purpose. There are exactly two roles. Editors write and publish; owners also manage the editor list. There is nothing finer-grained to configure, and no approval queue to route work through. A site of this scale runs on trust, and cairn’s design assumes it. An organization that needs its own roles (an instructor, a club admin) names them in screens its developer builds, on top of the same sign-in.

This is where the git-based CMSes stop. Sveltia, Decap, and the others share cairn’s storage idea, but their admins end at content editing. Cairn’s admin is the scaffold the rest of the site builds into.

Give a role its own admin areathe pattern end to end

Getting started

Build your first cairn site walks from an empty directory to a deployed site with a working admin. A new site starts from Waymark, the included starter template. Building a site requires a Cloudflare account and a GitHub repository.

Build your first cairn site