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).
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.
/ → Deploy.yourproject.pages.dev, and every Git commit auto-deploys. That auto-deploy is Kiln's publish button.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).
https://YOUR-WORKER.workers.dev/setup and press the button. The app is
registered under your account and the worker captures its credentials automatically — you never copy a secret.In worker/wrangler.toml, add your site URL to ALLOWED_ORIGINS
(comma-separated), then run npx wrangler deploy again.
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>
yoursite.com/#edit — that's
the secret knock. No edit buttons clutter your site for normal visitors.Let your client, team, or community in — no GitHub accounts:
https://YOUR-WORKER.workers.dev/google/callback.printf 'ID' | npx wrangler secret put GOOGLE_CLIENT_ID and same for
GOOGLE_CLIENT_SECRET (run in worker/).demo/functions/ folder and demo/members-login.html from the Kiln repo into your site.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/members/ — pages and files, PDFs included — is now invite-only.Add three small template files and Kiln's + New button does the rest — see the README section or let KILN_PROMPT.md generate them.
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.