diff --git a/djblets/__init__.py b/djblets/__init__.py
index 8b00e166658d757d33b1367fab2aecef4f2b9122..b7ee721ca7cd29079377ee379b492c4eb890c372 100644
--- a/djblets/__init__.py
+++ b/djblets/__init__.py
@@ -1,54 +1,22 @@
 """Basic version and package information."""
 
-# The version of Djblets
-#
-# This is in the format of:
-#
-#   (Major, Minor, Micro, alpha/beta/rc/final, Release Number, Released)
-#
-VERSION = (5, 3, 0, 'alpha', 0, False)
-
-
-def get_version_string():
-    version = '%s.%s' % (VERSION[0], VERSION[1])
-
-    if VERSION[2]:
-        version += ".%s" % VERSION[2]
-
-    if VERSION[3] != 'final':
-        if VERSION[3] == 'rc':
-            version += ' RC%s' % VERSION[4]
-        else:
-            version += ' %s %s' % (VERSION[3], VERSION[4])
-
-    if not is_release():
-        version += " (dev)"
-
-    return version
-
-
-def get_package_version():
-    major, minor, micro, tag, release_num, released = VERSION
-
-    version = '%d.%d' % (major, minor)
-
-    if micro:
-        version = '%s.%d' % (version, micro)
-
-    if tag != 'final':
-        if tag == 'alpha':
-            tag = 'a'
-        elif tag == 'beta':
-            tag = 'b'
-
-        version = '%s%s%s' % (version, tag, release_num)
-
-    return version
-
-
-def is_release():
-    return VERSION[5]
-
-
-__version_info__ = VERSION[:-1]
-__version__ = get_package_version()
+from __future__ import annotations
+
+from djblets._version import (
+    VERSION,
+    __version__,
+    __version_info__,
+    get_package_version,
+    get_version_string,
+    is_release,
+)
+
+
+__all__ = [
+    'VERSION',
+    '__version__',
+    '__version_info__',
+    'get_package_version',
+    'get_version_string',
+    'is_release',
+]
diff --git a/djblets/_version.py b/djblets/_version.py
new file mode 100644
index 0000000000000000000000000000000000000000..d32fa81fbcfd06411dc09f80b099d8940378a260

--- /dev/null
+++ b/djblets/_version.py
@@ -0,0 +1,87 @@
+"""Version information for Djblets.
+
+Version Added:
+    6.0:
+    Moved these from djblets/__init__.py
+"""
+
+from __future__ import annotations
+
+
+# The version of Djblets
+#
+# This is in the format of:
+#
+#   (Major, Minor, Micro, alpha/beta/rc/final, Release Number, Released)
+#
+VERSION: tuple[int, int, int, str, int, bool] = (6, 0, 0, 'alpha', 0, False)
+
+
+def get_version_string() -> str:
+    """Return the Djblets version as a human-readable string.
+
+    Returns:
+        str:
+        The Djblets version.
+    """
+    major, minor, micro, tag, release_num, is_release = VERSION
+    version = f'{major}.{minor}'
+
+    if micro:
+        version += f'.{micro}'
+
+    if tag != 'final':
+        if VERSION[3] == '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 Djblets version as a Python package version string.
+
+    Returns:
+        str:
+        The Djblets package version.
+    """
+    major, minor, micro, tag, release_num = VERSION[:5]
+
+    version = f'{major}.{minor}'
+
+    if micro:
+        version += f'.{micro}'
+
+    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 Djblets.
+
+    Returns:
+        bool:
+        ``True`` if this is an official release.
+    """
+    return VERSION[5]
+
+
+#: An alias for the version information from :py:data:`VERSION`.
+#:
+#: This does not include the last entry in the tuple (the release state).
+__version_info__ = VERSION[:-1]
+
+
+#: An alias for the package version string.
+__version__ = get_package_version()
