Set up Kiln

From "static files on your laptop" to "a site your client edits in the browser."

⏱ About 10 minutes. Everything below is free. You'll need a GitHub account and a Cloudflare account (both free to create).

The easy way — one command. Run this in your site's folder and the wizard does every scriptable step itself, opening the right page and waiting whenever a platform requires a human click (there are exactly three):
npx github:erikkurtu/kiln
Already set up? Health-check everything with npx github:erikkurtu/kiln doctor. The steps below are the same thing, by hand.

1Put your site on GitHub + Cloudflare Pages

Hosting note: use Cloudflare Pages (or GitHub Pages) for business sites. Vercel's free Hobby tier prohibits commercial use in its terms.

2Free or Cloud? (same editor either way)

Kiln Open Source — free forever. You self-host the small auth engine: one free Cloudflare Worker of your own plus a one-click GitHub App. That's what this guide (and the wizard) sets up. The price of free is these ten minutes; you trust no one but yourself.

Kiln Cloud — hosted, paid (invite-only beta). We run the engine; you skip the rest of this step entirely. Your content still lives in your repo and your hosting, so you can switch to self-hosting whenever you like. Request a beta invite.

git clone https://github.com/erikkurtu/kiln && cd kiln
npm install
cd worker
npx wrangler kv namespace create KILN   # paste the printed id into wrangler.toml
npx wrangler deploy

Note the worker URL it prints (like https://kiln-auth.yourname.workers.dev).

3Register your GitHub App — one click

4Allow your site's origin

In worker/wrangler.toml, add your site URL to ALLOWED_ORIGINS (comma-separated), then run npx wrangler deploy again.

5Make your site editable

Create /assets/kiln-config.js in your site:

window.KILN = {
  repo:   'you/your-site-repo',
  branch: 'main',
  worker: 'https://kiln-auth.yourname.workers.dev',
  styles: [ { label: 'Accent', class: 'accent' } ],  // optional editor style palette
};

Copy dist/kiln.js and dist/kiln-editor.js from the Kiln repo into your site's /assets/, then add two script tags at the end of <body> on every page:

<script src="/assets/kiln-config.js"></script>
<script src="/assets/kiln.js" defer></script>

Then annotate what's editable:

<h1 data-cms="headline">Welcome</h1>
<img data-cms="hero" data-cms-attr="src" src="/img/hero.jpg">
<div class="cards" data-cms-repeat="services"> …repeatable blocks… </div>
<div class="nav-links" data-cms-menu="main"> …site menu… </div>
Using AI? Skip the manual work: paste KILN_PROMPT.md into Claude / v0 / Lovable along with your site, and it wires all of this — annotations, blog templates, the members area — for you.

6Sign in and edit


Optional: editors & members with Google sign-in

Let your client, team, or community in — no GitHub accounts:

  1. Create a Google OAuth client (console.cloud.google.com → Credentials → OAuth client ID → Web application) with redirect URI https://YOUR-WORKER.workers.dev/google/callback.
  2. printf 'ID' | npx wrangler secret put GOOGLE_CLIENT_ID and same for GOOGLE_CLIENT_SECRET (run in worker/).
  3. In your Kiln menu → People & access: add their Gmail, pick Editor or Member, set how many days access lasts (1–360). They sign in with Google. Done.

Optional: members-only area with gated documents

  1. Copy the demo/functions/ folder and demo/members-login.html from the Kiln repo into your site.
  2. Set two secrets on your Pages project:
    openssl rand -hex 32 | npx wrangler pages secret put KILN_MEMBER_SECRET --project-name YOUR_PROJECT
    printf 'you/your-repo' | npx wrangler pages secret put KILN_REPO --project-name YOUR_PROJECT
    printf 'https://YOUR-WORKER.workers.dev' | npx wrangler pages secret put KILN_WORKER --project-name YOUR_PROJECT
  3. Everything under /members/ — pages and files, PDFs included — is now invite-only.

Optional: blog & new pages

Add three small template files and Kiln's + New button does the rest — see the README section or let KILN_PROMPT.md generate them.

That's the whole stack.

A GitHub repo, a free static host, one tiny worker — and a site that edits itself. No database to patch, no monthly bill, no platform that owns your content. Questions or stuck? Open an issue.