The full-stack Python framework designed for humans and agents. Follow for development updates. Follow @davegaeddert for more background.

Kansas
Based in United States
Filter
Exclude
Time range
-
Minimum likes
Secrets in Plain are a type SECRET_KEY: Secret[str] `plain settings get` now masks them like `settings list` already did. Matters more with agents: everything a command prints lands in the transcript. `plain settings get --reveal` is the explicit ask
13
Plain now requires Python 3.14. The first payoff is sql() in plain-postgres: the SQL is the literal parts of a t-string, every interpolated value binds as a parameter, and passing a plain str is a type error.
23
Starting to rework some of the postgres APIs
1
22
plain dev runs your whole local setup in one command: preflight checks, pending migrations, an auto-reloading server, Tailwind watch, and Postgres. It serves HTTPS by default with locally-trusted certs, so dev behaves like production from the first request.
1
2
33
Every constraint in Plain is now checked at the write that violates it — never at COMMIT. FKs are NOT DEFERRABLE (deferral was a 2007 Django fixtures thing; Plain has no fixtures), and a bad FK in create()/update() is a ValidationError on the field, not a commit-time traceback.
2
68
plain.dev now manages development databases so they track your worktrees automatically. A new checkout gets its own copy of your main database, data included, the first time you run the dev server there — nothing to configure, nothing to name.
3
156
Making a little progress on the admin UI... - pyproject.toml project name for branding - icons for sidebar nav - gravatar for logged in user
1
5
157
Experimenting with a MARK comment in the Plain source code, which we can render as sections when displaying docs. Inspired by # pragma mark in Objective-C and MARK in Swift
1
4
172
Plain 0.58.0 includes completely rewritten CSRF protection — no more {{ csrf_input }} needed! This mostly relies on the modern Sec-Fetch-Site header and some great research by Filippo Valsorda (words.filippo.io/csrf/), and the new csrf middleware in Go 1.25.
1
4
167
plain-code now uses @biomejs v2 for a no-config formatting and linting of JS files. Just run `plain fix`
3
142
plain.pytest 0.8.0 includes a new `testbrowser` fixture — this brings together playwright, pytest-playwright, and gunicorn to start running browser tests with no additional setup
1
1
3
589
For anybody interested in helping out
1
1
2
87
Plain is getting close to the 1.0 release — follow for updates or get email updates at plainframework.com/follow/
3
92