Bug in install-src
I am trying to install the source files for QtWebEngine, linux desktop 5.9.9 gcc_64. However, this is what I get:

```
cradcore@localhost: ~ $ aqt install-src -m qtwebengine -O /dev-tools linux desktop 5.9.9
aqtinstall(aqt) v2.0.2 on Python 3.8.10 [CPython GCC 9.3.0]
The packages ['qtwebengine'] were not found while parsing XML of package information!
==============================Suggested follow-up:==============================
* Please use 'aqt list-qt linux desktop --modules 5.9.9 <arch>' to show modules available.
cradcore@localhost: ~ $ aqt list-qt linux desktop --modules 5.9.9 gcc_64
qtcharts qtdatavis3d qtnetworkauth qtpurchasing qtremoteobjects qtscript qtspeech qtvirtualkeyboard qtwebengine
```

It seems to not find qtwebengine when trying to install, but correctly lists it as a module 
diff --git a/aqt/installer.py b/aqt/installer.py
index cc42402..b8ac81b 100644
--- a/aqt/installer.py
+++ b/aqt/installer.py
@@ -501,6 +501,16 @@ class Cli:
         )
         show_list(meta)
 
+    def run_list_src_doc_examples(self, args: argparse.ArgumentParser, cmd_type: str):
+        target = "desktop"  # The only valid target for src/doc/examples is "desktop"
+        version = Cli._determine_qt_version(args.qt_version_spec, args.host, target, arch="")
+        is_fetch_modules: bool = getattr(args, "modules", False)
+        meta = MetadataFactory(
+            archive_id=ArchiveId("qt", args.host, target, "src_doc_examples"),
+            src_doc_examples_query=(cmd_type, version, is_fetch_modules),
+        )
+        show_list(meta)
+
     def show_help(self, args=None):
         """Display help message"""
         self.parser.print_help()
@@ -595,6 +605,14 @@ class Cli:
             if is_add_kde:
                 parser.add_argument("--kde", action="store_true", help="patching with KDE patch kit.")
 
+        def make_parser_list_sde(cmd: str, desc: str, cmd_type: str):
+            parser = subparsers.add_parser(cmd, description=desc)
+            self._set_common_arguments(parser, is_legacy=False)
+            parser.set_defaults(func=lambda args: self.run_list_src_doc_examples(args, cmd_type))
+
+            if cmd_type != "src":
+                parser.add_argument("-m", "--modules", action="store_true", help="Print list of available modules")
+
         make_parser_it("install-qt", "Install Qt.", False, self._set_install_qt_parser, argparse.RawTextHelpFormatter)
         make_parser_it("install-tool", "Install tools.", False, self._set_install_tool_parser, None)
         make_parser_sde("install-doc", "Install documentation.", False, self.run_install_doc, False)
@@ -603,6 +621,9 @@ class Cli:
 
         self._make_list_qt_parser(subparsers)
         self._make_list_tool_parser(subparsers)
+        make_parser_list_sde("list-doc", "List documentation archives available", "doc")
+        make_parser_list_sde("list-example", "List documentation archives available", "examples")
+        make_parser_list_sde("list-src", "List documentation archives available", "src")
 
         make_parser_it("install", "Install Qt.", True, self._set_install_qt_parser, argparse.RawTextHelpFormatter)
         make_parser_it("tool", "Install tools.", True, self._set_install_tool_parser, None)
diff --git a/aqt/metadata.py b/aqt/metadata.py
index b2b8130..30322c1 100644
--- a/aqt/metadata.py
+++ b/aqt/metadata.py
@@ -366,6 +366,7 @@ class MetadataFactory:
         extensions_ver: Optional[str] = None,
         architectures_ver: Optional[str] = None,
         archives_query: Optional[List[str]] = None,
+        src_doc_examples_query: Optional[Tuple[str, Version, bool]] = None,
         tool_name: Optional[str] = None,
         is_long_listing: bool = False,
     ):
@@ -419,6 +420,14 @@ class MetadataFactory:
             self.request_type = "archives for modules" if len(archives_query) > 2 else "archives for qt"
             version, arch, modules = archives_query[0], archives_query[1], archives_query[2:]
             self._action = lambda: self.fetch_archives(self._to_version(version), arch, modules)
+        elif src_doc_examples_query:
+            cmd_type, version, is_modules_query = src_doc_examples_query
+            if is_modules_query:
+                self.request_type = f"modules for {cmd_type}"
+                self._action = lambda: self.fetch_modules_sde(cmd_type, version)
+            else:
+                self.request_type = f"archives for {cmd_type}"
+                self._action = lambda: self.fetch_archives_sde(cmd_type, version)
         else:
             self.request_type = "versions"
             self._action = self.fetch_versions
