Development updates
From seeing a problem to fixing it, with the new opentelemetry instrumentation, plain-observer, and plain observer diagnose
.
What else can we do if we embrace coding agents?!
Models in plain no longer support custom primary keys. Everything gets a bigint auto id field!
Time will tell whether more is really needed here, but in most cases you shouldn't need to customize primary keys in new apps and this sets a clear expectation across all of Plain.
When using plain-dev, your dev "services" now auto-start in the background any time they are required (perfect for a database running in a docker container).
This feels like a better DX for people, but also makes it more agent-friendly so you and claude can work side-by-side.
The admin toolbar shows exception tracebacks automatically when you break something.
This appears on top of your regular error view, so you never forget what your users are seeing in these situations!
plain-code now uses @biomejs v2 for a no-config formatting and linting of JS files. Just run plain fix
Plain now supports a single DATABASE instead of multiple DATABASES. This drastically simplifies a few areas of the framework.
Multiple db support can always come back if it proves to be a need, and by then it may take a different form than it has today!
The future of dependency updates?
Here's a preview of uvx plain-upgrade
and how it works...
Experimenting with a plain help
command that lists out all available commands and options... one more step towards figuring out what makes a framework "AI-friendly"
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
The plain-importmap package is being removed for now. The implementation wasn't quite right, and it's not totally clear that it's actually needed.
In practice, plain-esbuild (bundling) has been more useful, and plain-vendor can be used when creating importmaps manually.
First draft of the Plain principles https://plainframework.com/principles/
Elements are getting a syntax update! Now it looks more like jsx, with single braces to distinguish Python variables.
The updated admin toolbar
- goes full width
- shows request, url, and view info
- tracks sql queries across requests
- can show custom panels
More breaking changes! The request GET and POST have been replaced by query_params and data (which can now parse JSON).
The plain.api package is being reworked!
Plain itself is even more JSON-friendly than before, and the new plain.api views bring it all together with API keys and (optional) OpenAPI/swagger.json generation
The first plainx community package is plainx-sentry (integration with Sentry).
We aren't planning to maintain official, first-party integrations for other commercial services... but we could provide some kind of vetted directory that includes them!
Third-party packages will use the plainx
namespace (instead of plain
). This should help distinguish between official and community, and remove some decision making around naming.
Both use PEP 420 "implicit namespaces" so the end result is a clean from plainx import {pkg}
For anybody interested in helping out: https://plainframework.com/contribute/
Removing model abstractions, changing field options