Simple Git CMS

开源 · MIT

编辑的人用它写稿,
后端就是你已有的仓库。

文章就是 GitHub 仓库里的 Markdown 文件。Simple Git CMS 是一个静态页面,在编辑者自己的浏览器里通过 GitHub API 读写它们。不需要你自己的服务器,也没有数据库。

在浏览器里试一下 在 GitHub 上查看 怎么装到网站上

演示会在你的浏览器里虚构一个仓库。不用登录,什么也不会发出去。

  • Astro、Hugo 之类都行
  • 一次保存一个 commit
  • English · 简体中文 · 日本語
Simple Git CMS 编辑器,正在编辑一篇带图注的文章

它替你省掉的三件事

01

没有属于你的东西要运维

编辑器是一个静态目录,放到网站旁边就行。它只和 GitHub 说话——没有后端要部署、要打补丁、要付钱、要盯着。

02

权限就是仓库权限

能 push 的人就能编辑。不用维护用户表,不用同步角色,也不用在第二个地方收回权限。谁改了什么,git 历史里本来就有。

03

发布就是一次 commit

文章和它的图片作为同一个 commit 提交,于是你现有的 CI 照常构建和部署。发布之后,顶栏会跟着这次 GitHub Actions 的运行走。

按下保存之后发生了什么

编辑器 你网站上的一个静态页面
一个 commit:article.md + 图片
GitHub API 从浏览器,用编辑者自己的令牌
push 触发
GitHub Actions 你现有的构建流程
部署
你的网站 Astro、Hugo,什么都行

草稿保存时会带上 [skip ci],所以不会触发构建。如果文章打开期间别人也改了它,编辑器会把对方的版本和你的版本都给你,而不是让谁的改动消失。

它能做什么

所见即所得,存出干净的 Markdown

打开一篇旧文章再存一次,文件一个字节都不会变。不会多出 HTML,也不会被重新排版。

图片不用先过一遍修图软件

粘贴、拖进来,或者一次选好几张。在浏览器里压成 webp,然后裁剪、旋转、加图注、并排摆放、替换。

用你自己的版式预览

文章由你的网站来渲染,可切桌面或手机宽度,连还没保存的改动和图片都算进去。

草稿、发布、退回草稿

标题、日期、标签、摘要。存草稿、发布、退回草稿、删掉草稿——全都只是普通的 commit。

冲突是处理掉的,不是装作没有

保存前会确认文件没在你背后被改动。真被改了,就让你在对方的版本和你的版本之间选。

用 GitHub 账号登录

GitHub App 整页跳转,手机上也能用,令牌会自动续期——也可以直接粘贴一个细粒度访问令牌。

三种界面语言

English、简体中文、日本語,当场切换。再加一种语言,只是多一个字符串文件。

登录中转哪儿都能跑

登录中转是一个没有依赖的单文件:Cloudflare Workers、Deno Deploy、Vercel、Netlify、Bun,或者你自己的 Node 服务器。

装到网站上

四步,其中最费时间的是写一个配置文件。

  1. 1

    构建并安装编辑器

    装到网站任意一个静态目录里,于是地址就是 /editor/。升级还是这两条命令,你的 config.json 和 logo 不会被动。

    npm install
    npm run build
    node scripts/install.mjs ../my-site/public/editor
  2. 2

    写 config.json

    放在编辑器的 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" }
    }
  3. 3

    部署登录中转

    一个文件,一个 GitHub App。文档里写的是 Cloudflare Workers,任何有 fetch 的环境都行。

  4. 4

    把编辑的人加进来

    一个 GitHub 账号、仓库的写权限、App 装在这个仓库上。权限模型就这么多。

它写出来的文件

编辑器不认识的 frontmatter 字段会被原样保留,所以它能编辑你网站上已有的文章。新文章的文件名就是创建它的那一分钟。

---
title: "A title"
date: 2026-10-21T03:00:00.000Z
tags: ["tag one", "tag two"]
draft: true
---

The body, in Markdown.
![](/uploads/20261021/abc.webp "An image caption")

它不适合的地方

README 里也写着,因为用上之后才发现更糟。

  • 编辑的人需要 GitHub 账号。想让没账号的人也能写,就得自己跑一个登录服务。
  • 一个网站一个文章集合,字段就是上面那些。
  • 预览是在浏览器里转换 Markdown 的,所以你的网站单独加的 Markdown 插件不会体现在预览里。
  • GitHub 令牌存在 localStorage——这是没有后端的编辑器通常要付的代价。请把它放在你自己控制的域名下。

看完整的一节 →

去看看代码

三份 README、一套不联网的测试,以及一个下午能读完的两千来行代码。

AZQ1994/simple-git-cms