A blazing-fast, plugin-first, open-source content management system built with Python, FastAPI, and modern web technologies — for teams who outgrew PHP but never wanted to.
No PHP, no plugin spaghetti, no mystery meat hosting requirements. Just a modern async core and a plugin API developers actually enjoy writing for.
Every request path is async from the router down to the database driver, so PyPress scales on a fraction of the hardware a synchronous CMS needs.
Write extensions in the language your team already knows.
Meta, sitemaps, and a redirect manager, no plugin required.
Swap storage backends with one config value.
Every endpoint you build is instantly documented.
Ship with a single docker compose up. Production images are under 180MB and ready for Postgres, MySQL, or SQLite out of the box.
JWT sessions with granular role-based permissions.
Consume content via REST today, GraphQL is on the roadmap.
Multi-tenant and audit logging on the roadmap for teams that need it.
Non-blocking I/O across routing, templating, and the database layer keeps response times flat under load.
A typed plugin SDK with lifecycle hooks for content, admin UI, and background jobs.
Jinja2-based themes with hot reload and scoped asset bundling.
Every content type is exposed as a documented, versioned REST endpoint automatically.
Short-lived access tokens, refresh rotation, and role-based access control baked in.
Automatic image optimization, responsive variants, and CDN-friendly URLs.
Track 404s, set up rules, and manage bulk redirects from the admin panel.
Write content in Markdown or the visual editor; both save to the same schema.
A Gutenberg-style block canvas for structured, component-based content.
Run a network of sites from one PyPress installation and database.
Browse, install, and update community plugins from inside the admin.
A curated catalog of free and premium themes, one click to install.
PyPress doesn't hide the framework underneath. Every route, dependency, and model is plain FastAPI, so you already know how to extend it.
from fastapi import FastAPI
from pypress import ContentEngine
app = FastAPI()
cms = ContentEngine(app)
@app.get("/")
async def home():
return {"project": "PyPress"}
@app.get("/posts/{slug}")
async def get_post(slug: str):
return await cms.posts.get(slug)
| Capability | PyPress | WordPress | Ghost | Strapi |
|---|---|---|---|---|
| FastAPI / Python core | ✓ | ✗ | ✗ | ✓ |
| REST API built-in | ✓ | partial | ✓ | ✓ |
| Automatic OpenAPI docs | ✓ | ✗ | ✗ | partial |
| Python plugin SDK | ✓ | ✗ | ✗ | ✗ |
| Theme marketplace | soon | ✓ | partial | ✗ |
| Built-in SEO & redirects | ✓ | partial | partial | ✗ |
| Media library w/ optimization | ✓ | partial | ✓ | partial |
| Docker-first deployment | ✓ | partial | ✓ | ✓ |
| Modern admin UI | ✓ | ✗ | ✓ | ✓ |
"We migrated our docs site off WordPress in a weekend. The plugin SDK meant our custom widgets ported over almost as-is."
"Finally a CMS where the API docs generate themselves. Our frontend team started building against it before the backend was even finished."
"The Docker image just works. We had staging and production environments up in under ten minutes."
forever, MIT licensed
everything in Open Source, plus
for regulated & multi-team orgs
Yes. The core CMS is MIT licensed with no seat limits, site limits, or feature gates. Enterprise add-ons will be optional and clearly separated from the open-source core.
SQLite for local development, and PostgreSQL or MySQL for production, all through the same async ORM layer.
Basic Python is enough to get started. Knowing FastAPI helps for advanced plugins that add their own routes, but the SDK covers most content and admin hooks without it.
A WXR import tool is on the v0.6 roadmap. Today, the REST API makes scripted migrations straightforward.
PyPress ships a full themeable frontend like WordPress or Ghost, but can also run headless behind its REST API, giving you both options from the same install.
Spin up a local instance in under two minutes, or follow along as we ship toward v1.0.