@@ -664,6 +673,31 @@ class MetadataFactory:
                 modules.add(module)
         return sorted(modules)
 
+    def fetch_modules_sde(self, cmd_type: str, version: Version) -> List[str]:
+        """Returns list of modules for src/doc/examples"""
+        assert (
+            cmd_type in ("doc", "examples") and self.archive_id.target == "desktop"
+        ), "Internal misuse of fetch_modules_sde"
+        self.validate_extension(version)
+        qt_ver_str = self._get_qt_version_str(version)
+        modules_meta = self._fetch_module_metadata(self.archive_id.to_folder(qt_ver_str))
+        # pattern: Match all names "qt.qt5.12345.doc.(\w+)
+        pattern = re.compile(r"^qt\.(qt" + str(version.major) + r"\.)?" + qt_ver_str + r"\." + cmd_type + r"\.(.+)$")
+
+        modules: List[str] = []
+        for name in modules_meta:
+            _match = pattern.match(name)
+            if _match:
+                modules.append(_match.group(2))
+        return modules
+
+    def fetch_archives_sde(self, cmd_type: str, version: Version) -> List[str]:
+        """Returns list of archives for src/doc/examples"""
+        assert (
+            cmd_type in ("src", "doc", "examples") and self.archive_id.target == "desktop"
+        ), "Internal misuse of fetch_archives_sde"
+        return self.fetch_archives(version, cmd_type, [])
+
     def fetch_archives(self, version: Version, arch: str, modules: List[str]) -> List[str]:
         qt_version_str = self._get_qt_version_str(version)
         nonempty = MetadataFactory._has_nonempty_downloads
diff --git a/ci/steps.yml b/ci/steps.yml
index 3244208..0daa2ff 100644
--- a/ci/steps.yml
+++ b/ci/steps.yml
@@ -108,6 +108,13 @@ steps:
         fi
         aqt list-qt $(HOST) $(TARGET) $ext --arch $(QT_VERSION)                 # print architectures for version/host/target
         aqt list-qt $(HOST) $(TARGET) $ext --spec "$(SPEC)" --arch latest
+
+        # list-src/doc/example
+        aqt list-src $(HOST) $(QT_VERSION)                                      # print source archives available for host/desktop/version
+        aqt list-doc $(HOST) $(QT_VERSION)                                      # print docs archives available for host/desktop/version
+        aqt list-doc $(HOST) $(QT_VERSION) --modules                            # print docs modules available for host/desktop/version
+        aqt list-example $(HOST) $(QT_VERSION)                                  # print example archives available for host/desktop/version
+        aqt list-example $(HOST) $(QT_VERSION) --modules                        # print example modules available for host/desktop/version
       fi
       if [[ "$(SUBCOMMAND)" == "install-src" ]]; then
         python -m aqt $(SUBCOMMAND) $(HOST) $(TARGET) $(QT_VERSION) --archives $(SUBARCHIVES)
diff --git a/docs/cli.rst b/docs/cli.rst
index b29db53..16d4c71 100644
--- a/docs/cli.rst
+++ b/docs/cli.rst
@@ -31,7 +31,7 @@ List-* Commands
 
 These commands are used to list the packages available for installation with ``aqt``.
 
-.. _list qt command:
+.. _list-qt command:
 
 list-qt command
 ~~~~~~~~~~~~~~~
@@ -132,7 +132,129 @@ List available versions of Qt, targets, extensions, modules, and architectures.
     May be combined with the ``--extension`` and/or ``--spec`` flags.
 
 
