Oct. 15, 2024

Adding a new contrib package to Django

Django is well known for it's for stabiltiy and it's slow pace which can be annoying is a strength, especially given the stength of the third-party packages in the ecosystem. It's also fairly well known that the community suggests that a third-party package is the first step in proposing a new feature for Django. There is a benefit to a third-party package, it's faster to churn out releases as the design of the feature get's fleshed, bugs can be fixed quicker and breaking changes can happen quicker as well. Essentially Django core is slow, process heavy and stable and for good reason.

However, I do wonder (as I written before), if there is a middle ground in the form of blessed packages (that can change). My latest idea & experiment for this is allowing a list of approved (third-party) packages to be installed with in django.contrib. Technically it's possible as I created this package (github, pypi) which can be installed separately and looks like a core contrib package.

I would not advocate for a free-for-all in this regard, I would suggest some checks that verify the list of contrib apps in INSTALLED_APPS against a hardcoded list (or possibly a setting?). This would mean that the community still verifies what is considered a contrib app.

The other benefit to these third-party contrib apps is that a stable version could be included into core, then it's down to the choice of an individual team/developer if they want to pick up the latest versions by upgrading the third-party install. Perhaps we could also leverage virtual packages to include these extra contrib packages. Essentially it allows us to pick slow and steady as well as the latest & greatest for a these packages.

Finally one things that I would want to be clear is that I don't want to put anymore maintenance burden onto core than is necessary to allow a migration path for new features/batteries to get the wide adoption as a 'first party' package?

What do you think? Is this a crazy idea or do you think it has some legs? Please do checkout the package/code above, I'm interested in what this idea could unlock!

P.S. Woop for day 200!