没有属于你的东西要运维
编辑器是一个静态目录,放到网站旁边就行。它只和 GitHub 说话——没有后端要部署、要打补丁、要付钱、要盯着。
开源 · MIT
文章就是 GitHub 仓库里的 Markdown 文件。Simple Git CMS 是一个静态页面,在编辑者自己的浏览器里通过 GitHub API 读写它们。不需要你自己的服务器,也没有数据库。
演示会在你的浏览器里虚构一个仓库。不用登录,什么也不会发出去。
编辑器是一个静态目录,放到网站旁边就行。它只和 GitHub 说话——没有后端要部署、要打补丁、要付钱、要盯着。
能 push 的人就能编辑。不用维护用户表,不用同步角色,也不用在第二个地方收回权限。谁改了什么,git 历史里本来就有。
文章和它的图片作为同一个 commit 提交,于是你现有的 CI 照常构建和部署。发布之后,顶栏会跟着这次 GitHub Actions 的运行走。
草稿保存时会带上 [skip ci],所以不会触发构建。如果文章打开期间别人也改了它,编辑器会把对方的版本和你的版本都给你,而不是让谁的改动消失。
打开一篇旧文章再存一次,文件一个字节都不会变。不会多出 HTML,也不会被重新排版。
粘贴、拖进来,或者一次选好几张。在浏览器里压成 webp,然后裁剪、旋转、加图注、并排摆放、替换。
文章由你的网站来渲染,可切桌面或手机宽度,连还没保存的改动和图片都算进去。
标题、日期、标签、摘要。存草稿、发布、退回草稿、删掉草稿——全都只是普通的 commit。
保存前会确认文件没在你背后被改动。真被改了,就让你在对方的版本和你的版本之间选。
GitHub App 整页跳转,手机上也能用,令牌会自动续期——也可以直接粘贴一个细粒度访问令牌。
English、简体中文、日本語,当场切换。再加一种语言,只是多一个字符串文件。
登录中转是一个没有依赖的单文件:Cloudflare Workers、Deno Deploy、Vercel、Netlify、Bun,或者你自己的 Node 服务器。
四步,其中最费时间的是写一个配置文件。
装到网站任意一个静态目录里,于是地址就是 /editor/。升级还是这两条命令,你的 config.json 和 logo 不会被动。
npm install
npm run build
node scripts/install.mjs ../my-site/public/editor
放在编辑器的 index.html 旁边。内容在哪、图片放哪、界面怎么称呼自己。
{
"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" }
}
一个文件,一个 GitHub App。文档里写的是 Cloudflare Workers,任何有 fetch 的环境都行。
一个 GitHub 账号、仓库的写权限、App 装在这个仓库上。权限模型就这么多。
编辑器不认识的 frontmatter 字段会被原样保留,所以它能编辑你网站上已有的文章。新文章的文件名就是创建它的那一分钟。
---
title: "A title"
date: 2026-10-21T03:00:00.000Z
tags: ["tag one", "tag two"]
draft: true
---
The body, in Markdown.

README 里也写着,因为用上之后才发现更糟。
localStorage——这是没有后端的编辑器通常要付的代价。请把它放在你自己控制的域名下。