-.. _list tool command:
+.. _list-src command:
+
+list-src command
+~~~~~~~~~~~~~~~~
+
+.. program::  list-src
+
+.. code-block:: bash
+
+    aqt list-src [-h | --help]
+                 <host> (<Qt version> | <spec>)
+
+List source archives available for installation using the `install-src command`_.
+
+.. describe:: host
+
+    linux, windows or mac
+
+.. describe:: Qt version
+
+    This is a Qt version such as 5.9.7, 5.12.1 etc.
+    Use the :ref:`List-Qt Command` to list available versions.
+
+.. describe:: spec
+
+    This is a `SimpleSpec`_ that specifies a range of versions.
+    If you type something in the ``<Qt version>`` positional argument that
+    cannot be interpreted as a version, it will be interpreted as a `SimpleSpec`_,
+    and ``aqt`` will select the highest available version within that `SimpleSpec`_.
+
+    For example, ``aqt list-src mac 5.12`` would print archives for the
+    latest version of Qt 5.12 available (5.12.11 at the time of this writing).
+
+
+.. _list-doc command:
+
+list-doc command
+~~~~~~~~~~~~~~~~
+
+.. program::  list-doc
+
+.. code-block:: bash
+
+    aqt list-doc [-h | --help]
+                 [-m | --modules]
+                 <host> (<Qt version> | <spec>)
+
+List documentation archives and modules available for installation using the
+`install-doc command`_.
+
+By default, ``list-doc`` will print a list of archives available for
+installation using the `install-doc command`_, with the ``--archives`` option.
+
+.. describe:: host
+
+    linux, windows or mac
+
+.. describe:: Qt version
+
+    This is a Qt version such as 5.9.7, 5.12.1 etc.
+    Use the :ref:`List-Qt Command` to list available versions.
+
+.. describe:: spec
+
+    This is a `SimpleSpec`_ that specifies a range of versions.
+    If you type something in the ``<Qt version>`` positional argument that
+    cannot be interpreted as a version, it will be interpreted as a `SimpleSpec`_,
+    and ``aqt`` will select the highest available version within that `SimpleSpec`_.
+
+    For example, ``aqt list-doc mac 5.12`` would print archives for the
+    latest version of Qt 5.12 available (5.12.11 at the time of this writing).
+
+.. option:: --modules
+
+    This flag causes ``list-doc`` to print a list of modules available for
+    installation using the `install-doc command`_, with the ``--modules`` option.
+
+
+.. _list-example command:
+
+list-example command
+~~~~~~~~~~~~~~~~~~~~
+
+.. program::  list-example
+
+.. code-block:: bash
+
+    aqt list-example [-h | --help]
+                     [-m | --modules]
+                     <host> (<Qt version> | <spec>)
+
+List example archives and modules available for installation using the
+`install-example command`_.
+
+By default, ``list-example`` will print a list of archives available for
+installation using the `install-example command`_, with the ``--archives`` option.
+
+.. describe:: host
+
+    linux, windows or mac
+
+.. describe:: Qt version
+
+    This is a Qt version such as 5.9.7, 5.12.1 etc.
+    Use the :ref:`List-Qt Command` to list available versions.
+
+.. describe:: spec
+
+    This is a `SimpleSpec`_ that specifies a range of versions.
+    If you type something in the ``<Qt version>`` positional argument that
+    cannot be interpreted as a version, it will be interpreted as a `SimpleSpec`_,
+    and ``aqt`` will select the highest available version within that `SimpleSpec`_.
+
+    For example, ``aqt list-example mac 5.12`` would print archives for the
+    latest version of Qt 5.12 available (5.12.11 at the time of this writing).
+
+.. option:: --modules
+
+    This flag causes ``list-example`` to print a list of modules available for
+    installation using the `install-example command`_, with the ``--modules`` option.
+
+
+.. _list-tool command:
 
 list-tool command
 ~~~~~~~~~~~~~~~~~
@@ -244,9 +366,20 @@ are described here:
 .. option:: --modules, -m (<list of modules> | all)
 
     Specify extra modules to install as a list.
-    Use the :ref:`List Qt Command` to list available modules.
+    Use the appropriate ``aqt list-*`` command to list available modules:
 
-    This option is applicable to all the ``install-*`` commands except for ``install-tool``.
++------------------+-------------------------+--------------------------------------------------------+
+| Install command  | List command            | Usage of list command                                  |
++==================+=========================+========================================================+
+| install-qt       | `list-qt command`_      | ``list-qt <host> <target> --modules <version> <arch>`` |
++------------------+-------------------------+--------------------------------------------------------+
+| install-example  | `list-example command`_ | ``list-example <host> <version> --modules``            |
++------------------+-------------------------+--------------------------------------------------------+
+| install-doc      | `list-doc command`_     | ``list-doc <host> <version> --modules``                |
++------------------+-------------------------+--------------------------------------------------------+
+
+
+    This option only applicable to ``install-qt``, ``install-example``, and ``install-doc``.
 
     You can install multiple modules like this:
 
@@ -275,7 +408,19 @@ are described here:
     This option is applicable to all the ``install-*`` commands except for ``install-tool``.
 
     You can print a list of all acceptable values to use with this command by
