Docs › Garden CMS
Garden CMS
Garden CMS is a small, self-hostable content management system written in Python. You write pages as Jinja templates, keep long-form docs as markdown, and edit everything — including the themes — from a terminal-flavoured admin. It runs on PostgreSQL or a single SQLite file, and your whole site can be exported to plain files and kept in git.
What you get
- Pages — Jinja2 page bodies with live preview, navigation order, per-page theme overrides
- Content blocks — Global values (
{{ site.key }}) for text, HTML and images, editable without touching templates - Collections — Structured content types (a blog, a changelog…) with your own field schema, card/detail templates and paginated feeds
- Markdown — Documents stored alongside your media (local disk or S3), edited or uploaded in the admin, and served under any URL prefix — like these docs
- Themes — A base template plus CSS, with a choice of classless CSS frameworks. The default, Mycelium Term, is terminal.css in earthy greens
- Media — Uploads to local disk or any S3-compatible bucket
- Portable content —
exportthe site to a directory of small files, commit it, andimportit anywhere — Postgres or SQLite - Authentication — An admin password, or OAuth2/OIDC single sign-on
Stack
| Component | Technology |
|---|---|
| Framework | Litestar (Python ASGI) |
| ORM | Piccolo |
| Database | PostgreSQL or SQLite |
| Templates | Jinja2 + JinjaX components |
| Admin UI | HTMX + terminal.css |
| Code editors | CodeJar + Prism.js |
Where to start
- Installation — run it locally in two commands
- Getting started — a tour of the admin
- Markdown — how these docs are stored and served
- Database — Postgres vs SQLite, migrations, export and import
- Deployment — containers, serverless, and production settings