« All posts

Plain: A Database-Free, Git-Native CMS in Vanilla JS

Plain stores content as Markdown and JSON files in a Git repo, needs no database or server, and builds a static site plus a JSON API — open source.

Plain is a Git-native CMS that stores an entire website as plain text files, eliminating the need for a database, server, or ongoing maintenance. Content lives in Markdown and settings in JSON, giving you version control and collaboration through Git, while the build step turns everything into fast static HTML pages plus a read-only JSON API. The engine itself is vanilla JavaScript with a single dependency (marked) and works even without JavaScript enabled in the browser.

Writers can edit files directly or use the browser-based editor at /admin/, which offers draft saving, publishing, live preview, image uploads, and one-click restore from page history. Authentication happens via a scoped GitHub access token, and adding your own Anthropic API key optionally unlocks AI-assisted editing features like writing improvements, title suggestions, and meta description generation.

The project ships with fifteen ready-made themes (blog, portfolio, restaurant, documentation, and more) and a folder-based plugin system; plugins like search and contact forms come built in, and the hook API is simple enough that new plugins can be generated by an AI agent from a single prompt. Migration tools for existing sites such as Jekyll, including URL redirect mapping, are included, and the whole project is open source under the MIT license.