-    using ``aqt list-qt`` with the :ref:`archives flag <list archives flag>`.
+    using the appropriate ``aqt list-*`` command:
+
++------------------+-------------------------+--------------------------------------------------+
+| Install command  | List command            | Usage of list command                            |
++==================+=========================+==================================================+
+| install-qt       | `list-qt command`_      | ``list-qt <host> <target> --archives <version>`` |
++------------------+-------------------------+--------------------------------------------------+
+| install-example  | `list-example command`_ | ``list-example <host> <version>``                |
++------------------+-------------------------+--------------------------------------------------+
+| install-src      | `list-src command`_     | ``list-src <host> <version>``                    |
++------------------+-------------------------+--------------------------------------------------+
+| install-doc      | `list-doc command`_     | ``list-doc <host> <version>``                    |
++------------------+-------------------------+--------------------------------------------------+
 
 
 .. _qt installation command:
@@ -314,7 +459,7 @@ There are various combinations to accept according to Qt version.
 .. describe:: Qt version
 
     This is a Qt version such as 5.9.7, 5.12.1 etc.
-    Use the :ref:`List Qt Command` to list available versions.
+    Use the :ref:`List-Qt Command` to list available versions.
 
 .. describe:: spec
 
@@ -342,7 +487,7 @@ There are various combinations to accept according to Qt version.
 
    * android_armv7, android_arm64_v8a, android_x86, android_x86_64 for android
 
-    Use the :ref:`List Qt Command` to list available architectures.
+    Use the :ref:`List-Qt Command` to list available architectures.
 
 .. option:: --noarchives
 
@@ -353,6 +498,8 @@ There are various combinations to accept according to Qt version.
 See `common options`_.
 
 
+.. _install-src command:
+
 install-src command
 ~~~~~~~~~~~~~~~~~~~
 
@@ -368,7 +515,6 @@ install-src command
         [-E | --external <7zip command>]
         [--internal]
         [-k | --keep]
-        [-m | --modules (all | <module> [<module>...])]
         [--archives <archive> [<archive>...]]
         [--kde]
         <host> <target> (<Qt version> | <spec>)
@@ -387,7 +533,7 @@ Install Qt source code for the specified version and target.
 .. describe:: Qt version
 
     This is a Qt version such as 5.9.7, 5.12.1 etc.
-    Use the :ref:`List Qt Command` to list available versions.
+    Use the :ref:`List-Qt Command` to list available versions.
 
 .. describe:: spec
 
@@ -410,6 +556,8 @@ Install Qt source code for the specified version and target.
 See `common options`_.
 
 
+.. _install-doc command:
+
 install-doc command
 ~~~~~~~~~~~~~~~~~~~
 
@@ -442,7 +590,7 @@ Install Qt documentation for the specified version and target.
 .. describe:: Qt version
 
     This is a Qt version such as 5.9.7, 5.12.1 etc.
-    Use the :ref:`List Qt Command` to list available versions.
+    Use the :ref:`List-Qt Command` to list available versions.
 
 .. describe:: spec
 
@@ -458,6 +606,8 @@ Install Qt documentation for the specified version and target.
 See `common options`_.
 
 
+.. _install-example command:
+
 install-example command
 ~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -491,7 +641,7 @@ Install Qt examples for the specified version and target.
 .. describe:: Qt version
 
     This is a Qt version such as 5.9.7, 5.12.1 etc.
-    Use the :ref:`List Qt Command` to list available versions.
+    Use the :ref:`List-Qt Command` to list available versions.
 
 .. describe:: spec
 
@@ -547,7 +697,7 @@ Install tools like QtIFW, mingw, Cmake, Conan, and vcredist.
     Optional field to specify tool variant. It may be required for vcredist and mingw installation.
     tool variant names may be 'qt.tools.win64_mingw810', 'qt.tools.vcredist_msvc2013_x64'.
 
-You should use the :ref:`List Tool command` to display what tools and tool variant names are available.
+You should use the :ref:`List-Tool command` to display what tools and tool variant names are available.
     
 
 See `common options`_.
@@ -598,6 +748,20 @@ Example: Install examples, doc and source:
     aqt install-doc windows desktop 5.15.2 -m qtcharts qtnetworkauth
     aqt install-src windows desktop 5.15.2 --archives qtbase --kde
 
+Example: Print archives available for installation with ``install-example/doc/src``:
+
+.. code-block:: console
+
+    aqt list-example windows 5.15.2
+    aqt list-doc windows 5.15.2
+    aqt list-src windows 5.15.2
+
+Example: Print modules available for installation with ``install-example/doc``:
+
+.. code-block:: console
+
+    aqt list-example windows 5.15.2 --modules
+    aqt list-doc windows 5.15.2 --modules
 
 Example: Install Web Assembly
 
