diff --git a/reviewboard/__init__.py b/reviewboard/__init__.py
index 9685cffef150c3b479930f83a95ee812af4a0207..5e9fe206b2c28a6db624d9aeae47d896f3a201ee 100644
--- a/reviewboard/__init__.py
+++ b/reviewboard/__init__.py
@@ -4,68 +4,16 @@
 Review Board. They're largely used for packaging purposes.
 """
 
-#: The version of Review Board.
-#:
-#: This is in the format of:
-#:
-#: (Major, Minor, Micro, Patch, alpha/beta/rc/final, Release Number, Released)
-#:
-VERSION = (7, 1, 0, 0, 'alpha', 0, False)
-
-
-def get_version_string():
-    """Return the Review Board version as a human-readable string."""
-    version = '%s.%s' % (VERSION[0], VERSION[1])
-
-    if VERSION[2] or VERSION[3]:
-        version += ".%s" % VERSION[2]
-
-    if VERSION[3]:
-        version += ".%s" % VERSION[3]
-
-    if VERSION[4] != 'final':
-        if VERSION[4] == 'rc':
-            version += ' RC%s' % VERSION[5]
-        else:
-            version += ' %s %s' % (VERSION[4], VERSION[5])
-
-    if not is_release():
-        version += " (dev)"
-
-    return version
-
-
-def get_package_version():
-    """Return the Review Board version as a Python package version string.
-
-    Returns:
-        unicode:
-        The Review Board package version.
-    """
-    version = '%s.%s' % (VERSION[0], VERSION[1])
-
-    if VERSION[2] or VERSION[3]:
-        version = '%s.%s' % (version, VERSION[2])
-
-    if VERSION[3]:
-        version = '%s.%s' % (version, VERSION[3])
-
-    tag = VERSION[4]
-
-    if tag != 'final':
-        if tag == 'alpha':
-            tag = 'a'
-        elif tag == 'beta':
-            tag = 'b'
-
-        version = '%s%s%s' % (version, tag, VERSION[5])
-
-    return version
-
-
-def is_release():
-    """Return whether this is a released version of Review Board."""
-    return VERSION[6]
+from __future__ import annotations
+
+from reviewboard._version import (
+    VERSION,
+    __version__,
+    __version_info__,
+    get_package_version,
+    get_version_string,
+    is_release,
+)
 
 
 def get_manual_url():
@@ -216,10 +164,14 @@
                                  is_upgrade=is_upgrade)
 
 
-#: An alias for the the version information from :py:data:`VERSION`.
-#:
-#: This does not include the last entry in the tuple (the released state).
-__version_info__ = VERSION[:-1]
-
-#: An alias for the version used for the Python package.
-__version__ = get_package_version()
+__all__ = [
+    'VERSION',
+    '__version__',
+    '__version_info__',
+    'finalize_setup',
+    'get_manual_url',
+    'get_package_version',
+    'get_version_string',
+    'initialize',
+    'is_release',
+]
diff --git a/reviewboard/_version.py b/reviewboard/_version.py
new file mode 100644
index 0000000000000000000000000000000000000000..ea90aa0510775e4a72789dbc0e3d74ad4fcf83c4

--- /dev/null
+++ b/reviewboard/_version.py
@@ -0,0 +1,94 @@
+"""Review Board version information.
+
+Version Added:
+    8.0:
+    Moved this code from reviewboard/__init__.py
+"""
+
+from __future__ import annotations
+
+
+#: The version of Review Board.
+#:
+#: This is in the format of:
+#:
+#: (Major, Minor, Micro, Patch, alpha/beta/rc/final, Release Number, Released)
+#:
+VERSION: tuple[int, int, int, int, str, int, bool] = \
+    (8, 0, 0, 0, 'alpha', 0, False)
+
+
+def get_version_string() -> str:
+    """Return the Review Board version as a human-readable string.
+
+    Returns:
+        str:
+        The Review Board version.
+    """
+    major, minor, micro, patch, tag, release_num, is_release = VERSION
+    version = f'{major}.{minor}'
+
+    if micro or patch:
+        version += f'.{micro}'
+
+    if patch:
+        version += f'.{patch}'
+
+    if tag != 'final':
+        if tag == 'rc':
+            version += f' RC{release_num}'
+        else:
+            version += f' {tag} {release_num}'
+
+    if not is_release:
+        version += ' (dev)'
+
+    return version
+
+
+def get_package_version() -> str:
+    """Return the Review Board version as a Python package version string.
+
+    Returns:
+        str:
+        The Review Board package version.
+    """
+    major, minor, micro, patch, tag, release_num = VERSION[:6]
+
+    version = f'{major}.{minor}'
+
+    if micro or patch:
+        version += f'.{micro}'
+
+    if patch:
+        version += f'.{patch}'
+
+    if tag != 'final':
+        if tag == 'alpha':
+            tag = 'a'
+        elif tag == 'beta':
+            tag = 'b'
+
+        version += f'{tag}{release_num}'
+
+    return version
+
+
+def is_release() -> bool:
+    """Return whether this is a released version of Review Board.
+
+    Returns:
+        bool:
+        ``True`` if this is an official release.
+    """
+    return VERSION[6]
+
+
+#: An alias for the the version information from :py:data:`VERSION`.
+#:
+#: This does not include the last entry in the tuple (the released state).
+__version_info__ = VERSION[:-1]
+
+
+#: An alias for the version used for the Python package.
+__version__ = get_package_version()
diff --git a/reviewboard/dependencies.py b/reviewboard/dependencies.py
index 02c4724088fd3f0e046e3bc723876a58e8b3430a..e9317de98ac586670bba813713283b54d107dbeb 100644
--- a/reviewboard/dependencies.py
+++ b/reviewboard/dependencies.py
@@ -53,13 +53,13 @@
 django_doc_major_version = '4.2'
 
 #: The major version of Djblets we're using for documentation.
-djblets_doc_major_version = '5.x'
+djblets_doc_major_version = '6.x'
 
 #: The version of Django required for the current version of Python.
 django_version = '~=4.2.29'
 
 #: The version range required for Djblets.
-djblets_version = '~=5.3a0.dev'
+djblets_version = '~=6.0a0.dev'
 
 
 ###########################################################################
