diff --git a/docs/html/conf.py b/docs/html/conf.py
index fd124ebb6..f81cb6b7d 100644
--- a/docs/html/conf.py
+++ b/docs/html/conf.py
@@ -11,6 +11,7 @@
import glob
import os
+import pathlib
import re
import sys
@@ -34,6 +35,7 @@ extensions = [
'sphinx.ext.intersphinx',
# third-party:
'sphinx_inline_tabs',
+ 'sphinxcontrib.towncrier',
# in-tree:
'docs_feedback_sphinxext',
'pip_sphinxext',
@@ -314,3 +316,10 @@ docs_feedback_questions_list = (
'What content was useful?',
'What content was not useful?',
)
+
+# -- Options for towncrier_draft extension -----------------------------------
+
+towncrier_draft_autoversion_mode = 'draft' # or: 'sphinx-release', 'sphinx-version'
+towncrier_draft_include_empty = True
+towncrier_draft_working_directory = pathlib.Path(docs_dir).parent
+# Not yet supported: towncrier_draft_config_path = 'pyproject.toml' # relative to cwd
diff --git a/docs/html/news.rst b/docs/html/news.rst
index 137cddf36..8b54a02e6 100644
--- a/docs/html/news.rst
+++ b/docs/html/news.rst
@@ -7,4 +7,6 @@ Changelog
Major and minor releases of pip also include changes listed within
prior beta releases.
+.. towncrier-draft-entries:: |release|, unreleased as on
+
.. include:: ../../NEWS.rst
diff --git a/news/9172.doc.rst b/news/9172.doc.rst
new file mode 100644
index 000000000..fc0063766
--- /dev/null
+++ b/news/9172.doc.rst
@@ -0,0 +1 @@
+Render the unreleased pip version change notes on the news page in docs.
diff --git a/tools/requirements/docs.txt b/tools/requirements/docs.txt
index 0c5103d0a..a5aae67c1 100644
--- a/tools/requirements/docs.txt
+++ b/tools/requirements/docs.txt
@@ -1,6 +1,7 @@
sphinx == 3.2.1
furo
sphinx-inline-tabs
+sphinxcontrib-towncrier
# `docs.pipext` uses pip's internals to generate documentation. So, we install
# the current directory to make it work.