diff --git a/docs/getting_started.rst b/docs/getting_started.rst
index 09a13ce..bdeb61c 100644
--- a/docs/getting_started.rst
+++ b/docs/getting_started.rst
@@ -37,7 +37,7 @@ To use ``aqt`` to install Qt, you will need to tell ``aqt`` four things:
 Keep in mind that Qt for IOS is only available on Mac OS, and Qt for WinRT is
 only available on Windows.
 
-To find out what versions of Qt are available, you can use the :ref:`aqt list-qt command <list qt command>`.
+To find out what versions of Qt are available, you can use the :ref:`aqt list-qt command <list-qt command>`.
 This command will print all versions of Qt available for Windows Desktop:
 
 .. code-block:: console
@@ -56,10 +56,10 @@ This command will print all versions of Qt available for Windows Desktop:
 
 Notice that the version numbers are sorted, grouped by minor version number,
 and separated by a single space-character. The output of all of the 
-:ref:`aqt list-qt <list qt command>` commands is intended to make it easier for you to write programs
-that consume the output of :ref:`aqt list-qt <list qt command>`.
+:ref:`aqt list-qt <list-qt command>` commands is intended to make it easier for you to write programs
+that consume the output of :ref:`aqt list-qt <list-qt command>`.
 
-Because the :ref:`aqt list-qt <list qt command>` command directly queries the Qt downloads repository
+Because the :ref:`aqt list-qt <list-qt command>` command directly queries the Qt downloads repository
 at https://download.qt.io/, the results of this command will always be accurate.
 The `Available Qt versions`_ wiki page was last modified at some point in the past,
 so it may or may not be up to date.
@@ -69,7 +69,7 @@ so it may or may not be up to date.
 Now that we know what versions of Qt are available, let's choose version 6.2.0.
 
 The next thing we need to do is find out what architectures are available for
-Qt 6.2.0 for Windows Desktop. To do this, we can use :ref:`aqt list-qt <list qt command>` with the
+Qt 6.2.0 for Windows Desktop. To do this, we can use :ref:`aqt list-qt <list-qt command>` with the
 ``--arch`` flag:
 
 .. code-block:: console
@@ -81,7 +81,7 @@ Notice that this is a very small subset of the architectures listed in the
 `Available Qt versions`_ wiki page. If we need to use some architecture that
 is not on this list, we can use the `Available Qt versions`_ wiki page to get
 a rough idea of what versions support the architecture we want, and then use
-:ref:`aqt list-qt <list qt command>` to confirm that the architecture is available.
+:ref:`aqt list-qt <list-qt command>` to confirm that the architecture is available.
 
 Let's say that we want to install Qt 6.2.0 with architecture `win64_mingw81`.
 The installation command we need is:
@@ -150,9 +150,9 @@ Installing Modules
 
 Let's say we need to install some modules for Qt 5.15.2 on Windows Desktop.
 First we need to find out what the modules are called, and we can do that 
-with :ref:`aqt list-qt <list qt command>` with the ``--modules`` flag.
+with :ref:`aqt list-qt <list-qt command>` with the ``--modules`` flag.
 Each version of Qt has a different list of modules for each host OS/ target SDK/ architecture
-combination, so we will need to supply :ref:`aqt list-qt <list qt command>` with that information:
+combination, so we will need to supply :ref:`aqt list-qt <list-qt command>` with that information:
 
 .. code-block:: console
 
@@ -174,9 +174,9 @@ If we wish to install all the modules that are available, we can do that with th
 
     $ aqt install-qt windows desktop 5.15.2 win64_mingw81 -m all
 
-Remember that the :ref:`aqt list-qt <list qt command>` command is meant to be scriptable?
+Remember that the :ref:`aqt list-qt <list-qt command>` command is meant to be scriptable?
 One way to install all modules available for Qt 5.15.2 is to send the output of
-:ref:`aqt list-qt <list qt command>` into :ref:`aqt install-qt <qt installation command>`, like this:
+:ref:`aqt list-qt <list-qt command>` into :ref:`aqt install-qt <qt installation command>`, like this:
 
 .. code-block:: console
 
@@ -190,7 +190,7 @@ If you want to install all available modules, you are probably better off using
 the ``all`` keyword, as discussed above. This scripting example is presented to
 give you a sense of how to accomplish something more complicated.
 Perhaps you want to install all modules except `qtnetworkauth`; you could write a script
-that removes `qtnetworkauth` from the output of :ref:`aqt list-qt <list qt command>`,
+that removes `qtnetworkauth` from the output of :ref:`aqt list-qt <list-qt command>`,
 and pipe that into :ref:`aqt install-qt <qt installation command>`.
 This exercise is left to the reader.
 
