Open-source CMS

You vibe-coded a beautiful site. Then a client asked to change one word.

Kiln is the open-source, click-to-edit CMS for static HTML sites. The people you invite sign in and edit by clicking the page. Every change is a Git commit to a repo you own — never locked inside Kiln.

A maker on a couch, relaxed, after finishing a website on their laptop
the page is the CMS
Works with
Works today

Plain HTML sites

HTML, CSS and JS files in a GitHub repo, written by you or by an AI. Astro sites too, self-hosted for now.

Works after one command

Squarespace, Wix, WordPress.com

npx github:kilncms/kiln#release rescue <url> copies up to 50 pages of your live site into plain HTML files and tags them. From there it is a plain HTML site.

Works after a one-time freeze

Lovable, v0 and Bolt sites

npx github:kilncms/kiln#release rescue <url> --render --menu-shim freezes the app into plain HTML you edit by clicking. It is a job for someone at home in a terminal, done once: Node 20, one small install, then that command. It keeps how the pages look, the text, the pictures, the links and the phone menu. Forms, accordions and anything else that needs the app's own JavaScript stop working, and the report the command prints lists each one. What you need, and what it costs.

Not yet Editing a React, Next.js, Vue or Svelte app in place, without freezing it first. Sites that sit behind a sign-in.

Kiln is two sets of code.

One set runs on your page and does the editing. One runs on Cloudflare and handles sign-in and commits. They work against a GitHub repo and the host you choose. No database, no build server.

Kiln · on the page
The editor
The JavaScript that loads on your page and handles the inline editing. Click any element, change it, and Kiln splices the edit into your real HTML at its exact source location.
→
Kiln · the backend
The worker
A Cloudflare Worker. It handles sign-in, the REST API, and saves each edit to GitHub as a commit. On Kiln Cloud it lives at auth.kilncms.com. Run it yourself, or let Kiln run it for you.
→
yours, not ours
A GitHub repo
Your site's code and content, as plain HTML with full history. Owned by you or by your client. Never held by Kiln.
→
your choice
A host
Cloudflare Pages recommended, free and fine for commercial use. Any host that auto-deploys from GitHub works too, like Vercel or Netlify.

Run both sets yourself for free, or let Kiln run them for you. See the three routes below.

A finished website glowing on a laptop in an empty room at night

A great site is built once. It gets edited forever.

A site built by hand or by AI ships as plain HTML in a repo: fast, cheap to host, hard to change. The moment someone non-technical needs to fix a phone number or add an event, they're stuck, because editing means a code editor, a commit, and a deploy. Kiln adds the missing layer. The people who run the site sign in and edit it on the page, the HTML in your repo stays the only source of truth, and every change is still a normal Git commit.

Everything your editors need.

Editors change words and pictures by clicking the page; the layout and design stay exactly as you built them. v0.4.0 adds a review loop, a block library, theme tokens, a command palette, and a write API — still the same page-is-the-CMS idea. The docs walk through how each one works.

The Kiln menu: Publish, save as draft, schedule, new post or page, page settings, history & restore, add a gallery or events, make text/images editable, site menu, find & replace, people & access, settings
Every one of these hangs off a single draggable button. Sign in at /kiln, edit, publish. Visitors never see any of it.
Edit

On-page text

Click any text and type. Bold, links, lists, and headings, plus the site styles you defined in CSS as the palette, so formatting stays on-brand.

Images & documents

Click a photo to replace it (auto-compressed for the web), set its display size, or shrink the file. Insert images and PDFs anywhere in a paragraph, as a link, a chip, or a card.

Blocks & tables

Cards, team lists, schedule rows: duplicate, reorder, remove. Tag any block and visitors get automatic filter buttons above the list.

Astro sites

Source mode: the pages are generated from content files, so you edit the page, Kiln saves the underlying content and the site rebuilds. Today that covers plain text, dates, times, numbers and yes/no values; formatted text, pictures and adding or removing entries are still done in the files. Self-hosted only for now. How source mode works.

Structured content

Galleries

Turn any photo area into a gallery. Editors upload many photos at once; visitors get a grid and a full-screen lightbox with paging and captions.

Events & calendar

Add events through a form (date, time, location, link). Visitors switch between list, month, week, and day views, rendered from the same content.

Blog & new pages

A new post writes the article and its listing card in one commit. New standalone pages come from your template. No build pipeline.

Publish & access

History, drafts, scheduling

Every publish is a Git commit. Save drafts, schedule for later, name a version, and restore with a side-by-side “now vs then” preview. Publish status follows your host: Live ✓ when the deploy actually landed.

Editors & members

Add people by Google email, no GitHub account needed. Scope editors to pages or sections; put someone in Suggest-only or give them a Reviewer seat (comment-only). Members get gated /members/ pages and files.

Invisible to visitors

