# If Django were created today, which batteries would you expect to be included in core?

**URL:** <https://forum.djangoproject.com/t/if-django-were-created-today-which-batteries-would-you-expect-to-be-included-in-core/34934>\
**Category:** Django Internals\
**Created:** [September 20, 2024, 8:59am UTC](https://forum.djangoproject.com/t/if-django-were-created-today-which-batteries-would-you-expect-to-be-included-in-core/34934 "2024-09-20T08:59:17Z")\
**Posts on this page:** 4\
**Page:** 2

<div class="post-metadata">

**Author:** ![ryanhiebert](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/ryanhiebert/32/64_2.png) [@ryanhiebert](https://forum.djangoproject.com/u/ryanhiebert)\
**Post date:** [December 5, 2024, 4:38pm UTC](https://forum.djangoproject.com/t/if-django-were-created-today-which-batteries-would-you-expect-to-be-included-in-core/34934/22 "2024-12-05T16:38:03Z")

</div>

My biggest missing features that should be built-in are probably types and tenancy that doesn’t expect a separate settings file.

But I’d probably slim down on the “built-in” batteries if given a fresh slate, and have more official or recommended batteries, recommended in our documentation and part of our search, navigation, and tutorial, that would still be separate packages from core Django. I think that would likely provide the best balance between maintaining an extremely stable core, encouraging innovation in our community, and making the discovery of 80% tools easy to find.

---

<div class="post-metadata">

**Author:** ![medihack](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/medihack/32/10640_2.png) [@medihack](https://forum.djangoproject.com/u/medihack)\
**Post date:** [March 10, 2025, 5:13pm UTC](https://forum.djangoproject.com/t/if-django-were-created-today-which-batteries-would-you-expect-to-be-included-in-core/34934/23 "2025-03-10T17:13:36Z")

</div>

- Template components - The current template system without extensions feels quite limited and inconvenient, especially compared to modern component-based frameworks.
- Type hints supported by Django core - IMHO type hints are the present and the future.
- REST API (sync and async) support in Django core - It’s an integral part of so many projects, even when not using a JS frontend.
- Improved user authentication - The required username field feels a bit antiquated. Also make a custom user model the default.
- A modernized Django admin panel.

---

<div class="post-metadata">

**Author:** ![deronnax](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/deronnax/32/26687_2.png) [@deronnax](https://forum.djangoproject.com/u/deronnax)\
**Post date:** [May 20, 2025, 7:13pm UTC](https://forum.djangoproject.com/t/if-django-were-created-today-which-batteries-would-you-expect-to-be-included-in-core/34934/24 "2025-05-20T19:13:28Z")

</div>

On-and-off Django developer here. I think those are what you would expect from a major webserver in 2025:

- authentication that just works. Or just nothing at all, and instructions to install a package that provides it. Possibly to be picked from a list vetted by Django
- decoupled settings for development and production, declarative if possible
- simpler, saner deploy to production. Maybe bless/recommend whitenoise ? Maybe a `check --production`, that would check for ALLOWED\_HOST, CORS headers, TLS, all those things that make that your website that worked stopped stopped working when `DEBUG` switched to False
- native solution for background job, because you need them for tasks that django consider vitale (sending mails) (I know this one is coming, pfew)
- easier handling of static assets. I am a dev backend, I have no idea of how to handle static assets, I would love a django command that does all the cruft for me
- Less rigid NIH policy. Maybe bless and embrace whitenoise, wekzeug, debug-toolbar

I worked with Rails for two years recently, and, wow, it was a eye-opening experience:

- everything you need to startup a website just work.s You can go to production with the default generated template immediatly
- declarative and decoupled settings, with an escape hatch to do computations or take value from environment variable
- background job are a first class citizen, core functions that should be background (like `send_mail`) are async by default. Just pick an async job runner from the list Rails gave you, and you are good to go
- builtin pipeline for static assets. It’s not awesome but it will do what you need
- of course you don’t need a special NGINX configuration for static assets or a 3rd part package
- it has the equivalent of django-storage builtin. This one and many others
- bonus: Rails has “object-level” scaffolding and I felt in love with them. Imagine, `./manage.py scaffold Person name age:int birthdate:datetime`, and voila, I have a model, CBV CRUD view, form and a HTML templates skeleton

Of course it’s not perfect, the cracks start to show when your app becomes big, and most importantly: it’s not python.

---

<div class="post-metadata">

**Author:** ![adamghill](https://sea2.discourse-cdn.com/flex026/user_avatar/forum.djangoproject.com/adamghill/32/1820_2.png) [@adamghill](https://forum.djangoproject.com/u/adamghill)\
**Post date:** [September 24, 2025, 10:55am UTC](https://forum.djangoproject.com/t/if-django-were-created-today-which-batteries-would-you-expect-to-be-included-in-core/34934/25 "2025-09-24T10:55:16Z")

</div>

You might already know about these third-party libraries, but I’ll link them just in case.

> all I want is a hook for a build step and I’ll write its code myself

I created a filter for `django-compressor` (inheriting from `CallbackOutputFilter`) as my hook like this: [refreshcss/refreshcss/filters.py at main · adamghill/refreshcss · GitHub](https://github.com/adamghill/refreshcss/blob/main/refreshcss/filters.py#L22-L23). There isn’t great docs around this from what I remember, but it worked well for my purposes, ymmv.

> strict Django templates

[GitHub - boxed/django-fastdev: An app to make it safer, faster and more fun to develop in Django](https://github.com/boxed/django-fastdev) by @boxed

> first-time deployments

[GitHub - django-simple-deploy/django-simple-deploy: Deployment, for Djangonauts with deadlines.](https://github.com/django-simple-deploy/django-simple-deploy/) by @ehmatthes

[Previous page](https://forum.djangoproject.com/t/if-django-were-created-today-which-batteries-would-you-expect-to-be-included-in-core/34934.md?page=1)
