November 28, 2025
Batteries included, no charger
A first look at Django's new background tasks
Django adds background jobs but no workers—fans cheer, skeptics shout "too late"
TLDR: Django 6.0 adds a built-in way to define background tasks but doesn’t include the workers to run them. The community is split: fans love the simpler, swappable API, while critics call it a decade late and worry about typing and missing features like retries—useful, but not a Celery replacement.
Django 6.0 just dropped a built-in way to create background jobs with django.tasks, and the comments turned into a tech soap opera. The catch? Django handles the “make a task” part but leaves the actual running of tasks to you—think batteries included, charger sold separately. It’s meant as a common API so you can plug in your own back-end, not a Celery killer. Cue the split crowd.
On one side: relief and confetti. A commenter who “couldn’t get Celery working” called this more aligned with Django’s batteries included vibe, while another said they’ve used the backport in production with a simple database setup and zero extra servers—chef’s kiss for small apps. Others love the idea of swapping back-ends for testing and continuous integration, dreaming of smoother defaults that fix Celery’s rough edges like weird early acknowledgments and retry drama.
On the spicy side: “This is 10 years too late,” grumbled a veteran, tired of duct-taping solutions. And the typing panic arrived fast—folks who suffered production downtime want ironclad type hints and decorator behavior that won’t sneak past code checks. Meanwhile, devs joked that Django brought snacks to a party that Celery hosted years ago, and the forum and ntfy.sh examples fanned the flames of “it’s simple, but don’t expect magic.”
Key Points
- •Django 6.0 adds the django.tasks framework for defining and queuing background tasks.
- •The framework does not include a worker; execution must be handled by external processes or services.
- •Its purpose is to provide a common API for task queue implementations; Jake Howard led the enhancement.
- •A sample project demonstrates sending notifications via ntfy.sh using httpx and an environment-supplied URL.
- •Tasks are defined with the @task decorator, invoked via enqueue, and can use context; built-in retries/backoffs are not included. Django 6.0 ships ImmediateBackend and DummyBackend.