Visitors load a ~3 KB shim; pages with galleries or calendars add one ~5 KB file. The full editor loads only for people signed in at /kiln. On a phone it becomes bottom sheets. Two editors on one page see each other.

Review

Comment pins

Pin a comment to any element on the live page. Threads, resolve and reopen, a sidebar per page. A Reviewer seat comments and nothing else — the worker refuses every write.

Suggest mode

Tick Suggest-only on an editor and their Publish becomes Suggest changes. You approve or decline field by field, with a before/after. They cannot write to the live branch.

Named versions

Name any publish, then restore with a sandboxed side-by-side “now vs then” preview before anything is staged.

Compose

Block library & theme

“+ Add section” composes a page from your repo’s approved _blocks/ snippets. The Theme panel turns the site’s own CSS variables into color, font, and size controls — byte-exact stylesheet commits, no new schema.

⌘K palette

Jump to any page, field, or tool. Search the site’s text with in-context snippets, scoped to what an invited editor can see.

API, MCP & AI assist

A REST API and kiln-mcp let scripts and agents edit the same fields, scoped and sanitized. AI assist is optional and Self-hosted only: it uses an API key you put on your own worker. Kiln does not sell a hosted AI plan.

You set it up once, then invite others to sign in and edit.

One person handing a key across a laptop to another, warmly
You

Set it up once

You connect a GitHub repo and the worker. With the wizard, plan on 15 to 25 minutes on Kiln Cloud and 30 to 45 if you run the worker yourself. The repo can stay yours, or belong to your client. After that, editing happens at yoursite.com/kiln.

Editors

Zero setup

Anyone you add can change content: your client, their team, or you. Add their Google email, they sign in with Google and edit. No GitHub account, nothing to install. You can also limit an editor to certain pages, like just the blog.

Reviewers

Zero setup

A comment-only seat. They pin notes on the live page; they cannot publish, suggest, or change a word. The worker refuses every write for those sessions.

Members

Zero setup

People who only need to reach your gated pages. Add them by Google email, just like editors, and they sign in to unlock the members-only pages and files for as long as you allow.

A full CMS site that can run entirely free.

WordPress can't really be hosted for free: it needs a database and an app server running around the clock, and someone has to pay for those. Kiln needs neither. Your HTML files are the database, a static host serves them, and one free Cloudflare Worker handles sign-in and commits. If you self-host, the whole stack is free! The paid routes exist if you'd rather not run the worker, or not run anything at all.

Edit on the pageAny static HTMLBackend to runUpkeep & ease of usePrice
KilnYesYesOne small workerLow, set up once$0, open source
WordPressPartlyNo, PHP and themesServer, DB, patchesHigh, constant updates$5 to 25+/mo
Squarespace, WebflowYesNo, their platformn/aLow, but locked in$16 to 25+/mo
CloudCannonYesSSGs onlyn/aLow, hosted for you$45+/mo
Decap, SveltiaNo, a form dashboardYesNone, GitFiddly to wire upFree

Three routes. Pick who runs the infrastructure.

Your repo is yours on all three. The editor is the same too, apart from two things that are Self-hosted only today: source mode for Astro sites, and AI assist.

Open source

Self-hosted

Free forever, open source (AGPL-3.0)

You run: the worker + your own GitHub App.
You keep: the repo + the host.
  • You run the sign-in & commit worker. The wizard sets it up.
  • You host the site: Cloudflare Pages, Vercel, or Netlify
  • Your repo, your data, every feature
  • The wizard wires GitHub & Cloudflare for you, end to end
How to self-host
We run the worker

Kiln Cloud

$4.99 / mo per site · 7-day free trial

We run: the shared worker + GitHub App.
You keep: the repo + the host.
  • Self-serve: run npx github:kilncms/kiln#release to prep your repo
  • We run the sign-in & commit worker for you
  • You keep your own repo and your own hosting
  • No worker to deploy or keep running
Start free trial
We set it up

Fully managed

$14.99 / mo per site · 7-day free trial

We run: everything, hosting included.
We do: the setup, no code from you.
  • We set your existing site up on Kiln for you
  • You don't touch any code
  • Your content still lives in your repo, yours to take
  • Email on your domain — we set up receive-only forwarding at onboarding (you@yourdomain.com → your inbox)
  • Optional Concierge setup & tagging — one-time $399
Start free trial

Who runs what?

There are two pieces of infrastructure. The routes differ in who runs them and who does the setup.

Self-hostedKiln CloudFully managed
Site repo (your content)YouYouYou
Static hostYouYouKiln
Sign-in & commit workerYou deploy itKilnKiln
GitHub AppYours, wizard makes itKiln's, on your repoKiln's, on your repo
Making pages editableWizard or your AIThe npx commandKiln does it
Google sign-in for editorsYour own OAuth clientIncludedIncluded
Leaving KilnDelete two script tags — your site is already plain HTML in your repo

