Victor A

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.

★ Star it on GitHub Read the spec

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 an llms.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.txt mean an agent can draft a post or update a page with zero integration, and a broken edit fails the build instead of the site.

Your content deserves to outlive its CMS.

★ Star it on GitHub