Skip to content
GardenCMS

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 — export the site to a directory of small files, commit it, and import it 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