Which is for me? Comfortable in a terminal and want it free, start with Self-hosted. Want to skip running the worker but keep your own host, Kiln Cloud. Want to touch none of it, Fully managed. Your content lives in a GitHub repo you keep on all three. If you change your mind later the repo stays where it is and the setup around it is redone: what that takes.

Why "Kiln"

Your words, fired into permanent pages.

A kiln turns soft clay into something that lasts. Kiln turns a click into a Git commit: plain HTML in a repo you control, with every version kept. Nothing to export later, because your code never left your hands.

A home ceramics studio with handmade mugs and a softly glowing kiln

Common questions.

Is the editor different on the paid plans?

It is the same editor on all three. Two things work only on Self-hosted today: source mode for Astro sites, and AI assist, which needs an API key on a worker you run. Everything else that differs is who runs the infrastructure.

Can I move between plans?

Yes, in any direction, and your repo never moves. What you redo is the setup around it. Going from Kiln Cloud to Self-hosted you deploy your own worker, register your own GitHub App, set up your own Google sign-in, point kiln-config.js at the new worker, and add your editors and members again. The list of people is kept with the worker, so it does not come with you, and neither do comments, suggestions, scheduled posts or API tokens. Self-hosted to Kiln Cloud is the same trip the other way. Moving to or from Fully managed also moves the hosting.

Do I keep my website if I cancel?

Always. Every edit was a commit to your own GitHub repository and the content is already yours. Removing Kiln entirely is just deleting two script tags in your HTML.

What kind of sites does Kiln work with?

Sites whose pages are plain HTML, CSS and JS files in a GitHub repo, on any host that redeploys on push (Cloudflare Pages, Netlify, Vercel, GitHub Pages). It makes no difference whether you or an AI wrote the files. Astro sites work too, self-hosted for now. A React app from Lovable, v0 or Bolt works once you freeze it into plain HTML with one command. Kiln does not edit React, Next.js, Vue or Svelte code in place.

Who charges my card if I'm on a paid plan?

Lemon Squeezy, our authorized reseller and merchant of record. Monthly, recurring; cancel any time and keep access through the period you paid for. Details on Pricing.

Is it really free? What is the catch?

Kiln is open source (GNU AGPL-3.0), free for any use, including commercial and client work, for your own sites. GitHub repos are free. Cloudflare Pages hosts the site on a free tier that allows commercial use, and a free Cloudflare Worker handles sign-in and coordinates every commit. The catch is that you self-host those two free things. The wizard walks you through it; plan on 30 to 45 minutes the first time.

Do my editors need GitHub accounts?

No. Whoever owns the repo signs in with GitHub. Everyone else, your client, their team, or members, signs in with Google. Their changes are committed on their behalf and attributed by name.

Can editors break my design?

That is the whole point. Editors change content, not layout. Text, images, links, list items, menu entries: yes. Dragging boxes around: deliberately not. If you grant it, the Theme panel edits the site’s own CSS variables — colors, fonts, sizes — as a brand kit, not a freeform designer. Styles still come from CSS you own.

Is there a hosted AI plan?

No. AI assist is optional and Self-hosted only: it uses an API key you put on your own worker, so Kiln Cloud and Fully managed sites do not have it. Kiln does not sell a hosted AI plan. On every plan, the REST API and kiln-mcp let you point your own assistant at the site with a scoped token.

What if I don’t have a static site yet?

npx github:kilncms/kiln#release new scaffolds a fresh site from a template. Leaving Squarespace, Wix, or WordPress? npx github:kilncms/kiln#release rescue <url> crawls your live site into a clean static copy and tags it for Kiln. Plain rescue reads each page as the server sends it, so for a site that only appears once JavaScript has run in the browser, add --render: how that works.

Do I have to host on Cloudflare?

The sign-in worker runs on Cloudflare Workers, which are free. Your site itself can live anywhere that auto-deploys from GitHub. Cloudflare Pages is recommended because it is free and allows commercial use, but Vercel, Netlify, and GitHub Pages work too. On Fully managed, Kiln handles hosting for you.

Does it work with a site my AI built?

It depends on what the AI built. If it wrote plain HTML, CSS and JS files, yes: paste KILN_PROMPT.md into the same AI along with the site, and it adds the two script tags and marks what is editable. If it built a React app, which is what Lovable, v0 and Bolt usually generate, Kiln cannot edit it in place: in those apps the words live inside code. Freezing the site into plain HTML that you edit by clicking is done once, in a terminal (Node 20, one small install, then npx github:kilncms/kiln#release rescue <url> --render --menu-shim). If you built the site without ever opening a terminal, ask someone who has one. A brochure site comes across looking the same. Forms, sign-in and anything else that needed the app running stop working, and the report lists each one. From then on you change the site in Kiln, not in the AI builder, because a new export would have to be frozen again. What you need, and what it costs. A site that is already live on Squarespace, Wix or WordPress.com can be copied into plain HTML with npx github:kilncms/kiln#release rescue <url>.