Plain is headed towards 1.0! Subscribe for development updates →

Dev updates

davegaeddert

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?!

Watch the clip on X

davegaeddert

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.

davegaeddert

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.

davegaeddert

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!

davegaeddert

plain-code now uses @biomejs v2 for a no-config formatting and linting of JS files. Just run plain fix

davegaeddert

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!

davegaeddert

The future of dependency updates?

Here's a preview of uvx plain-upgrade and how it works...

Video and longer post on X →

davegaeddert

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"

davegaeddert

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

davegaeddert
davegaeddert
2 months ago

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.

davegaeddert

Elements are getting a syntax update! Now it looks more like jsx, with single braces to distinguish Python variables.

davegaeddert

The plain fix command now uses Biome to lint and format javascript, json, and css files. Combined with ruff for python, it's an all-in-one preconfigured toolset for code formatting.

davegaeddert
davegaeddert
3 months ago

The updated admin toolbar

  • goes full width
  • shows request, url, and view info
  • tracks sql queries across requests
  • can show custom panels
davegaeddert

More breaking changes! The request GET and POST have been replaced by query_params and data (which can now parse JSON).

davegaeddert

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

davegaeddert

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!

davegaeddert

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}