@@ -231,16 +231,16 @@ Let's see what happens when we try to list architectures and modules for Qt 6:
     Please add your extension using the `--extension` flag.
 
 The Qt 6 for Android repositories are a little different than the Qt 5 repositories,
-and the :ref:`aqt list-qt <list qt command>` tool doesn't know where to look for modules and architectures
+and the :ref:`aqt list-qt <list-qt command>` tool doesn't know where to look for modules and architectures
 if you don't tell it what architecture you need. I know, it sounds a little
 backwards, but that's how the Qt repo was put together.
 
-There are four architectures available, and the error message from :ref:`aqt list-qt <list qt command>`
+There are four architectures available, and the error message from :ref:`aqt list-qt <list-qt command>`
 just told us what they are: `x86_64`, `x86`, `armv7`, and `arm64_v8a`.
 
 We know we want to use `armv7` for the architecture, but we don't know exactly
 what value for 'architecture' we need to pass to :ref:`aqt install-qt <qt installation command>`
-yet, so we will use :ref:`aqt list-qt <list qt command>` again:
+yet, so we will use :ref:`aqt list-qt <list-qt command>` again:
 
 .. code-block:: console
 
@@ -276,7 +276,7 @@ Finally, let's install Qt 6.2.0 for Android armv7 with the ``qtcharts`` and
 Installing Qt for WASM
 ----------------------
 
-To find out how to install Qt for WASM, we need to tell :ref:`aqt list-qt <list qt command>` that we are
+To find out how to install Qt for WASM, we need to tell :ref:`aqt list-qt <list-qt command>` that we are
 using the `wasm` architecture. We can do that by using the ``--extension wasm`` flag.
 
 .. code-block:: console
@@ -312,7 +312,7 @@ Installing Tools
 ----------------
 
 Let's find out what tools are available for Windows Desktop by using the
-:ref:`aqt list-tool <list tool command>` command:
+:ref:`aqt list-tool <list-tool command>` command:
 
 .. code-block:: console
 
@@ -367,9 +367,9 @@ Let's see some more details, using the ``-l`` or ``--long`` flag:
     qt.tools.win64_mingw730   7.3.0-1-202004170606   2020-04-17
     qt.tools.win64_mingw810   8.1.0-1-202004170606   2020-04-17
 
-The ``-l`` flag causes :ref:`aqt list-tool <list tool command>` to print a table
+The ``-l`` flag causes :ref:`aqt list-tool <list-tool command>` to print a table
 that shows plenty of data pertinent to each tool variant available in `tools_mingw`.
-:ref:`aqt list-tool <list tool command>` additionally prints the 'Display Name'
+:ref:`aqt list-tool <list-tool command>` additionally prints the 'Display Name'
 and 'Description' for each tool if your terminal is wider than 95 characters;
 terminals that are narrower than this cannot display this table in a readable way.
 
@@ -380,7 +380,7 @@ This command receives four parameters:
 2. The target SDK (desktop, android, ios, or winrt)
 3. The name of the tool (this is `tools_mingw` in our case)
 4. (Optional) The tool variant name. We saw a list of these when we ran
-   :ref:`aqt list-tool <list tool command>` with the `tool name` argument filled in.
+   :ref:`aqt list-tool <list-tool command>` with the `tool name` argument filled in.
 
 To install `mingw`, you could use this command (please don't):
 
@@ -393,7 +393,7 @@ in this case, you would install 10 different versions of the same tool.
 For some tools, like `qtcreator` or `ifw`, this is an appropriate thing to do,
 since each tool variant is a different program.
 However, for tools like `mingw` and `vcredist`, it would make more sense to use
-:ref:`aqt list-tool <list tool command>` to see what tool variants are available,
+:ref:`aqt list-tool <list-tool command>` to see what tool variants are available,
 and then install just the tool variant you are interested in, like this:
 
 .. code-block:: console
diff --git a/tests/data/windows-5152-src-doc-example-expect.json b/tests/data/windows-5152-src-doc-example-expect.json
index 2010d2b..be453f2 100644
--- a/tests/data/windows-5152-src-doc-example-expect.json
+++ b/tests/data/windows-5152-src-doc-example-expect.json
@@ -24,5 +24,176 @@
     "examples.qtwebengine",
     "src"
   ],
