Log inSign up
Plain
112 posts
@plainframework

Plain

@plainframework
The full-stack Python framework designed for humans and agents. Follow for development updates. Follow @davegaeddert for more background.
Kansas
plainframework.com
Joined July 2024
1
Following
76
Followers
RepliesRepliesRepostsRepostsMediaMedia

Log in or sign up for X

See what’s happening and join the conversation

Continue with phone
or
Log in with username or email
Terms·Privacy·Cookies·Accessibility·Ads Info·© 2026 X Corp.
  • @plainframework
    Plain
    @plainframework
    18h
    Unique, check, and now foreign key violations in Plain all surface the same way: create()/update() attempt the write, Postgres rejects it, and you get a ValidationError on the field — "Author with id 5 does not exist." No pre-check SELECTs, no raced-duplicate 500s.
  • @plainframework
    Plain
    @plainframework
    Sep 2
    We found server connection errors dying on asyncio's default handler — a logger Plain never configured, invisible to any APM. 0.160.0 closes that: every exception in a Plain app lands in an OTel entry span or an ERROR log record. Both export. There is no third place.
  • @plainframework
    Plain
    @plainframework
    Sep 1
    plain portal gives you a Python shell into your production app over an encrypted tunnel. Starting one now requires an explicit --read-only or --read-write — no default. The database mode is right there in the command, so a human (or an agent) can judge it before it runs.
  • @plainframework
    Plain
    @plainframework
    Aug 31
    Response.status_code is read-only in Plain now. The status decides things everything downstream builds on — whether a body is allowed, how the response is framed on the wire — so it's fixed at construction. Renderers take it directly: self.render(form=form, status_code=422)
    Image
  • @plainframework
    Plain
    @plainframework
    Aug 29
    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.
Advertisement
Advertisement