Garden CMS

A Python content management system with live-preview editing, flexible collections, and pluggable storage.

Get Started Documentation

Features

Everything you need to manage content, nothing you don't.

Pages & Templates

Write page bodies in Jinja2 with full access to content blocks, media URLs, and JinjaX components. Override themes per page.

Collections

Define structured content types with custom field schemas. Card and detail templates with HTMX-powered paginated feeds.

Content Blocks

Global key/value pairs editable from the admin. Text, HTML with Jinja support, or image references — available everywhere as {{ site.key }}.

Themes

Jinja2 base templates with CSS. 48 classless CSS framework presets built in. Light/dark mode support out of the box.

Media Storage

Upload images to local disk or S3-compatible storage. CDN support with public URL rewriting. One-year immutable cache headers.

Markdown Mounts

Drop .md files in a directory, map it to a route in the admin. File-based routing with full theme integration.

Authentication

Password login or OAuth2/OIDC with PKCE. Group-based access control. Rate-limited login endpoint.

Stateless Deploys

Set STATELESS=true for serverless and multi-instance environments. One env var, zero code changes.


Stack

Built on mature, well-documented Python libraries.

Litestar
ASGI framework
Piccolo
Async ORM
PostgreSQL
Database
Jinja2 + JinjaX
Templates & components
HTMX
Admin interactions

Garden CMS is a lightweight, database-backed content management system written in Python. It is built on Litestar and Piccolo ORM, renders pages through Jinja2 and JinjaX templates, and uses HTMX for seamless interactions. Features include editable page templates with live preview, reusable content blocks, custom collections with user-defined schemas, media uploads to local disk or S3-compatible storage, swappable themes, and slug redirect history. Build any website you can imagine, dynamically.