-  "architectures": []
+  "architectures": [],
+  "src": {
+    "modules": [],
+    "archives": [
+      "qtactiveqt",
+      "qtandroidextras",
+      "qtdoc",
+      "qtmacextras",
+      "qtwayland",
+      "qtwinextras",
+      "qtbase",
+      "qtconnectivity",
+      "qtx11extras",
+      "qtwebchannel",
+      "qtmultimedia",
+      "qttranslations",
+      "qtgraphicaleffects",
+      "qtsvg",
+      "qtdeclarative",
+      "qtwebsockets",
+      "qtimageformats",
+      "qttools",
+      "qtxmlpatterns",
+      "qtsensors",
+      "qtserialport",
+      "qtlocation",
+      "qtquickcontrols",
+      "qtquickcontrols2",
+      "qtremoteobjects",
+      "qt3d",
+      "qtwebview",
+      "qtserialbus",
+      "qtscxml",
+      "qtcharts",
+      "qtdatavis3d",
+      "qtpurchasing",
+      "qtvirtualkeyboard",
+      "qtwebengine",
+      "qtgamepad",
+      "qtscript",
+      "qtspeech",
+      "qtnetworkauth",
+      "qtwebglplugin",
+      "qtlottie",
+      "qtquick3d",
+      "qtquicktimeline",
+      "tqtc"
+    ]
+  },
+  "doc": {
+    "modules": [
+      "qtcharts",
+      "qtdatavis3d",
+      "qtlottie",
+      "qtnetworkauth",
+      "qtpurchasing",
+      "qtquick3d",
+      "qtquicktimeline",
+      "qtscript",
+      "qtvirtualkeyboard",
+      "qtwebengine"
+    ],
+    "archives": [
+      "activeqt",
+      "qdoc",
+      "qmake",
+      "qt3d",
+      "qtandroidextras",
+      "qtassistant",
+      "qtbluetooth",
+      "qtconcurrent",
+      "qtcmake",
+      "qtcore",
+      "qtdbus",
+      "qtdesigner",
+      "qtdistancefieldgenerator",
+      "qtdoc",
+      "qtgamepad",
+      "qtgraphicaleffects",
+      "qtgui",
+      "qthelp",
+      "qtimageformats",
+      "qtlabscalendar",
+      "qtlabsplatform",
+      "qtlinguist",
+      "qtlocation",
+      "qtmacextras",
+      "qtmultimedia",
+      "qtnetwork",
+      "qtnfc",
+      "qtopengl",
+      "qtplatformheaders",
+      "qtpositioning",
+      "qtprintsupport",
+      "qtqml",
+      "qtqmlmodels",
+      "qtqmltest",
+      "qtquick",
+      "qtquickcontrols",
+      "qtquickcontrols1",
+      "qtquickdialogs",
+      "qtquickextras",
+      "qtremoteobjects",
+      "qtscxml",
+      "qtsensors",
+      "qtserialbus",
+      "qtserialport",
+      "qtspeech",
+      "qtsql",
+      "qtsvg",
+      "qttestlib",
+      "qtuitools",
+      "qtwaylandcompositor",
+      "qtwebchannel",
+      "qtwebsockets",
+      "qtwebview",
+      "qtwidgets",
+      "qtwinextras",
+      "qtx11extras",
+      "qtxml",
+      "qtxmlpatterns",
+      "tqtc"
+    ]
+  },
+  "examples": {
+    "modules": [
+      "qtcharts",
+      "qtdatavis3d",
+      "qtlottie",
+      "qtnetworkauth",
+      "qtpurchasing",
+      "qtquick3d",
+      "qtquicktimeline",
+      "qtscript",
+      "qtvirtualkeyboard",
+      "qtwebengine"
+    ],
+    "archives": [
+      "qt3d",
+      "qtactiveqt",
+      "qtandroidextras",
+      "qtbase",
+      "qtconnectivity",
+      "qtdeclarative",
+      "qtdoc",
+      "qtgamepad",
+      "qtgraphicaleffects",
+      "qtimageformats",
+      "qtlocation",
+      "qtmacextras",
+      "qtmultimedia",
+      "qtquickcontrols",
+      "qtquickcontrols2",
+      "qtremoteobjects",
+      "qtscxml",
+      "qtsensors",
+      "qtserialbus",
+      "qtserialport",
+      "qtspeech",
+      "qtsvg",
+      "qttools",
+      "qttranslations",
+      "qtwayland",
+      "qtwebchannel",
+      "qtwebsockets",
+      "qtwebview",
+      "qtwinextras",
+      "qtx11extras",
+      "qtxmlpatterns",
+      "tqtc"
+    ]
+  }
 }
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 3b1d533..17c3177 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -14,7 +14,7 @@ def expected_help(actual, prefix=None):
     expected = (
         "usage: aqt [-h] [-c CONFIG]\n"
         "           {install-qt,install-tool,install-doc,install-example,install-src,"
-        "list-qt,list-tool,"
+        "list-qt,list-tool,list-doc,list-example,list-src,"
         "install,tool,doc,examples,src,help,version}\n"
         "           ...\n"
         "\n"
@@ -35,7 +35,7 @@ def expected_help(actual, prefix=None):
         "removal\n"
         "\n"
         "  {install-qt,install-tool,install-doc,install-example,install-src,list-qt,"
-        "list-tool,"
+        "list-tool,list-doc,list-example,list-src,"
         "install,tool,doc,examples,src,help,version}\n"
         "                        Please refer to each help message by using '--help' "
         "with each subcommand\n",
diff --git a/tests/test_list.py b/tests/test_list.py
index 1e1ca3b..bdffee3 100644
--- a/tests/test_list.py
+++ b/tests/test_list.py
@@ -206,6 +206,83 @@ def test_list_architectures_and_modules(monkeypatch, version: str, extension: st
     assert arches == expect["architectures"]
 
 
+@pytest.fixture
+def win_5152_sde_xml_file() -> str:
+    return (Path(__file__).parent / "data" / "windows-5152-src-doc-example-update.xml").read_text("utf-8")
+
+
+def win_5152_sde_expected(cmd_type: str, query_type: str) -> Set[str]:
+    assert cmd_type in ("src", "doc", "examples")
+    assert query_type in ("archives", "modules")
+    _json = json.loads((Path(__file__).parent / "data/windows-5152-src-doc-example-expect.json").read_text("utf-8"))
+    return set(_json[cmd_type][query_type])
+
+
+@pytest.mark.parametrize(
+    "cmd_type, host, version, expected",
+    [
+        (
+            _cmd_type,
+            "windows",
+            "5.15.2",
+            win_5152_sde_expected(_cmd_type, "archives"),
+        )
+        for _cmd_type in ("src", "doc", "examples")
+    ],
+)
+def test_list_src_doc_examples_archives(
+    monkeypatch, win_5152_sde_xml_file, cmd_type: str, host: str, version: str, expected: Set[str]
+):
+    monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: win_5152_sde_xml_file)
+
+    archive_id = ArchiveId("qt", host, "desktop", "src_doc_examples")
+    archives = set(MetadataFactory(archive_id).fetch_archives_sde(cmd_type, Version(version)))
+    assert archives == expected
+
+
+@pytest.mark.parametrize(
+    "cmd_type, host, version, expected",
+    [
+        (
+            _cmd_type,
+            "windows",
+            "5.15.2",
+            win_5152_sde_expected(_cmd_type, "modules"),
+        )
+        for _cmd_type in ("doc", "examples")
+    ],
+)
+def test_list_src_doc_examples_modules(
+    monkeypatch, win_5152_sde_xml_file, cmd_type: str, host: str, version: str, expected: Set[str]
+):
+    monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: win_5152_sde_xml_file)
+
+    archive_id = ArchiveId("qt", host, "desktop", "src_doc_examples")
+    modules = set(MetadataFactory(archive_id).fetch_modules_sde(cmd_type, Version(version)))
+    assert modules == expected
+
+
+@pytest.mark.parametrize(
+    "command, expected",
+    (
+        ("list-src windows 5.15.2", win_5152_sde_expected("src", "archives")),
+        ("list-doc windows 5.15.2", win_5152_sde_expected("doc", "archives")),
+        ("list-example windows 5.15.2", win_5152_sde_expected("examples", "archives")),
+        ("list-doc windows 5.15.2 --modules", win_5152_sde_expected("doc", "modules")),
+        ("list-example windows 5.15.2 --modules", win_5152_sde_expected("examples", "modules")),
+    ),
+)
+def test_list_src_doc_examples_cli(monkeypatch, capsys, win_5152_sde_xml_file, command: str, expected: Set[str]):
+    monkeypatch.setattr(MetadataFactory, "fetch_http", lambda self, _: win_5152_sde_xml_file)
+
+    cli = Cli()
+    assert 0 == cli.run(command.split())
+    out, err = capsys.readouterr()
+    assert not err
+    out_set = set(out.strip().split())
+    assert out_set == expected
+
+
 @pytest.mark.parametrize(
     "version, arch, modules_to_query, modules_failed_query",
     (
['aqt/metadata.py', 'docs/cli.rst', 'tests/data/windows-5152-src-doc-example-expect.json', 'tests/test_list.py', 'aqt/installer.py', 'ci/steps.yml', 'tests/test_cli.py', 'docs/getting_started.rst']