Plain — a Git-native CMS
Content is Markdown files, configuration is JSON, and the build emits a fast static site. No database, no build server to babysit, no lock-in — and it works with JavaScript disabled.
Plain is a CMS built for the age of AI: because content is just files, any agent can write a post, open a pull request, or update a page with zero integration — and the tests protect the schema, so a bad edit fails the build, not the site.
Open source and growing — ★ 0 on GitHub.
Why Plain
-
Content is just files
Every post is a Markdown file with frontmatter. Edit it in the admin, in your own editor, or with an AI agent — they all touch the same file, and every save is an ordinary Git commit.
-
The API is static
Every build emits a read-only JSON API under
/api/, plus anllms.txt, so any script or AI agent can read your whole site in one request. No server to run. -
Works with JavaScript off
The published site is plain HTML: it loads instantly, ranks well, and keeps working when scripts fail. Every plugin is progressive enhancement on top.
-
Small core, real extensions
The whole engine is one runtime dependency and a core kept deliberately small — anything bigger becomes a plugin. Themes and starters restyle the site from tokens, no framework required.
Questions, answered
- Where does it host?
Anywhere static — GitHub Pages, Cloudflare, Netlify, or your own VPS. The build emits a folder; you serve the folder.
- Do I need a database?
No. The repository is the database: content is files, configuration is JSON, and every change is a commit with full history you can revert.
- Can AI agents run it?
Yes — that's the point. Files plus a static JSON API and an
llms.txtmean an agent can draft a post or update a page with zero integration, and a broken edit fails the build instead of the site.