Leverage the world's most popular
programming language
Plain is a fork of Django, bringing new ideas to established patterns in the Python landscape. Build a new business, an internal tool, or something for yourself.
Entrepreneurial
Plain was forked inside of PullApprove — a revenue-generating SaaS with Fortune 500 customers.
End-to-end
Local development with a single command. Go to production with dashboards, feature flags, and more.
Ecosystem
Plain is split into multiple first-party packages. Major features are optional and new ideas can evolve independently.
Core Packages
Building blocks for products in Python

plain
The foundations for shipping Python code to the web — urls, views, templates, forms, and more.

plain.models
Store your data in Postgres, MySQL, or SQLite with a tried and true ORM.
plain.cache
A caching solution designed just to work with your existing database.
plain.mail
App-wide email configuration and sending, with templates and attachments.
plain.sessions
Read and write to database-backed sessions.
plain.worker
An official solution for background work, backed by the database you already have.
plain.api
Build JSON APIs with the same class-based view architecture you already know.
Auth Packages
Authentication you can trust (and host yourself)

plain.auth
The foundation for adding users to your app, authenticating them to requests and restricting views.
plain.oauth
A flexible OAuth solution to support modern social logins and API access.
plain.passwords
Password-based login that works like it always has, if you want it.
plain.loginlink
Send one-time login links to users, and let them log in without a password.
plain.passkeys coming soon
Passwordless login with passkeys.
Admin Packages
The backbone of your back office

plain.admin
An admin dashboard you can fully customize, and Plain packages know how to integrate with.
plain.flags
Database-backed feature flags to control who sees what and quietly deploy progress.
plain.support
Provide better customer support without the need for third-party services.
plain.redirection
Monitor 404s and manage redirects in the database.
plain.pageviews
See what users are looking at, and provide better support.
Dev Packages
A tailored local development experience

plain.dev
Fire up your local development environment with a single command.
plain.pytest
Write and run tests with one of Python's most popular testing libraries.
plain.code
Format and lint your Python code with opinionated defaults.
plain.tunnel
Expose your local app to the internet to build webhook integrations.
Frontend Packages
Modern tools for modern user interfaces
plain.tailwind
First-class integration for everyone's favorite CSS framework. Node.js not required.
plain.htmx
Build a modern user experience with the tools you already know.
plain.elements
A new paradigm for reusable components across your app's templates.
plain.pages
File-based routing for marketing sites and documentation, using HTML and Markdown.
plain.esbuild
A simplified build process for JavaScript that needs to be compiled.
plain.vendor
Download and self-host JavaScript and CSS assets without depending on a CDN.