2008-09-19 19:44:10 +00:00
|
|
|
========================
|
|
|
|
Django's release process
|
|
|
|
========================
|
|
|
|
|
|
|
|
.. _official-releases:
|
|
|
|
|
|
|
|
Official releases
|
|
|
|
=================
|
|
|
|
|
2011-07-19 13:16:09 +00:00
|
|
|
Since version 1.0, Django's release numbering works as follows:
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2011-10-14 00:12:01 +00:00
|
|
|
* Versions are numbered in the form ``A.B`` or ``A.B.C``.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
* ``A.B`` is the *feature release* version number. Each version will be mostly
|
|
|
|
backwards compatible with the previous release. Exceptions to this rule will
|
|
|
|
be listed in the release notes.
|
|
|
|
|
|
|
|
* ``C`` is the *patch release* version number, which is incremented for bugfix
|
|
|
|
and security releases. These releases will be 100% backwards-compatible with
|
|
|
|
the previous patch release. The only exception is when a security or data
|
|
|
|
loss issue can't be fixed without breaking backwards-compatibility. If this
|
2014-07-29 09:23:03 -04:00
|
|
|
happens, the release notes will provide detailed upgrade instructions.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
* Before a new feature release, we'll make alpha, beta, and release candidate
|
2013-02-24 11:38:34 +01:00
|
|
|
releases. These are of the form ``A.B alpha/beta/rc N``, which means the
|
|
|
|
``Nth`` alpha/beta/release candidate of version ``A.B``.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2013-02-24 11:38:34 +01:00
|
|
|
In git, each Django release will have a tag indicating its version number,
|
|
|
|
signed with the Django release key. Additionally, each release series has its
|
|
|
|
own branch, called ``stable/A.B.x``, and bugfix/security releases will be
|
2012-08-07 16:06:34 -04:00
|
|
|
issued from those branches.
|
|
|
|
|
2013-02-24 11:38:34 +01:00
|
|
|
For more information about how the Django project issues new releases for
|
|
|
|
security purposes, please see :doc:`our security policies <security>`.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2013-05-22 10:22:32 -04:00
|
|
|
.. glossary::
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
Feature release
|
|
|
|
Feature releases (A.B, A.B+1, etc.) will happen roughly every eight months
|
|
|
|
-- see `release process`_ for details. These releases will contain new
|
2013-05-22 10:22:32 -04:00
|
|
|
features, improvements to existing features, and such.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
Patch release
|
|
|
|
Patch releases (A.B.C, A.B.C+1, etc.) will be issued as needed, to fix
|
|
|
|
bugs and/or security issues.
|
2009-07-21 01:51:40 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
These releases will be 100% compatible with the associated feature release,
|
|
|
|
unless this is impossible for security reasons or to prevent data loss.
|
|
|
|
So the answer to "should I upgrade to the latest patch release?" will always
|
|
|
|
be "yes."
|
|
|
|
|
|
|
|
Long-term support release
|
|
|
|
Certain feature releases will be designated as long-term support (LTS)
|
|
|
|
releases. These releases will get security and data loss fixes applied for
|
|
|
|
a guaranteed period of time, typically three years.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
See `the download page`_ for the releases that have been designated for
|
|
|
|
long-term support.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
.. _the download page: https://www.djangoproject.com/download/
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2017-09-11 09:07:14 -04:00
|
|
|
.. _internal-release-cadence:
|
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
Release cadence
|
|
|
|
===============
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
Starting with Django 2.0, version numbers will use a loose form of `semantic
|
2018-01-07 14:28:41 +01:00
|
|
|
versioning <https://semver.org/>`_ such that each version following an LTS will
|
2015-06-20 08:58:10 -04:00
|
|
|
bump to the next "dot zero" version. For example: 2.0, 2.1, 2.2 (LTS), 3.0,
|
|
|
|
3.1, 3.2 (LTS), etc.
|
2009-07-21 01:51:40 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
SemVer makes it easier to see at a glance how compatible releases are with each
|
|
|
|
other. It also helps to anticipate when compatibility shims will be removed.
|
|
|
|
It's not a pure form of SemVer as each feature release will continue to have a
|
|
|
|
few documented backwards incompatibilities where a deprecation path isn't
|
|
|
|
possible or not worth the cost. Also, deprecations started in an LTS release
|
|
|
|
(X.2) will be dropped in a non-dot-zero release (Y.1) to accommodate our policy
|
|
|
|
of keeping deprecation shims for at least two feature releases. Read on to the
|
|
|
|
next section for an example.
|
2009-07-21 01:51:40 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
.. _internal-release-deprecation-policy:
|
|
|
|
|
|
|
|
Deprecation policy
|
|
|
|
==================
|
|
|
|
|
|
|
|
A feature release may deprecate certain features from previous releases. If a
|
|
|
|
feature is deprecated in feature release A.x, it will continue to work in all
|
|
|
|
A.x versions (for all versions of x) but raise warnings. Deprecated features
|
|
|
|
will be removed in the B.0 release, or B.1 for features deprecated in the last
|
|
|
|
A.x feature release to ensure deprecations are done over at least 2 feature
|
|
|
|
releases.
|
|
|
|
|
|
|
|
So, for example, if we decided to start the deprecation of a function in
|
|
|
|
Django 4.2:
|
|
|
|
|
|
|
|
* Django 4.2 will contain a backwards-compatible replica of the function which
|
2016-01-13 19:02:39 -05:00
|
|
|
will raise a ``RemovedInDjango51Warning``.
|
2015-06-20 08:58:10 -04:00
|
|
|
|
|
|
|
* Django 5.0 (the version that follows 4.2) will still contain the
|
2016-01-13 19:02:39 -05:00
|
|
|
backwards-compatible replica.
|
2015-06-20 08:58:10 -04:00
|
|
|
|
|
|
|
* Django 5.1 will remove the feature outright.
|
|
|
|
|
2016-01-13 19:02:39 -05:00
|
|
|
The warnings are silent by default. You can turn on display of these warnings
|
|
|
|
with the ``python -Wd`` option.
|
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
A more generic example:
|
|
|
|
|
|
|
|
* X.0
|
|
|
|
* X.1
|
|
|
|
* X.2 LTS
|
|
|
|
* Y.0: Drop deprecation shims added in X.0 and X.1.
|
|
|
|
* Y.1: Drop deprecation shims added in X.2.
|
|
|
|
* Y.2 LTS: No deprecation shims dropped (while Y.0 is no longer supported,
|
|
|
|
third-party apps need to maintain compatibility back to X.2 LTS to ease
|
|
|
|
LTS to LTS upgrades).
|
|
|
|
* Z.0: Drop deprecation shims added in Y.0 and Y.1.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2020-03-20 18:08:33 +00:00
|
|
|
See also the :ref:`deprecating-a-feature` guide.
|
|
|
|
|
2018-01-31 10:12:51 -05:00
|
|
|
.. _supported-versions-policy:
|
2012-06-07 18:48:29 +02:00
|
|
|
|
2008-09-19 19:44:10 +00:00
|
|
|
Supported versions
|
|
|
|
==================
|
|
|
|
|
|
|
|
At any moment in time, Django's developer team will support a set of releases to
|
2015-07-31 12:25:37 -04:00
|
|
|
varying levels. See `the supported versions section
|
|
|
|
<https://www.djangoproject.com/download/#supported-versions>`_ of the download
|
|
|
|
page for the current state of support for each version.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2021-02-25 10:52:48 +01:00
|
|
|
* The current development branch ``main`` will get new features and bug fixes
|
2015-06-20 08:58:10 -04:00
|
|
|
requiring non-trivial refactoring.
|
2009-07-21 01:51:40 +00:00
|
|
|
|
2021-02-25 10:52:48 +01:00
|
|
|
* Patches applied to the main branch must also be applied to the last feature
|
2015-06-20 08:58:10 -04:00
|
|
|
release branch, to be released in the next patch release of that feature
|
|
|
|
series, when they fix critical problems:
|
2011-07-19 13:16:09 +00:00
|
|
|
|
2011-10-14 00:12:01 +00:00
|
|
|
* Security issues.
|
2011-07-19 13:16:09 +00:00
|
|
|
|
2014-07-29 09:23:03 -04:00
|
|
|
* Data loss bugs.
|
2011-07-19 13:16:09 +00:00
|
|
|
|
2011-10-14 00:12:01 +00:00
|
|
|
* Crashing bugs.
|
2011-07-19 13:16:09 +00:00
|
|
|
|
2017-04-26 09:48:55 -04:00
|
|
|
* Major functionality bugs in new features of the latest stable release.
|
2011-07-19 13:16:09 +00:00
|
|
|
|
2020-01-14 10:13:20 +01:00
|
|
|
* Regressions from older versions of Django introduced in the current release
|
|
|
|
series.
|
2015-12-07 10:21:33 -05:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
The rule of thumb is that fixes will be backported to the last feature
|
|
|
|
release for bugs that would have prevented a release in the first place
|
|
|
|
(release blockers).
|
2009-07-21 01:51:40 +00:00
|
|
|
|
2021-02-25 10:52:48 +01:00
|
|
|
* Security fixes and data loss bugs will be applied to the current main branch,
|
|
|
|
the last two feature release branches, and any other supported long-term
|
2015-06-20 08:58:10 -04:00
|
|
|
support release branches.
|
2013-02-24 11:38:34 +01:00
|
|
|
|
2011-12-30 20:39:08 +00:00
|
|
|
* Documentation fixes generally will be more freely backported to the last
|
2013-02-24 11:38:34 +01:00
|
|
|
release branch. That's because it's highly advantageous to have the docs for
|
|
|
|
the last release be up-to-date and correct, and the risk of introducing
|
|
|
|
regressions is much less of a concern.
|
2011-12-30 15:30:51 +00:00
|
|
|
|
2008-09-19 19:44:10 +00:00
|
|
|
As a concrete example, consider a moment in time halfway between the release of
|
2015-06-20 08:58:10 -04:00
|
|
|
Django 5.1 and 5.2. At this point in time:
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2021-02-25 10:52:48 +01:00
|
|
|
* Features will be added to the development main branch, to be released as
|
|
|
|
Django 5.2.
|
2009-07-21 01:51:40 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
* Critical bug fixes will be applied to the ``stable/5.1.x`` branch, and
|
|
|
|
released as 5.1.1, 5.1.2, etc.
|
2009-07-21 01:51:40 +00:00
|
|
|
|
2014-07-29 09:23:03 -04:00
|
|
|
* Security fixes and bug fixes for data loss issues will be applied to
|
2021-02-25 10:52:48 +01:00
|
|
|
``main`` and to the ``stable/5.1.x``, ``stable/5.0.x``, and
|
2016-02-28 19:30:18 +02:00
|
|
|
``stable/4.2.x`` (LTS) branches. They will trigger the release of ``5.1.1``,
|
|
|
|
``5.0.5``, ``4.2.8``, etc.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2021-02-25 10:52:48 +01:00
|
|
|
* Documentation fixes will be applied to main, and, if easily backported, to
|
2015-06-20 08:58:10 -04:00
|
|
|
the latest stable branch, ``5.1.x``.
|
2013-09-07 12:46:42 -05:00
|
|
|
|
2008-09-19 19:44:10 +00:00
|
|
|
.. _release-process:
|
|
|
|
|
|
|
|
Release process
|
|
|
|
===============
|
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
Django uses a time-based release schedule, with feature releases every eight
|
|
|
|
months or so.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
After each feature release, the release manager will publish a timeline for the
|
|
|
|
next feature release. The timeline for an upcoming feature release can be found
|
|
|
|
in the corresponding wiki roadmap page, e.g.
|
|
|
|
https://code.djangoproject.com/wiki/Version6.0Roadmap.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
Feature release schedule and stages
|
|
|
|
-----------------------------------
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
Active development / Pre-feature freeze
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
Work begins on the feature release ``A.B`` after the feature freeze of the
|
|
|
|
previous release, i.e. when the ``stable/A.B-1.x`` branch is forked.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
You can find the current branch under active development in the
|
|
|
|
`Django release process
|
|
|
|
<https://code.djangoproject.com/#Djangoreleaseprocess>`_ on Trac.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
Feature freeze / Alpha release
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
All major and minor features, including deprecations and breaking changes, must
|
|
|
|
be merged by the feature freeze. Any features not done by this point will be
|
|
|
|
deferred to the next feature release.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
At this point, the ``stable/A.B.x`` branch will be forked from ``main``.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
Non-release blocking bug fix freeze / Beta release
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
After the alpha, all bug fixes merged in ``main`` are also backported to
|
|
|
|
``stable/A.B.x``. Refactors are backported at the discretion of the merger.
|
|
|
|
Mergers will be more and more conservative with backports, to avoid introducing
|
|
|
|
regressions.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
In parallel to this phase, ``main`` can continue to receive new features, to be
|
|
|
|
released in the ``A.B+1`` cycle.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
Translation string freeze / Release candidate release
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
If there is still a consistent stream of release blockers coming in at the
|
|
|
|
planned release candidate date, a beta 2 will be released to encourage further
|
|
|
|
testing and the release candidate date will be pushed out ~1 month.
|
2013-02-24 11:38:34 +01:00
|
|
|
|
|
|
|
The release candidate marks the string freeze, and it happens at least two
|
2025-01-21 13:18:19 +01:00
|
|
|
weeks before the final release. Translators can then submit updated
|
|
|
|
translations for inclusion in the final release. After this point, new
|
|
|
|
translatable strings must not be added.
|
|
|
|
|
|
|
|
After the release candidate, only release blockers and documentation fixes are
|
|
|
|
backported.
|
|
|
|
|
|
|
|
Final release
|
|
|
|
~~~~~~~~~~~~~
|
2013-02-24 11:38:34 +01:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
Ideally, the final release will ship two weeks after the last release
|
|
|
|
candidate.
|
2013-02-24 11:38:34 +01:00
|
|
|
|
2025-01-21 13:18:19 +01:00
|
|
|
If there are major bugs still being found 2 weeks after the release candidate,
|
|
|
|
there will be a decision on how to proceed (likely another release candidate
|
|
|
|
would be issued and the final release date will be pushed out).
|
2008-09-19 19:44:10 +00:00
|
|
|
|
|
|
|
Bug-fix releases
|
|
|
|
----------------
|
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
After a feature release (e.g. A.B), the previous release will go into bugfix
|
2011-07-19 13:16:09 +00:00
|
|
|
mode.
|
2008-09-19 19:44:10 +00:00
|
|
|
|
2015-06-20 08:58:10 -04:00
|
|
|
The branch for the previous feature release (e.g. ``stable/A.B-1.x``) will
|
2021-02-25 10:52:48 +01:00
|
|
|
include bugfixes. Critical bugs fixed on main must *also* be fixed on the
|
2015-06-20 08:58:10 -04:00
|
|
|
bugfix branch; this means that commits need to cleanly separate bug fixes from
|
2021-02-25 10:52:48 +01:00
|
|
|
feature additions. The developer who commits a fix to main will be
|
2015-06-20 08:58:10 -04:00
|
|
|
responsible for also applying the fix to the current bugfix branch.
|