Nothing of yours to run
The editor is a static directory you drop next to your site. It talks to GitHub and to nobody else — so there is no backend to deploy, patch, pay for or watch.
Open source · MIT
Articles are Markdown files in your GitHub repository. Simple Git CMS is one static page that reads and writes them through the GitHub API, from the editor’s own browser. No server of your own, and no database.
Try it in your browser View on GitHub How to put it on a site
The demo makes up a repository inside your browser. Nothing to sign in to, nothing sent anywhere.
The editor is a static directory you drop next to your site. It talks to GitHub and to nobody else — so there is no backend to deploy, patch, pay for or watch.
Whoever can push can edit. No user table, no roles to keep in sync, no second place to revoke access. Who changed what is already in the git history.
An article and its images go in as a single commit, so your existing CI builds and deploys the site. After publishing, the top bar follows the GitHub Actions run.
Drafts are saved with [skip ci] so they don’t trigger a build. If someone else changed the article while it was open, you are shown their version and yours instead of losing either.
Open an existing article, save it again, and the file is unchanged. No stray HTML, no reformatting.
Paste, drop or pick several at once. Compressed to webp in the browser, then crop, rotate, caption, place side by side, replace.
The article rendered by your site, at desktop or phone width, including the changes and images you haven’t saved yet.
Title, date, tags, summary. Save a draft, publish it, revert it to a draft, or delete one — all of it ordinary commits.
Saving checks the file hasn’t moved underneath you. When it has, you choose between their version and yours.
A GitHub App redirect that works on phones, with the token refreshed automatically — or paste a fine-grained access token.
English, 简体中文 and 日本語, switchable in place. Adding a fourth is one file of strings.
The sign-in relay is a single dependency-free file: Cloudflare Workers, Deno Deploy, Vercel, Netlify, Bun, or your own Node server.
Four steps, and the longest one is writing a config file.
Into any static directory of your site, so the URL is /editor/. Upgrading is the same two commands; your config.json and logo are left alone.
npm install
npm run build
node scripts/install.mjs ../my-site/public/editor
Next to the editor’s index.html. Where the content lives, where images go, what the interface calls itself.
{
"repo": "owner/repo",
"branch": "main",
"siteUrl": "https://example.com",
"timeZone": "Asia/Tokyo",
"auth": { "base": "https://cms-auth.example.com" },
"collection": {
"dir": "src/content/news",
"url": "/news/{id}/"
},
"media": { "dir": "public/uploads", "url": "/uploads" }
}
One file, one GitHub App. Cloudflare Workers is the documented route; anything with fetch works.
A GitHub account, write access to the repository, and the App installed on it. That’s the whole permission model.
Frontmatter the editor doesn’t recognise is preserved untouched, so it can edit articles your site already has. A new article’s filename is the minute it was created.
---
title: "A title"
date: 2026-10-21T03:00:00.000Z
tags: ["tag one", "tag two"]
draft: true
---
The body, in Markdown.

Written down in the README too, because finding out later is worse.
localStorage — the usual trade-off for an editor with no backend. Serve it from a domain you control.Three READMEs, a test suite with no network in it, and about 2,000 lines you can read in an afternoon.