Moosey CMS 🫎
A lightweight, drop-in Markdown CMS for FastAPI.
Moosey CMS turns a FastAPI application into a content-driven website using Markdown files, YAML frontmatter, and Jinja templates - no database required.
Features
- File-based Markdown content with automatic URL routing
- Jinja template resolution and sandboxed expressions
- Hot reloading and content-aware caching
- Visual admin for content, frontmatter, and static assets
- Git-backed file history, diff previews, and rollback
- SEO metadata, sitemaps, robots.txt, and RSS feeds
- Responsive image processing and CDN support
- JSON API for content management
Features that replace paid services
| Moosey CMS feature | Can replace |
|---|---|
Responsive image generation, srcset, local transforms, and CDN URL support |
Cloudinary, Imgix, and ImageKit |
| Open Graph, Twitter Cards, JSON-LD, canonical URLs, sitemaps, robots.txt, and RSS feeds | Yoast SEO Premium, Rank Math Pro, and managed SEO tooling |
| Markdown content management, a visual admin, structured metadata, file uploads, and a CRUD API | Contentful, Sanity, Ghost(Pro), and hosted headless CMS platforms |
| Automatic Git history, version tracking, diff previews, and one-click rollback | Contentful revisions, headless CMS version history, and Git-based CMS platforms |
Installation
Install every optional feature, including image processing and face-aware cropping:
uv add 'moosey-cms[all]'
# or
pip install 'moosey-cms[all]'
Choose a smaller installation when you do not need every feature:
| Package | Included features |
|---|---|
moosey-cms |
Core CMS |
moosey-cms[images] |
Core CMS and Pillow image processing |
moosey-cms[faces] |
Image processing and OpenCV face-aware cropping |
moosey-cms[all] |
All optional features |
Use the same package specifier with uv add or pip install.
Quick start
Scaffold and run a complete site:
moosey-cms init ./my-site
cd my-site
moosey-cms dev
Open http://localhost:8000. To add the admin UI to an existing project:
moosey-cms admin --templates ./templates --static ./static
See Getting Started for manual FastAPI setup, optional dependencies, and production commands.
Documentation
| Guide | Covers |
|---|---|
| Getting Started | Installation, setup, configuration, and the example app |
| CLI | Project scaffolding, admin installation, and server commands |
| Admin Dashboard & API | Admin UI, Git history, authentication, and JSON endpoints |
| Templates | Template resolution, layouts, collections, and pagination |
| Frontmatter | Supported metadata and project overrides |
| Markdown | Rendering and enabled Markdown extensions |
| Filters | Complete Jinja filter reference |
| Images | Responsive images, transforms, face detection, and CDNs |
| SEO | Metadata, structured data, sitemaps, robots.txt, and feeds |
| Security | Sanitization, CSP, template sandboxing, and deployment guidance |
| Patterns | Practical project structures and conventions |
The example/ project is a working reference implementation.
Development
uv sync
uv run pytest
Please report bugs and security issues through the GitHub issue tracker.
License
MIT License. Copyright © 2026 Anthony Mugendi.
Inspired by fastapi-blog by Daniel Roy Greenfeld.
Metadata
Release files for moosey-cms 0.9.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| moosey_cms-0.9.9.tar.gz | 2.8 MB | Without provenance | Details for moosey_cms-0.9.9.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| moosey_cms-0.9.9-py3-none-any.whl | Python 3 | none | any | Details for moosey_cms-0.9.9-py3-none-any.whl |
Total release size: 4.2 MB
Release files / moosey_cms-0.9.9.tar.gz
| Download URL | moosey_cms-0.9.9.tar.gz |
|---|---|
| Size | 2.8 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
418fd66e8350adfda2f52e31bdf17461d36f06fb204cb9ae4e6bcdf6e73160ee
|
|
BLAKE2b-256 checksum How to use checksums |
5d4236757b53d3998deebc21305d27b6831d81d61df6215e09c8e522ac1fb04e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / moosey_cms-0.9.9-py3-none-any.whl
| Download URL | moosey_cms-0.9.9-py3-none-any.whl |
|---|---|
| Size | 1.4 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0dfe23d8260615f8aab02ea14eb44b02edb50405e05e082a88f0fa380281b489
|
|
BLAKE2b-256 checksum How to use checksums |
d93d8d2cf7321cb9aea5eb63a532bb8cde576ca7ef1be66ef5672c408f77d5b3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.6 {"installer":{"name":"uv","version":"0.11.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for moosey-cms 0.9.9
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.