Django 6.0 gives Python's most popular web framework a built-in Background Tasks system, native async pagination, and first-class Content Security Policy support, the biggest step toward treating async as a real thing rather than a bolt-on in the framework's twenty-year history. For teams that have reached for Celery to run background jobs for over a decade, the most requested feature in Django finally ships in the box.

  • Background Tasks land as a built-in framework, so defining and scheduling out-of-request work no longer requires Celery, Django-Q or Huey by default.
  • AsyncPaginator and AsyncPage mean async views no longer wrap pagination in awkward sync-to-async shims.
  • Native Content Security Policy support makes it far easier to defend against cross-site scripting and injection.
  • Django 6.0 requires Python 3.12, 3.13 or 3.14, dropping older versions to unlock speed and better asyncio behavior.
Background work before and after Django 6.0 Before, background jobs required an external tool like Celery. Django 6.0 defines and enqueues tasks natively while a worker runs them. BEFORE · DJANGO 5.x Django view Celery / Django-Q / Huey extra dependency, extra config AFTER · DJANGO 6.0 Django view Tasks frameworkbuilt in worker runs the task genztech.blog
Fig 1 Django 6.0 moves task definition and scheduling into the framework. You still supply a worker to execute the jobs, but the API and enqueueing now live in Django itself.

What is new in Django 6.0?

Released on December 3, 2025 to mark Django's twentieth anniversary, version 6.0 centers on four headline additions. Template Partials let you carve templates into small named fragments for cleaner, reusable markup. Background Tasks provide a built-in framework for running code outside the request-response cycle. Native Content Security Policy support makes browser-level injection defenses a first-class setting. And Async Pagination brings AsyncPaginator and AsyncPage so async views stop leaning on sync-to-async wrappers. Around those, the release modernizes the email API, refreshes GeneratedFields from the database after save on backends that support RETURNING, adds an AnyValue aggregate, and exposes forloop.length in templates.

RelatedReact Compiler Is On by Default, Ending Manual Memoization

Why do built-in background tasks matter so much?

Sending an email, resizing an image, calling a slow third-party API: none of that should block the HTTP response a user is waiting on. For over a decade the answer was to bolt on Celery or a similar queue, which meant extra infrastructure, extra configuration and a whole new failure surface for teams that just wanted to defer a bit of work. Django 6.0 standardizes the definition and enqueueing of that work inside the framework, with a common API that libraries and hosts can build against. One important caveat keeps expectations honest: Django handles task definition and scheduling, but you still supply an external worker or scheduler to actually run the jobs. It is not a full replacement for a heavyweight queue in every case, but it removes the friction for the common ones.

ConcernDjango 6.0 TasksCeleryDjango-Q
Bundled with DjangoYesNoNo
Extra broker requiredBackend-dependentYes (Redis/RabbitMQ)Yes
Task definition APIStandard, in-frameworkLibrary-specificLibrary-specific
Needs a workerYesYesYes
Best forCommon deferred workComplex pipelinesLightweight queues

How much better is async now?

Django's async support since 5.0 felt half-async and half-blocking: it worked, but it felt wrong in the seams. Pagination was a clear example, forcing developers to wrap synchronous paginators in sync-to-async calls inside otherwise async views. Version 6.0 addresses that with AsyncPaginator and AsyncPage, and the fix reflects a broader philosophy shift toward treating async as a genuine first-class path rather than a compatibility layer. Combined with the move to require Python 3.12 and newer, where asyncio itself is faster and the interpreter runs 10 to 25 percent quicker, the release meaningfully improves the story for async-heavy backends.

Who should upgrade, and when?

Django 6.0 supports Python 3.12, 3.13 and 3.14, and the team officially supports only the latest release of each series. If you are still on Python 3.10 or 3.11, the practical advice is to stay on the 5.2 LTS line, which is supported through its LTS window, until you are ready to move your Python version first. Teams already on modern Python get the async improvements and the security wins from native CSP with a relatively contained upgrade. As always, read the deprecations and backwards-incompatible changes in the official release notes before bumping a production project.

RelatedAstral's ty Brings Rust-Speed Type Checking to Python

  1. 2005Django's public release. The framework that shaped Python web development.
  2. 2019Django 3.0 adds ASGI and first async support. The async journey begins, cautiously.
  3. Dec 3 2025Django 6.0 ships on the 20th anniversary. Background Tasks, async pagination, CSP, template partials.
  4. 2026+Ecosystem builds on the Tasks API. Hosts and libraries standardize on the in-framework interface.
What to watch
  • Worker ecosystem. The value of built-in Tasks grows as hosts and libraries ship compatible workers and backends.
  • CSP adoption. Native CSP only helps if teams actually configure and enforce it. Expect templates and defaults to matter.
  • Async coverage. Pagination is fixed. Watch which remaining sync-only corners of the ORM get async paths next.

Our take

Django has a reputation for stability over spectacle, and 6.0 is exactly that reputation paying off. Background Tasks answer a request the community has made for more than ten years, native CSP quietly upgrades the security posture of every app that adopts it, and the async work finally feels intentional instead of grafted on. It is not a flashy release, and the Tasks framework still needs a worker to do anything. But it removes real friction from problems every production Django team hits, and that is worth more than a marquee feature nobody uses. Upgrade once your Python version is current.

Primary sources

Original analysis by GenZTech. Details from the official Django 6.0 release notes, current as of July 2026.