Top
Best
New

Posted by brylie 3/29/2025

Plain – a web framework for building products with Python(plainframework.com)
310 points | 160 commentspage 3
timkofu 3/29/2025|
I’ve been using Django several years now. It works. Some things could be more straightforward, but once they work, they’re stable. I’ll keep an open mind though.
mrits 3/29/2025|
The older I get the more I want to be able to come back to code a few years later and not have to relearn the same framework
pknerd 3/29/2025||
Kind of off-topic, but I liked the concept of "llms.txt", something similar to robots.txt

https://plainframework.com/llms.txt

Since so many LLMs are around, there should be a standard URI to let LLM crawl about the website/product

rishikeshs 3/29/2025|
https://llmstxt.org/
system7rocks 3/29/2025||
I'm still waiting for a truly cross-platform framework using Python that builds natively and beautifully on ANY platform - from the Apple IIGS to MacOS M4 to web to Windows to Linux. With a click of a button. So I wasn't pleased to read how limited this framework is. Still waiting, I guess?
Cyphase 3/29/2025||
There are some things available, and people are working on it. Coincidentally, one of those people is Russell Keith-Magee of Django fame, who founded the BeeWare project.

https://beeware.org/

https://beeware.org/about/team/freakboy3742/

https://kivy.org/

sroerick 3/29/2025||
I’m not sure that happens in any language, but my sense is that it probably will not happen in Python.
librasteve 3/29/2025||
yeah - suggest you look at https://harcstack.org - raku is an open goal for doing new stuff like this
sroerick 3/29/2025||
Looks interesting! I will take a look. I think Zig and Zap look pretty cool too.

Seems like compiling to and deploying to Apple 2 is still a stretch

eclipxe 3/29/2025||
This looks pretty cool! Would be nice to see an integration with Tetra
oliwarner 3/29/2025||
Almost at 1.0 and this is the state of the docs? Linked from the home page.

https://plainframework.com/docs/plain-api/plain/api/README.m... https://plainframework.com/docs/plain-mail/plain/mail

Yikes. If you want to fork a project, rather than contribute, bring better game.

Dotnaught 3/29/2025||
"Plain was forked inside of PullApprove — a revenue-generating SaaS with Fortune 500 customers."

So...an effort to commercialize open source?

peternilson 3/29/2025||
Django still lacks typing support. Does Plain improve on this at all? I didn't see typing mentioned in the docs..
brylie 3/29/2025||
Relatedly, in case it's useful, the django-stubs package provides mypy compatible type stubs for Django:

https://github.com/typeddjango/django-stubs

yeswecatan 3/29/2025||
While it's truly a great ongoing effort and I am grateful to all the contributors, it's not nearly complete. You may think you're using the correct type until, surprise, you are not.
pbreit 3/29/2025|||
I personally like lack of typing which makes things MUCH easier. I'm curious the benefits of typing?
sroerick 3/29/2025||
If you want strong typing in a web framework, why wouldn’t you just use a language with strong typing?
rtpg 3/29/2025|||
Because people want strong typing, but also want other things. It's possible to want multiple things, and bemoan that whwat you use is still missing things you want.

Concretely, Django is way more usable than basically any web framework from the "strongly typed" space, especially for "dumb" CRUD stuff. And you're not hit with making decisions about how to do a bunch of things (though you can swap out mostly any part of Django for something else if you want to).

sroerick 3/29/2025|||
That makes sense! My personal feeling is that a web framework is not the right place in the stack to introduce typing.

There’s also probably an argument to be made that part of the reason for Django’s “batteries included” success and wide adoption is in part because it is built on an untyped language.

I get wanting both, though.

In my own work, I find most of the benefit of static types to be ensuring correctness at compile time, so I just don’t expect that in Python. I also have just not lost that many cycles to type errors. But I know some have strong preferences here.

9dev 3/29/2025||
The main benefit in the developer workflow is autocompletion and feature discovery in the IDE. Having to guess which methods and properties an object exposes, or jump to the documentation every time, is really frustrating. Compare that to e.g. Typescript, which excels in this area.
librasteve 3/29/2025||||
if you seek strong typing, but not all the time, in a language suited to web dev suggest you take a look at raku … for example https://harcstack.org
peternilson 3/29/2025|||
Yeah, exactly this. Django is just brilliant and sometimes I'd like to use it with typing.
teddyh 3/29/2025||||
Python is a strongly typed language. But Python is not statically typed; Python is dynamically typed, with optional type declarations which enables static type checking (by third-party software).
ok_dad 3/29/2025||||
I can’t use something else, since my job is working with Python, and type linting is a reasonable alternative in this case.
bowsamic 3/29/2025|||
Type annotations have nothing to do with whether a language is weakly or strongly typed
sgammon 3/29/2025||
Also, is there a Discord? Where's the community gathering? I'd like to try it :) looks neat.
bastawhiz 3/29/2025|
I'm really confused about what this project accomplishes. I agree that Django makes me jump through some unusual hoops (I simply never want to use views, forms, form sets, django email/caching/etc.) to use the subset I want, but I know that it'll "just work".

From the project's About page:

> What if you didn't have to worry about deprecation policies?

So nothing will ever get deprecated? Or things I use will just get ripped out?

> What if there were no committees?

As a user of the framework, is this supposed to appeal to me?

> What if you could change anything without consequence?

This sounds like a nightmare for a user.

> What if Django wasn't originally built for a newspaper circa 2003?

Does Django really carry that much (read: any) baggage from 22 years ago? It certainly doesn't feel like it.

---

Like I'm all for a good fork, especially if you're exploring something. But this project is telling me to use it _instead of django_ and other than "we have some third party packages built-in" it really doesn't tell me _why_ I should be using it. Frankly it feels like I'd be cooked if I chose this, since migrating back to Django proper if/when this becomes abandoned feels daunting.

There's not a philosophical reason (e.g., licensing) to choose this over Django, nor is there a meaningful cost that's being avoided.

You instantly become reliant on the Plain BDFL to upstream security patches. If that ever happens.

Everything and anything is liable to break at any time, since the project professes no obvious forward or backward compatibility.

What's great about Django is that I know I can build against a major version and know I'm not going to have to spin my wheels for 8-24 hours trying to upgrade to the next major version because the security patch wasn't backported to my version. I don't want my framework to have exciting minor versions. I want my features to be exciting every 3-5 years where I can say "alright, we'll take the two weeks to upgrade to the next major version". Especially when most of the exciting features can be delivered by third party packages instead of the core.

More comments...