diff --git a/docs/.gitignore b/docs/.gitignore
index 25643c45cd2255557299732bc9fa0ef4dd2d8e74..6188ceb0eb9a47536ec46ddeb7a43fce0c07eb95 100644
--- a/docs/.gitignore
+++ b/docs/.gitignore
@@ -3,3 +3,5 @@ _build/
 devel/swh-*
 !/swh-loader.rst
 sources/
+user/listers/table.inc
+user/loaders/table.inc
diff --git a/docs/Makefile b/docs/Makefile
index f034553458ebc4b8802db7b690d5862626679f88..8b5e2a771a900e98fb880da770c82b31ee6e4ab8 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -14,13 +14,16 @@ INSTALL_DIR   = /srv/softwareheritage/docs/webroot
 INSTALL_GROUP = swhdev
 INSTALL_PERMS = g+rwX
 
-.PHONY: help images apidoc html clean install
+.PHONY: help images apidoc dynamic-rst html clean install
 
 all: html
 
+dynamic-rst:
+	make -C user dynamic-rst
+
 # Catch-all target: route all unknown targets to Sphinx using the new
 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
-sphinx/%: Makefile images apidoc
+sphinx/%: Makefile images apidoc dynamic-rst
 	@$(SPHINXBUILD) -M $* "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
 
 sphinx/clean:
diff --git a/docs/forge-support.yml b/docs/forge-support.yml
new file mode 100644
index 0000000000000000000000000000000000000000..09f410469d6f12ee69aac7652c43ca319ea1f299
--- /dev/null
+++ b/docs/forge-support.yml
@@ -0,0 +1,388 @@
+forges:
+  arch:
+    name: Archlinux
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/meta/-/issues/4233
+      grant: sloan-hashbang-2022
+      developer: hashbang
+    loader:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/meta/-/issues/4233
+      grant: sloan-hashbang-2022
+      developer: hashbang
+
+  archive:
+    name: Archive
+    lister:
+      status: N/A
+    loader:
+      status: prod
+
+  aur:
+    name: AUR
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/meta/-/issues/4466
+      grant: sloan-hashbang-2022
+      developer: hashbang
+    loader:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/meta/-/issues/4466
+      grant: sloan-hashbang-2022
+      developer: hashbang
+
+  bzr:
+    name: Bazaar
+    lister:
+      status: N/A
+    loader:
+      status: prod
+      source: https://forge.softwareheritage.org/source/swh-loader-bzr/
+      grant: sloan-octobus-2021
+      developer: octobus
+
+  bitbucket:
+    name: Bitbucket
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  bower:
+    name: Bower
+    lister:
+      status: staging
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: N/A
+
+  cgit:
+    name: CGit
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  conda:
+    name: Conda
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues/4547
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-loader-core/-/issues/4579
+      grant: nlnet-octobus-2022
+      developer: octobus
+
+  cpan:
+    name: CPAN
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues/2833
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: N/A
+
+  cran:
+    name: CRAN
+    lister:
+      status: prod
+    loader:
+      status: prod
+
+  crates:
+    name: Crates
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues/1424
+      grant: sloan-hashbang-2022
+      developer: hashbang
+    loader:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/meta/-/issues/4104
+      grant: sloan-hashbang-2022
+      developer: hashbang
+
+  cvs:
+    name: CVS
+    lister:
+      status: N/A
+    loader:
+      status: prod
+      source: https://gitlab.softwareheritage.org/swh/devel/swh-loader-cvs/
+      grant: sloan-stsp-cvs
+      developer: stsp
+
+  debian:
+    name: Debian
+    lister:
+      status: prod
+    loader:
+      status: prod
+
+  deposit:
+    name: Deposit
+    lister:
+      status: N/A
+    loader:
+      status: prod
+
+  gitea:
+    name: Gitea
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  git:
+    name: Git
+    lister:
+      status: N/A
+    loader:
+      status: prod
+      source: https://forge.softwareheritage.org/source/swh-loader-git/
+
+  github:
+    name: GitHub
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  gitlab:
+    name: GitLab
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  gnu:
+    name: GNU
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  gogs:
+    name: Gogs
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues/1721
+    loader:
+      status: N/A
+
+  golang:
+    name: Golang
+    lister:
+      status: staging
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: staging
+      grant: nlnet-octobus-2022
+      developer: octobus
+
+  hackage:
+    name: Hackage
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/meta/-/issues/4494
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/meta/-/issues/4494
+      grant: nlnet-octobus-2022
+      developer: octobus
+
+  launchpad:
+    name: Launchpad
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  maven:
+    name: Maven
+    lister:
+      status: prod
+      grant: sloan-castalia-maven
+      developer: castalia
+    loader:
+      status: prod
+      grant: sloan-castalia-maven
+      developer: castalia
+
+  mercurial:
+    name: Mercurial
+    lister:
+      status: N/A
+    loader:
+      status: prod
+      source: https://forge.softwareheritage.org/source/swh-loader-mercurial/
+      grant: sloan-2020
+      developer: octobus
+
+  nixguix:
+    name: Nix/Guix
+    lister:
+      status: N/A
+    loader:
+      status: prod
+      grant: nlnet-tweag-2020
+      developer: tweag
+
+  npm:
+    name: NPM
+    lister:
+      status: prod
+    loader:
+      status: prod
+
+  opam:
+    name: OPAM
+    lister:
+      status: prod
+      grant: sloan-ocamlpro-opam
+      developer: ocamlpro
+    loader:
+      status: prod
+      grant: sloan-ocamlpro-opam
+      developer: ocamlpro
+
+  packagist:
+    name: Packagist
+    lister:
+      status: staging
+    loader:
+      status: N/A
+
+  phabricator:
+    name: Phabricator
+    lister:
+      status: prod
+    loader:
+      status: N/A
+
+  pubdev:
+    name: Pub.Dev
+    lister:
+      status: staging
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: staging
+      grant: nlnet-octobus-2022
+      developer: octobus
+
+  puppet:
+    name: Puppet
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues/4519
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: dev
+      grant: nlnet-octobus-2022
+      developer: octobus
+
+  pypi:
+    name: PyPI
+    lister:
+      status: prod
+    loader:
+      status: prod
+
+  rubygems:
+    name: Rubygems
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues/1777
+      grant: nlnet-octobus-2022
+      developer: octobus
+    loader:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-loader-core/-/issues/4581
+      grant: nlnet-octobus-2022
+      developer: octobus
+
+  sourceforge:
+    name: SourceForge
+    lister:
+      status: prod
+      grant: sloan-octobus-2021
+      developer: octobus
+    loader:
+      status: N/A
+
+  svn:
+    name: Subversion
+    lister:
+      status: N/A
+    loader:
+      status: prod
+      source: https://forge.softwareheritage.org/source/swh-loader-svn/
+
+  tuleap:
+    name: Tuleap
+    lister:
+      status: dev
+      issue: https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/issues/3334
+    loader:
+      status: N/A
+
+
+grants:
+  nlnet-octobus-2022:
+    funder: NLnet Foundation
+    announcement: https://nlnet.nl/project/SWH-PackageManagers/index.html
+  nlnet-tweag-2020:
+    funder: NLnet Foundation
+    announcement: https://www.softwareheritage.org/2020/06/18/welcome-nixpkgs/
+  sloan-2020:
+    funder: Alfred P. Sloan Foundation
+    announcement: https://www.softwareheritage.org/2020/03/26/experts-join-forces-to-expand-the-software-heritage-archive/
+
+  sloan-castalia-maven:
+    funder: Alfred P. Sloan Foundation
+    announcement: https://www.softwareheritage.org/2021/07/22/archiving-the-maven-ecosystem/
+  sloan-hashbang-2022:
+    funder: Alfred P. Sloan Foundation
+    announcement: https://www.softwareheritage.org/2022/02/03/hashbang-expanding-coverage-software-heritage-archive/
+  sloan-ocamlpro-opam:
+    funder: Alfred P. Sloan Foundation
+    announcement: https://www.softwareheritage.org/2021/04/20/connecting-ocaml/
+  sloan-octobus-2021:
+    funder: Alfred P. Sloan Foundation
+    announcement: https://www.softwareheritage.org/2021/01/21/archiving-sourceforge-and-supporting-bazaar/
+  sloan-stsp-cvs:
+    funder: Alfred P. Sloan Foundation
+    announcement: https://www.softwareheritage.org/2020/12/10/sloan-subgrant-cvs-subversion-loaders/
+
+
+developers:
+  castalia:
+    name: Castalia Solutions
+    url: https://castalia.solutions/
+  hashbang:
+    name: Hashbang
+    url: https://hashbang.fr/
+  ocamlpro:
+    name: OCamlPro
+    url: https://ocamlpro.com/
+  octobus:
+    name: Octobus
+    url: https://octobus.net/
+  stsp:
+    name: Stefan Sperling
+    url: https://stefansperling.de/
+  tweag:
+    name: Tweag
+    url: https://www.tweag.io/
+
diff --git a/docs/user/Makefile b/docs/user/Makefile
index 4eaea5baf346c6cd7bcf000d7cac442a1299e3cd..79f474b796f45e0b5db26ba9dc96ace4e45c955e 100644
--- a/docs/user/Makefile
+++ b/docs/user/Makefile
@@ -10,13 +10,19 @@ BUILDDIR      = _build
 
 all: html
 
+listers/table.inc loaders/table.inc: ../forge-support.yml
+	python3 -m swh.docs.generate_forge_list ../forge-support.yml listers/table.inc loaders/table.inc
+
+dynamic-rst: listers/table.inc loaders/table.inc
+
 # Catch-all target: route all unknown targets to Sphinx using the new
 # "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
-sphinx/%: Makefile
+sphinx/%: Makefile dynamic-rst
 	@$(SPHINXBUILD) -M $* "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
 
 html: sphinx/html
 
 clean: sphinx/clean
+	rm -f listers/table.inc loaders/table.inc
 
-.PHONY: html clean
+.PHONY: html clean dynamic-rst
diff --git a/docs/user/listers/index.rst b/docs/user/listers/index.rst
index 9c247656843aac61eb5776a64abf5c2b60e5b19f..37d4135a34e15425375acd2d60af817f5aebdea6 100644
--- a/docs/user/listers/index.rst
+++ b/docs/user/listers/index.rst
@@ -9,625 +9,4 @@ load into the |swh| archive.
 
 This page references all available listers and links to their high-level documentation.
 
-.. rst-class:: swh-logos-table
-
-.. table::
-  :align: center
-
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | Lister name               | Related links                  | Current status               | Related `grants`_                  |
-  +===========================+================================+==============================+====================================+
-  | |arch_logo|               | * |arch_lister_source|_        | |arch_lister_status|_        | |arch_lister_grant|_               |
-  |                           | * |arch_lister_dev|_           |                              |                                    |
-  | :ref:`arch_lister`        |                                |                              | (awarded to `Hashbang`_)           |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |aur_logo|                | * |aur_lister_source|_         | |aur_lister_status|_         | |aur_lister_grant|_                |
-  |                           | * |aur_lister_dev|_            |                              |                                    |
-  | :ref:`aur_lister`         |                                |                              | (awarded to `Hashbang`_)           |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |bitbucket_logo|          | * |bitbucket_lister_source|_   | |bitbucket_lister_status|_   |                                    |
-  |                           | * |bitbucket_lister_dev|_      |                              |                                    |
-  | :ref:`bitbucket_lister`   |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |bower_logo|              | * |bower_lister_source|_       | |bower_lister_status|_       | |bower_lister_grant|_              |
-  |                           | * |bower_lister_dev|_          |                              |                                    |
-  | :ref:`bower_lister`       |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |cgit_logo|               | * |cgit_lister_source|_        | |cgit_lister_status|_        |                                    |
-  |                           | * |cgit_lister_dev|_           |                              |                                    |
-  | :ref:`cgit_lister`        |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |conda_logo|              | * |conda_lister_source|_       | |conda_lister_status|_       | |conda_lister_grant|_              |
-  |                           | * |conda_lister_dev|_          |                              |                                    |
-  | :ref:`conda_lister`       |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |cpan_logo|               | * |cpan_lister_source|_        | |cpan_lister_status|_        | |cpan_lister_grant|_               |
-  |                           | * |cpan_lister_dev|_           |                              |                                    |
-  | :ref:`cpan_lister`        |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |cran_logo|               | * |cran_lister_source|_        | |cran_lister_status|_        |                                    |
-  |                           | * |cran_lister_dev|_           |                              |                                    |
-  | :ref:`cran_lister`        |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |crates_logo|             | * |crates_lister_source|_      | |crates_lister_status|_      | |crates_lister_grant|_             |
-  |                           | * |crates_lister_dev|_         |                              |                                    |
-  | :ref:`crates_lister`      |                                |                              | (awarded to `Hashbang`_)           |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |debian_logo|             | * |debian_lister_source|_      | |debian_lister_status|_      |                                    |
-  |                           |                                |                              |                                    |
-  | :ref:`debian_lister`      |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |gitea_logo|              | * |gitea_lister_source|_       | |gitea_lister_status|_       |                                    |
-  |                           |                                |                              |                                    |
-  | :ref:`gitea_lister`       |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |github_logo|             | * |github_lister_source|_      | |github_lister_status|_      |                                    |
-  |                           | * |github_lister_dev|_         |                              |                                    |
-  | :ref:`github_lister`      |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |gitlab_logo|             | * |gitlab_lister_source|_      | |gitlab_lister_status|_      |                                    |
-  |                           | * |gitlab_lister_dev|_         |                              |                                    |
-  | :ref:`gitlab_lister`      |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |gnu_logo|                | * |gnu_lister_source|_         | |gnu_lister_status|_         |                                    |
-  |                           | * |gnu_lister_dev|_            |                              |                                    |
-  | :ref:`gnu_lister`         |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |gogs_logo|               | * |gogs_lister_source|_        | |gogs_lister_status|_        |                                    |
-  |                           | * |gogs_lister_dev|_           |                              |                                    |
-  | :ref:`gogs_lister`        |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |golang_logo|             | * |golang_lister_source|_      | |golang_lister_status|_      | |golang_lister_grant|_             |
-  |                           | * |golang_lister_dev|_         |                              |                                    |
-  | :ref:`golang_lister`      |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |hackage_logo|            | * |hackage_lister_source|_     | |hackage_lister_status|_     | |hackage_lister_grant|_            |
-  |                           | * |hackage_lister_dev|_        |                              |                                    |
-  | :ref:`hackage_lister`     |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |launchpad_logo|          | * |launchpad_lister_source|_   | |launchpad_lister_status|_   |                                    |
-  |                           |                                |                              |                                    |
-  | :ref:`launchpad_lister`   |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |maven_logo|              | * |maven_lister_source|_       | |maven_lister_status|_       | |maven_lister_grant|_              |
-  |                           | * |maven_lister_dev|_          |                              |                                    |
-  | :ref:`maven_lister`       |                                |                              | (awarded to `Castalia Solutions`_) |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |npm_logo|                | * |npm_lister_source|_         | |npm_lister_status|_         |                                    |
-  |                           | * |npm_lister_dev|_            |                              |                                    |
-  | :ref:`npm_lister`         |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |opam_logo|               | * |opam_lister_source|_        | |opam_lister_status|_        | |opam_lister_grant|_               |
-  |                           | * |opam_lister_dev|_           |                              |                                    |
-  | :ref:`opam_lister`        |                                |                              | (awarded to `OCamlPro`_)           |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |packagist_logo|          | * |packagist_lister_source|_   | |packagist_lister_status|_   |                                    |
-  |                           |                                |                              |                                    |
-  | :ref:`packagist_lister`   |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |pubdev_logo|             | * |pubdev_lister_source|_      | |pubdev_lister_status|_      | |pubdev_lister_grant|_             |
-  |                           | * |pubdev_lister_dev|_         |                              |                                    |
-  | :ref:`pubdev_lister`      |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |puppet_logo|             | * |puppet_lister_source|_      | |puppet_lister_status|_      | |puppet_lister_grant|_             |
-  |                           | * |puppet_lister_dev|_         |                              |                                    |
-  | :ref:`puppet_lister`      |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |pypi_logo|               | * |pypi_lister_source|_        | |pypi_lister_status|_        |                                    |
-  |                           | * |pypi_lister_dev|_           |                              |                                    |
-  | :ref:`pypi_lister`        |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |rubygems_logo|           | * |rubygems_lister_source|_    | |rubygems_lister_status|_    | |rubygems_lister_grant|_           |
-  |                           | * |rubygems_lister_dev|_       |                              |                                    |
-  | :ref:`rubygems_lister`    |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |sourceforge_logo|        | * |sourceforge_lister_source|_ | |sourceforge_lister_status|_ | |sourceforge_lister_grant|_        |
-  |                           | * |sourceforge_lister_dev|_    |                              |                                    |
-  | :ref:`sourceforge_lister` |                                |                              | (awarded to `Octobus`_)            |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-  | |tuleap_logo|             | * |tuleap_lister_source|_      | |tuleap_lister_status|_      |                                    |
-  |                           |                                |                              |                                    |
-  | :ref:`tuleap_lister`      |                                |                              |                                    |
-  +---------------------------+--------------------------------+------------------------------+------------------------------------+
-
-
-
-.. toctree::
-  :maxdepth: 2
-  :hidden:
-
-  arch
-  aur
-  bitbucket
-  bower
-  cgit
-  conda
-  cpan
-  cran
-  crates
-  debian
-  gitea
-  github
-  gitlab
-  gnu
-  gogs
-  golang
-  hackage
-  launchpad
-  maven
-  npm
-  opam
-  packagist
-  phabricator
-  pubdev
-  puppet
-  pypi
-  rubygems
-  sourceforge
-  tuleap
-
-.. |arch_logo| image:: ../logos/arch.png
-  :width: 50%
-  :target: arch.html
-  :alt: Arch lister
-
-.. |aur_logo| image:: ../logos/aur.png
-  :width: 50%
-  :target: aur.html
-  :alt: AUR lister
-
-.. |bitbucket_logo| image:: ../logos/bitbucket.png
-  :width: 50%
-  :target: bitbucket.html
-  :alt: Bitbucket lister
-
-.. |bower_logo| image:: ../logos/bower.png
-  :width: 50%
-  :target: bower.html
-  :alt: Bower lister
-
-.. |cgit_logo| image:: ../logos/cgit.png
-  :width: 50%
-  :target: cgit.html
-  :alt: Cgit lister
-
-.. |conda_logo| image:: ../logos/conda.png
-  :width: 50%
-  :target: conda.html
-  :alt: Conda lister
-
-.. |cpan_logo| image:: ../logos/cpan.png
-  :width: 50%
-  :target: cpan.html
-  :alt: CPAN lister
-
-.. |cran_logo| image:: ../logos/cran.png
-  :width: 50%
-  :target: cran.html
-  :alt: CRAN lister
-
-.. |crates_logo| image:: ../logos/crates.png
-  :width: 50%
-  :target: crates.html
-  :alt: Crates lister
-
-.. |debian_logo| image:: ../logos/debian.png
-  :width: 50%
-  :target: debian.html
-  :alt: Debian lister
-
-.. |gitea_logo| image:: ../logos/gitea.png
-  :width: 50%
-  :target: gitea.html
-  :alt: Gitea lister
-
-.. |github_logo| image:: ../logos/github.png
-  :width: 50%
-  :target: github.html
-  :alt: GitHub lister
-
-.. |gitlab_logo| image:: ../logos/gitlab.png
-  :width: 50%
-  :target: gitlab.html
-  :alt: GitLab lister
-
-.. |gnu_logo| image:: ../logos/gnu.png
-  :width: 50%
-  :target: gnu.html
-  :alt: GNU lister
-
-.. |gogs_logo| image:: ../logos/gogs.png
-  :width: 50%
-  :target: gogs.html
-  :alt: Gogs lister
-
-.. |golang_logo| image:: ../logos/golang.png
-  :width: 50%
-  :target: golang.html
-  :alt: Golang lister
-
-.. |hackage_logo| image:: ../logos/hackage.png
-  :width: 50%
-  :target: hackage.html
-  :alt: Hackage lister
-
-.. |launchpad_logo| image:: ../logos/launchpad.png
-  :width: 50%
-  :target: launchpad.html
-  :alt: Launchpad lister
-
-.. |maven_logo| image:: ../logos/maven.png
-  :width: 50%
-  :target: maven.html
-  :alt: Maven lister
-
-.. |npm_logo| image:: ../logos/npm.png
-  :width: 50%
-  :target: npm.html
-  :alt: NPM lister
-
-.. |opam_logo| image:: ../logos/opam.png
-  :width: 50%
-  :target: opam.html
-  :alt: Opam lister
-
-.. |packagist_logo| image:: ../logos/packagist.png
-  :width: 50%
-  :target: packagist.html
-  :alt: Packagist lister
-
-.. |phabricator_logo| image:: ../logos/phabricator.png
-  :width: 50%
-  :target: phabricator.html
-  :alt: Phabricator lister
-
-.. |pubdev_logo| image:: ../logos/pubdev.png
-  :width: 50%
-  :target: pubdev.html
-  :alt: PubDev lister
-
-.. |puppet_logo| image:: ../logos/puppet.png
-  :width: 50%
-  :target: puppet.html
-  :alt: Puppet lister
-
-.. |pypi_logo| image:: ../logos/pypi.png
-  :width: 50%
-  :target: pypi.html
-  :alt: PyPI lister
-
-.. |rubygems_logo| image:: ../logos/rubygems.png
-  :width: 50%
-  :target: rubygems.html
-  :alt: RubyGems lister
-
-.. |sourceforge_logo| image:: ../logos/sourceforge.png
-  :width: 50%
-  :target: sourceforge.html
-  :alt: SourceForge lister
-
-.. |tuleap_logo| image:: ../logos/tuleap.png
-  :width: 50%
-  :target: tuleap.html
-  :alt: Tuleap lister
-
-.. |arch_lister_source| replace:: Source code
-.. _arch_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/arch/
-
-.. |arch_lister_dev| replace:: Development
-.. _arch_lister_dev: https://forge.softwareheritage.org/project/profile/188/
-
-.. |arch_lister_status| replace:: in development
-.. _arch_lister_status: https://forge.softwareheritage.org/T4233
-
-.. |arch_lister_grant| replace:: Alfred P. Sloan Foundation
-.. _arch_lister_grant: https://www.softwareheritage.org/2022/02/03/hashbang-expanding-coverage-software-heritage-archive/
-
-
-.. |aur_lister_source| replace:: Source code
-.. _aur_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/aur/
-
-.. |aur_lister_dev| replace:: Development
-.. _aur_lister_dev: https://forge.softwareheritage.org/project/profile/190/
-
-.. |aur_lister_status| replace:: in development
-.. _aur_lister_status: https://forge.softwareheritage.org/T4466
-
-.. |aur_lister_grant| replace:: Alfred P. Sloan Foundation
-.. _aur_lister_grant: https://www.softwareheritage.org/2022/02/03/hashbang-expanding-coverage-software-heritage-archive/
-
-
-.. |bitbucket_lister_source| replace:: Source code
-.. _bitbucket_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/bitbucket/
-
-.. |bitbucket_lister_dev| replace:: Development
-.. _bitbucket_lister_dev: https://forge.softwareheritage.org/project/profile/67/
-
-.. |bitbucket_lister_status| replace:: in production
-.. _bitbucket_lister_status: https://archive.softwareheritage.org/coverage/?focus=bitbucket#bitbucket
-
-
-.. |bower_lister_source| replace:: Source code
-.. _bower_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/bower/
-
-.. |bower_lister_dev| replace:: Development
-.. _bower_lister_dev: https://forge.softwareheritage.org/project/profile/194/
-
-.. |bower_lister_status| replace:: in staging
-.. _bower_lister_status: https://webapp.staging.swh.network/coverage/?focus=bower#bower
-
-.. |bower_lister_grant| replace:: NLnet Foundation
-.. _bower_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |cgit_lister_source| replace:: Source code
-.. _cgit_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/cgit/
-
-.. |cgit_lister_dev| replace:: Development
-.. _cgit_lister_dev: https://forge.softwareheritage.org/project/profile/22/
-
-.. |cgit_lister_status| replace:: in production
-.. _cgit_lister_status: https://archive.softwareheritage.org/coverage/?focus=cgit#cgit
-
-
-.. |conda_lister_source| replace:: Source code
-.. _conda_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/conda/
-
-.. |conda_lister_dev| replace:: Development
-.. _conda_lister_dev: https://forge.softwareheritage.org/project/profile/204/
-
-.. |conda_lister_status| replace:: in development
-.. _conda_lister_status: https://forge.softwareheritage.org/T4547
-
-.. |conda_lister_grant| replace:: NLnet Foundation
-.. _conda_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |cpan_lister_source| replace:: Source code
-.. _cpan_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/cpan/
-
-.. |cpan_lister_dev| replace:: Development
-.. _cpan_lister_dev: https://forge.softwareheritage.org/project/profile/199/
-
-.. |cpan_lister_status| replace:: in development
-.. _cpan_lister_status: https://forge.softwareheritage.org/T2833
-
-.. |cpan_lister_grant| replace:: NLnet Foundation
-.. _cpan_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |cran_lister_source| replace:: Source code
-.. _cran_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/cran/
-
-.. |cran_lister_dev| replace:: Development
-.. _cran_lister_dev: https://forge.softwareheritage.org/project/profile/132/
-
-.. |cran_lister_status| replace:: in production
-.. _cran_lister_status: https://archive.softwareheritage.org/coverage/?focus=CRAN#CRAN
-
-
-.. |crates_lister_source| replace:: Source code
-.. _crates_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/crates/
-
-.. |crates_lister_dev| replace:: Development
-.. _crates_lister_dev: https://forge.softwareheritage.org/project/profile/183/
-
-.. |crates_lister_status| replace:: in development
-.. _crates_lister_status: https://forge.softwareheritage.org/T1424
-
-.. |crates_lister_grant| replace:: Alfred P. Sloan Foundation
-.. _crates_lister_grant: https://www.softwareheritage.org/2022/02/03/hashbang-expanding-coverage-software-heritage-archive/
-
-
-.. |debian_lister_source| replace:: Source code
-.. _debian_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/debian/
-
-.. |debian_lister_status| replace:: in production
-.. _debian_lister_status: https://archive.softwareheritage.org/coverage/?focus=debian#debian
-
-
-.. |gitea_lister_source| replace:: Source code
-.. _gitea_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/gitea/
-
-.. |gitea_lister_status| replace:: in production
-.. _gitea_lister_status: https://archive.softwareheritage.org/coverage/?focus=gitea#gitea
-
-
-.. |github_lister_source| replace:: Source code
-.. _github_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/github/
-
-.. |github_lister_dev| replace:: Development
-.. _github_lister_dev: https://forge.softwareheritage.org/project/profile/21/
-
-.. |github_lister_status| replace:: in production
-.. _github_lister_status: https://archive.softwareheritage.org/coverage/?focus=github#github
-
-
-.. |gitlab_lister_source| replace:: Source code
-.. _gitlab_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/gitlab/
-
-.. |gitlab_lister_dev| replace:: Development
-.. _gitlab_lister_dev: https://forge.softwareheritage.org/project/profile/83/
-
-.. |gitlab_lister_status| replace:: in production
-.. _gitlab_lister_status: https://archive.softwareheritage.org/coverage/?focus=gitlab,heptapod#gitlab
-
-
-.. |gnu_lister_source| replace:: Source code
-.. _gnu_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/gnu/
-
-.. |gnu_lister_dev| replace:: Development
-.. _gnu_lister_dev: https://forge.softwareheritage.org/project/profile/70/
-
-.. |gnu_lister_status| replace:: in production
-.. _gnu_lister_status: https://archive.softwareheritage.org/coverage/?focus=GNU#GNU
-
-
-.. |gogs_lister_source| replace:: Source code
-.. _gogs_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/gogs/
-
-.. |gogs_lister_dev| replace:: Development
-.. _gogs_lister_dev: https://forge.softwareheritage.org/project/profile/197/
-
-.. |gogs_lister_status| replace:: in development
-.. _gogs_lister_status: https://forge.softwareheritage.org/T1721
-
-
-.. |golang_lister_source| replace:: Source code
-.. _golang_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/golang/
-
-.. |golang_lister_dev| replace:: Development
-.. _golang_lister_dev: https://forge.softwareheritage.org/project/profile/195/
-
-.. |golang_lister_status| replace:: in staging
-.. _golang_lister_status: https://webapp.staging.swh.network/coverage/?focus=golang#golang
-
-.. |golang_lister_grant| replace:: NLnet Foundation
-.. _golang_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |hackage_lister_source| replace:: Source code
-.. _hackage_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/hackage/
-
-.. |hackage_lister_dev| replace:: Development
-.. _hackage_lister_dev: https://forge.softwareheritage.org/project/profile/202/
-
-.. |hackage_lister_status| replace:: in development
-.. _hackage_lister_status: https://forge.softwareheritage.org/T4494
-
-.. |hackage_lister_grant| replace:: NLnet Foundation
-.. _hackage_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |launchpad_lister_source| replace:: Source code
-.. _launchpad_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/launchpad/
-
-.. |launchpad_lister_status| replace:: in production
-.. _launchpad_lister_status: https://archive.softwareheritage.org/coverage/?focus=launchpad#launchpad
-
-
-.. |maven_lister_source| replace:: Source code
-.. _maven_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/maven/
-
-.. |maven_lister_dev| replace:: Development
-.. _maven_lister_dev: https://forge.softwareheritage.org/project/profile/184/
-
-.. |maven_lister_status| replace:: in production
-.. _maven_lister_status: https://archive.softwareheritage.org/coverage/?focus=maven#maven
-
-.. |maven_lister_grant| replace:: Alfred P. Sloan Foundation
-.. _maven_lister_grant: https://www.softwareheritage.org/2021/07/22/archiving-the-maven-ecosystem/
-
-
-.. |npm_lister_source| replace:: Source code
-.. _npm_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/npm/
-
-.. |npm_lister_dev| replace:: Development
-.. _npm_lister_dev: https://forge.softwareheritage.org/project/profile/111/
-
-.. |npm_lister_status| replace:: in production
-.. _npm_lister_status: https://archive.softwareheritage.org/coverage/?focus=npm#npm
-
-
-.. |opam_lister_source| replace:: Source code
-.. _opam_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/opam/
-
-.. |opam_lister_dev| replace:: Developer doc
-.. _opam_lister_dev: https://forge.softwareheritage.org/project/profile/167/
-
-.. |opam_lister_status| replace:: in production
-.. _opam_lister_status: https://archive.softwareheritage.org/coverage/?focus=opam#opam
-
-.. |opam_lister_grant| replace:: Alfred P. Sloan Foundation
-.. _opam_lister_grant: https://www.softwareheritage.org/2021/04/20/connecting-ocaml/
-
-
-.. |packagist_lister_source| replace:: Source code
-.. _packagist_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/packagist/
-
-.. |packagist_lister_status| replace:: in staging
-.. _packagist_lister_status: https://webapp.staging.swh.network/coverage/?focus=Packagist#Packagist
-
-
-.. |phabricator_lister_source| replace:: Source code
-.. _phabricator_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/phabricator/
-
-.. |phabricator_lister_status| replace:: in production
-.. _phabricator_lister_status: https://archive.softwareheritage.org/coverage/?focus=phabricator#phabricator
-
-
-.. |pubdev_lister_source| replace:: Source code
-.. _pubdev_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/pubdev/
-
-.. |pubdev_lister_dev| replace:: Development
-.. _pubdev_lister_dev: https://forge.softwareheritage.org/project/profile/192/
-
-.. |pubdev_lister_status| replace:: in staging
-.. _pubdev_lister_status: https://webapp.staging.swh.network/coverage/?focus=pubdev#pubdev
-
-.. |pubdev_lister_grant| replace:: NLnet Foundation
-.. _pubdev_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |puppet_lister_source| replace:: Source code
-.. _puppet_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/puppet/
-
-.. |puppet_lister_dev| replace:: Development
-.. _puppet_lister_dev: https://forge.softwareheritage.org/project/profile/200/
-
-.. |puppet_lister_status| replace:: in development
-.. _puppet_lister_status: https://forge.softwareheritage.org/T4519
-
-.. |puppet_lister_grant| replace:: NLnet Foundation
-.. _puppet_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |pypi_lister_source| replace:: Source code
-.. _pypi_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/pypi/
-
-.. |pypi_lister_dev| replace:: Development
-.. _pypi_lister_dev: https://forge.softwareheritage.org/project/profile/54/
-
-.. |pypi_lister_status| replace:: in production
-.. _pypi_lister_status: https://archive.softwareheritage.org/coverage/?focus=pypi#pypi
-
-
-.. |rubygems_lister_source| replace:: Source code
-.. _rubygems_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/rubygems/
-
-.. |rubygems_lister_dev| replace:: Development
-.. _rubygems_lister_dev: https://forge.softwareheritage.org/project/profile/201/
-
-.. |rubygems_lister_status| replace:: in development
-.. _rubygems_lister_status: https://forge.softwareheritage.org/T1777
-
-.. |rubygems_lister_grant| replace:: NLnet Foundation
-.. _rubygems_lister_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |sourceforge_lister_source| replace:: Source code
-.. _sourceforge_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/sourceforge/
-
-.. |sourceforge_lister_dev| replace:: Development
-.. _sourceforge_lister_dev: https://forge.softwareheritage.org/project/profile/75/
-
-.. |sourceforge_lister_status| replace:: in production
-.. _sourceforge_lister_status: https://archive.softwareheritage.org/coverage/?focus=sourceforge#sourceforge
-
-.. |sourceforge_lister_grant| replace:: Alfred P. Sloan Foundation
-.. _sourceforge_lister_grant: https://www.softwareheritage.org/2021/08/12/archiving-sourceforge/
-
-
-.. |tuleap_lister_source| replace:: Source code
-.. _tuleap_lister_source: https://forge.softwareheritage.org/source/swh-lister/browse/master/swh/lister/tuleap/
-
-.. |tuleap_lister_status| replace:: in development
-.. _tuleap_lister_status: https://forge.softwareheritage.org/T3334
-
-
-.. _Castalia Solutions: https://castalia.solutions/
-.. _Hashbang: https://hashbang.fr/
-.. _OCamlPro: https://ocamlpro.com/
-.. _Octobus: https://octobus.net/
-
-.. _grants: https://www.softwareheritage.org/grants/
\ No newline at end of file
+.. include:: table.inc
diff --git a/docs/user/loaders/bazaar.rst b/docs/user/loaders/bzr.rst
similarity index 100%
rename from docs/user/loaders/bazaar.rst
rename to docs/user/loaders/bzr.rst
diff --git a/docs/user/loaders/index.rst b/docs/user/loaders/index.rst
index aa92405c72f8fa655da6aab097544db5886763f5..dafdcbf19c7a903a80061a9225a5deee13699430 100644
--- a/docs/user/loaders/index.rst
+++ b/docs/user/loaders/index.rst
@@ -7,519 +7,4 @@ A :term:`loader` is a software component used to ingest content into the |swh| a
 
 This page references all available loaders and links to their high-level documentation.
 
-.. rst-class:: swh-logos-table
-
-.. table::
-  :align: center
-
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | Loader name              | Related links                 | Current status              | Related `grants`_                  |
-  +==========================+===============================+=============================+====================================+
-  | |arch_logo|              | * |arch_loader_source|_       | |arch_loader_status|_       | |arch_loader_grant|_               |
-  |                          | * |arch_loader_dev|_          |                             |                                    |
-  | :ref:`arch_loader`       |                               |                             | (awarded to `Hashbang`_)           |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |archive_logo|           | * |archive_loader_source|_    | |archive_loader_status|_    |                                    |
-  |                          |                               |                             |                                    |
-  | :ref:`archive_loader`    |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |aur_logo|               | * |aur_loader_source|_        | |aur_loader_status|_        | |aur_loader_grant|_                |
-  |                          | * |aur_loader_dev|_           |                             |                                    |
-  | :ref:`aur_loader`        |                               |                             | (awarded to `Hashbang`_)           |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |bzr_logo|               | * |bzr_loader_source|_        | |bzr_loader_status|_        | |bzr_loader_grant|_                |
-  |                          | * |bzr_loader_dev|_           |                             |                                    |
-  | :ref:`bzr_loader`        |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |conda_logo|             | * |conda_loader_dev|_         | |conda_loader_status|_      | |conda_loader_grant|_              |
-  |                          |                               |                             |                                    |
-  | :ref:`conda_loader`      |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |cran_logo|              | * |cran_loader_source|_       | |cran_loader_status|_       |                                    |
-  |                          | * |cran_loader_dev|_          |                             |                                    |
-  | :ref:`cran_loader`       |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |crates_logo|            | * |crates_loader_source|_     | |crates_loader_status|_     | |crates_loader_grant|_             |
-  |                          | * |crates_loader_dev|_        |                             |                                    |
-  | :ref:`crates_loader`     |                               |                             | (awarded to `Hashbang`_)           |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |cvs_logo|               | * |cvs_loader_source|_        | |cvs_loader_status|_        | |cvs_loader_grant|_                |
-  |                          | * |cvs_loader_dev|_           |                             |                                    |
-  | :ref:`cvs_loader`        |                               |                             | (awarded to `Stefan Sperling`_)    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |debian_logo|            | * |debian_loader_source|_     | |debian_loader_status|_     |                                    |
-  |                          | * |debian_loader_dev|_        |                             |                                    |
-  | :ref:`debian_loader`     |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |deposit_logo|           | * |deposit_loader_source|_    | |deposit_loader_status|_    |                                    |
-  |                          | * |deposit_loader_dev|_       |                             |                                    |
-  | :ref:`deposit_loader`    |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |git_logo|               | * |git_loader_source|_        | |git_loader_status|_        |                                    |
-  |                          | * |git_loader_dev|_           |                             |                                    |
-  | :ref:`git_loader`        |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |golang_logo|            | * |golang_loader_source|_     | |golang_loader_status|_     | |golang_loader_grant|_             |
-  |                          | * |golang_loader_dev|_        |                             |                                    |
-  | :ref:`golang_loader`     |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |hackage_logo|           | * |hackage_loader_dev|_       | |hackage_loader_status|_    | |hackage_loader_grant|_            |
-  |                          |                               |                             |                                    |
-  | :ref:`hackage_loader`    |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |maven_logo|             | * |maven_loader_source|_      | |maven_loader_status|_      | |maven_loader_grant|_              |
-  |                          | * |maven_loader_dev|_         |                             |                                    |
-  | :ref:`maven_loader`      |                               |                             | (awarded to `Castalia Solutions`_) |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |mercurial_logo|         | * |mercurial_loader_source|_  | |mercurial_loader_status|_  | |mercurial_loader_grant|_          |
-  |                          | * |mercurial_loader_dev|_     |                             |                                    |
-  | :ref:`mercurial_loader`  |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |nixguix_logo|           | * |nixguix_loader_source|_    | |nixguix_loader_status|_    | |nixguix_loader_grant|_            |
-  |                          | * |nixguix_loader_dev|_       |                             |                                    |
-  | :ref:`nixguix_loader`    |                               |                             | (awarded to `Tweag`_)              |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |npm_logo|               | * |npm_loader_source|_        | |npm_loader_status|_        |                                    |
-  |                          | * |npm_loader_dev|_           |                             |                                    |
-  | :ref:`npm_loader`        |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |opam_logo|              | * |opam_loader_source|_       | |opam_loader_status|_       | |opam_loader_grant|_               |
-  |                          | * |opam_loader_dev|_          |                             |                                    |
-  | :ref:`opam_loader`       |                               |                             | (awarded to `OCamlPro`_)           |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |pubdev_logo|            | * |pubdev_loader_source|_     | |pubdev_loader_status|_     | |pubdev_loader_grant|_             |
-  |                          | * |pubdev_loader_dev|_        |                             |                                    |
-  | :ref:`pubdev_loader`     |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |puppet_logo|            | * |puppet_loader_source|_     | |puppet_loader_status|_     | |puppet_loader_grant|_             |
-  |                          | * |puppet_loader_dev|_        |                             |                                    |
-  | :ref:`puppet_loader`     |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |pypi_logo|              | * |pypi_loader_source|_       | |pypi_loader_status|_       |                                    |
-  |                          | * |pypi_loader_dev|_          |                             |                                    |
-  | :ref:`pypi_loader`       |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |rubygems_logo|          | * |rubygems_loader_dev|_      | |rubygems_loader_status|_   | |rubygems_loader_grant|_           |
-  |                          |                               |                             |                                    |
-  | :ref:`rubygems_loader`   |                               |                             | (awarded to `Octobus`_)            |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-  | |subversion_logo|        | * |subversion_loader_source|_ | |subversion_loader_status|_ |                                    |
-  |                          | * |subversion_loader_dev|_    |                             |                                    |
-  | :ref:`subversion_loader` |                               |                             |                                    |
-  +--------------------------+-------------------------------+-----------------------------+------------------------------------+
-
-.. toctree::
-  :maxdepth: 2
-  :hidden:
-
-  arch
-  archive
-  aur
-  bazaar
-  conda
-  cran
-  crates
-  cvs
-  debian
-  deposit
-  git
-  golang
-  hackage
-  maven
-  mercurial
-  nixguix
-  npm
-  opam
-  pubdev
-  puppet
-  pypi
-  rubygems
-  subversion
-
-.. |arch_logo| image:: ../logos/arch.png
-  :width: 50%
-  :target: arch.html
-  :alt: Arch loader
-
-.. |archive_logo| image:: ../logos/archive.png
-  :width: 50%
-  :target: archive.html
-  :alt: Archive loader
-
-.. |aur_logo| image:: ../logos/aur.png
-  :width: 50%
-  :target: aur.html
-  :alt: AUR loader
-
-.. |bzr_logo| image:: ../logos/bazaar.png
-  :width: 50%
-  :target: bazaar.html
-  :alt: Bazaar loader
-
-.. |conda_logo| image:: ../logos/conda.png
-  :width: 50%
-  :target: conda.html
-  :alt: Conda loader
-
-.. |cran_logo| image:: ../logos/cran.png
-  :width: 50%
-  :target: cran.html
-  :alt: CRAN loader
-
-.. |cvs_logo| image:: ../logos/cvs.png
-  :width: 50%
-  :target: cvs.html
-  :alt: CVS loader
-
-.. |crates_logo| image:: ../logos/crates.png
-  :width: 50%
-  :target: crates.html
-  :alt: Crates loader
-
-.. |debian_logo| image:: ../logos/debian.png
-  :width: 50%
-  :target: debian.html
-  :alt: Debian loader
-
-.. |deposit_logo| image:: ../logos/deposit.png
-  :width: 50%
-  :target: deposit.html
-  :alt: Deposit loader
-
-.. |git_logo| image:: ../logos/git.png
-  :width: 50%
-  :target: git.html
-  :alt: Git loader
-
-.. |golang_logo| image:: ../logos/golang.png
-  :width: 50%
-  :target: golang.html
-  :alt: Golang loader
-
-.. |hackage_logo| image:: ../logos/hackage.png
-  :width: 50%
-  :target: hackage.html
-  :alt: Hackage loader
-
-.. |maven_logo| image:: ../logos/maven.png
-  :width: 50%
-  :target: maven.html
-  :alt: Maven loader
-
-.. |mercurial_logo| image:: ../logos/mercurial.png
-  :width: 50%
-  :target: mercurial.html
-  :alt: Mercurial loader
-
-.. |nixguix_logo| image:: ../logos/nixguix.png
-  :width: 50%
-  :target: nixguix.html
-  :alt: NixGuix loader
-
-.. |npm_logo| image:: ../logos/npm.png
-  :width: 50%
-  :target: npm.html
-  :alt: NPM loader
-
-.. |opam_logo| image:: ../logos/opam.png
-  :width: 50%
-  :target: opam.html
-  :alt: Opam loader
-
-.. |pubdev_logo| image:: ../logos/pubdev.png
-  :width: 50%
-  :target: pubdev.html
-  :alt: PubDev loader
-
-.. |puppet_logo| image:: ../logos/puppet.png
-  :width: 50%
-  :target: puppet.html
-  :alt: Puppet loader
-
-.. |pypi_logo| image:: ../logos/pypi.png
-  :width: 50%
-  :target: pypi.html
-  :alt: PyPI loader
-
-.. |rubygems_logo| image:: ../logos/rubygems.png
-  :width: 50%
-  :target: rybugems.html
-  :alt: RubyGems loader
-
-.. |subversion_logo| image:: ../logos/subversion.png
-  :width: 50%
-  :target: subversion.html
-  :alt: Subversion loader
-
-
-.. |arch_loader_source| replace:: Source code
-.. _arch_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/arch/
-
-.. |arch_loader_dev| replace:: Development
-.. _arch_loader_dev: https://forge.softwareheritage.org/project/profile/189/
-
-.. |arch_loader_status| replace:: in development
-.. _arch_loader_status: https://forge.softwareheritage.org/T4233
-
-.. |arch_loader_grant| replace:: Alfred P. Sloan Foundation
-.. _arch_loader_grant: https://www.softwareheritage.org/2022/02/03/hashbang-expanding-coverage-software-heritage-archive/
-
-
-.. |archive_loader_source| replace:: Source code
-.. _archive_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/archive/
-
-.. |archive_loader_status| replace:: in production
-.. _archive_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=tar
-
-
-.. |aur_loader_source| replace:: Source code
-.. _aur_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/aur/
-
-.. |aur_loader_dev| replace:: Development
-.. _aur_loader_dev: https://forge.softwareheritage.org/project/profile/191/
-
-.. |aur_loader_status| replace:: in development
-.. _aur_loader_status: https://forge.softwareheritage.org/T4466
-
-.. |aur_loader_grant| replace:: Alfred P. Sloan Foundation
-.. _aur_loader_grant: https://www.softwareheritage.org/2022/02/03/hashbang-expanding-coverage-software-heritage-archive/
-
-
-.. |bzr_loader_source| replace:: Source code
-.. _bzr_loader_source: https://forge.softwareheritage.org/source/swh-loader-bzr/
-
-.. |bzr_loader_dev| replace:: Development
-.. _bzr_loader_dev: https://forge.softwareheritage.org/project/profile/164/
-
-.. |bzr_loader_status| replace:: in production
-.. _bzr_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=bzr
-
-.. |bzr_loader_grant| replace:: Alfred P. Sloan Foundation
-.. _bzr_loader_grant: https://www.softwareheritage.org/2021/01/21/archiving-sourceforge-and-supporting-bazaar/
-
-
-.. |conda_loader_dev| replace:: Development
-.. _conda_loader_dev: https://forge.softwareheritage.org/project/profile/205/
-
-.. |conda_loader_status| replace:: in development
-.. _conda_loader_status: https://forge.softwareheritage.org/T4579
-
-.. |conda_loader_grant| replace:: NLnet Foundation
-.. _conda_loader_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |cran_loader_source| replace:: Source code
-.. _cran_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/cran/
-
-.. |cran_loader_dev| replace:: Development
-.. _cran_loader_dev: https://forge.softwareheritage.org/project/profile/132/
-
-.. |cran_loader_status| replace:: in production
-.. _cran_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=cran
-
-
-.. |crates_loader_source| replace:: Source code
-.. _crates_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/crates/
-
-.. |crates_loader_dev| replace:: Development
-.. _crates_loader_dev: https://forge.softwareheritage.org/project/profile/182/
-
-.. |crates_loader_status| replace:: in development
-.. _crates_loader_status: https://forge.softwareheritage.org/T4104
-
-.. |crates_loader_grant| replace:: Alfred P. Sloan Foundation
-.. _crates_loader_grant: https://www.softwareheritage.org/2022/02/03/hashbang-expanding-coverage-software-heritage-archive/
-
-
-.. |cvs_loader_source| replace:: Source code
-.. _cvs_loader_source: https://forge.softwareheritage.org/source/swh-loader-cvs/
-
-.. |cvs_loader_dev| replace:: Development
-.. _cvs_loader_dev: https://forge.softwareheritage.org/project/profile/166/
-
-.. |cvs_loader_status| replace:: in production
-.. _cvs_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=cvs
-
-.. |cvs_loader_grant| replace:: Alfred P. Sloan Foundation
-.. _cvs_loader_grant: https://www.softwareheritage.org/2020/12/10/sloan-subgrant-cvs-subversion-loaders/
-
-
-.. |debian_loader_source| replace:: Source code
-.. _debian_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/debian/
-
-.. |debian_loader_dev| replace:: Development
-.. _debian_loader_dev: https://forge.softwareheritage.org/project/profile/25/
-
-.. |debian_loader_status| replace:: in production
-.. _debian_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=debian
-
-
-.. |deposit_loader_source| replace:: Source code
-.. _deposit_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/deposit/
-
-.. |deposit_loader_dev| replace:: Development
-.. _deposit_loader_dev: https://forge.softwareheritage.org/project/profile/77/
-
-.. |deposit_loader_status| replace:: in production
-.. _deposit_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=deposit
-
-
-.. |git_loader_source| replace:: Source code
-.. _git_loader_source: https://forge.softwareheritage.org/source/swh-loader-git/
-
-.. |git_loader_dev| replace:: Development
-.. _git_loader_dev: https://forge.softwareheritage.org/project/profile/17/
-
-.. |git_loader_status| replace:: in production
-.. _git_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=git
-
-
-.. |golang_loader_source| replace:: Source code
-.. _golang_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/golang/
-
-.. |golang_loader_dev| replace:: Development
-.. _golang_loader_dev: https://forge.softwareheritage.org/project/profile/196/
-
-.. |golang_loader_status| replace:: in staging
-.. _golang_loader_status: https://webapp.staging.swh.network/browse/search/?with_visit=true&with_content=true&visit_type=golang
-
-.. |golang_loader_grant| replace:: NLnet Foundation
-.. _golang_loader_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |hackage_loader_dev| replace:: Development
-.. _hackage_loader_dev: https://forge.softwareheritage.org/project/profile/203/
-
-.. |hackage_loader_status| replace:: in development
-.. _hackage_loader_status: https://forge.softwareheritage.org/T4494
-
-.. |hackage_loader_grant| replace:: NLnet Foundation
-.. _hackage_loader_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |maven_loader_source| replace:: Source code
-.. _maven_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/maven/
-
-.. |maven_loader_dev| replace:: Development
-.. _maven_loader_dev: https://forge.softwareheritage.org/project/profile/185/
-
-.. |maven_loader_status| replace:: in production
-.. _maven_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=maven
-
-.. |maven_loader_grant| replace:: Alfred P. Sloan Foundation
-.. _maven_loader_grant: https://www.softwareheritage.org/2021/07/22/archiving-the-maven-ecosystem/
-
-
-.. |mercurial_loader_source| replace:: Source code
-.. _mercurial_loader_source: https://forge.softwareheritage.org/source/swh-loader-mercurial/
-
-.. |mercurial_loader_dev| replace:: Development
-.. _mercurial_loader_dev: https://forge.softwareheritage.org/project/profile/66/
-
-.. |mercurial_loader_status| replace:: in production
-.. _mercurial_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=hg
-
-.. |mercurial_loader_grant| replace:: NLnet Foundation
-.. _mercurial_loader_grant: https://www.softwareheritage.org/2020/03/26/experts-join-forces-to-expand-the-software-heritage-archive/
-
-
-.. |nixguix_loader_source| replace:: Source code
-.. _nixguix_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/nixguix/
-
-.. |nixguix_loader_dev| replace:: Development
-.. _nixguix_loader_dev: https://forge.softwareheritage.org/project/profile/152/
-
-.. |nixguix_loader_status| replace:: in production
-.. _nixguix_loader_status: https://archive.softwareheritage.org/browse/search/?with_content=true&visit_type=nixguix
-
-.. |nixguix_loader_grant| replace:: NLnet Foundation
-.. _nixguix_loader_grant: https://www.softwareheritage.org/2020/06/18/welcome-nixpkgs/
-
-
-.. |npm_loader_source| replace:: Source code
-.. _npm_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/npm/
-
-.. |npm_loader_dev| replace:: Development
-.. _npm_loader_dev: https://forge.softwareheritage.org/project/profile/121/
-
-.. |npm_loader_status| replace:: in production
-.. _npm_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=npm
-
-
-.. |opam_loader_source| replace:: Source code
-.. _opam_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/opam/
-
-.. |opam_loader_dev| replace:: Development
-.. _opam_loader_dev: https://forge.softwareheritage.org/project/profile/167/
-
-.. |opam_loader_status| replace:: in production
-.. _opam_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=opam
-
-.. |opam_loader_grant| replace:: Alfred P. Sloan Foundation
-.. _opam_loader_grant: https://www.softwareheritage.org/2021/04/20/connecting-ocaml/
-
-
-.. |pubdev_loader_source| replace:: Source code
-.. _pubdev_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/pubdev/
-
-.. |pubdev_loader_dev| replace:: Development
-.. _pubdev_loader_dev: https://forge.softwareheritage.org/project/profile/193/
-
-.. |pubdev_loader_status| replace:: in staging
-.. _pubdev_loader_status: https://webapp.staging.swh.network/browse/search/?with_visit=true&with_content=true&visit_type=pubdev
-
-.. |pubdev_loader_grant| replace:: NLnet Foundation
-.. _pubdev_loader_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |puppet_loader_source| replace:: Source code
-.. _puppet_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/puppet/
-
-.. |puppet_loader_dev| replace:: Development
-.. _puppet_loader_dev: https://forge.softwareheritage.org/project/profile/207/
-
-.. |puppet_loader_status| replace:: in development
-.. _puppet_loader_status: https://forge.softwareheritage.org/T4580
-
-.. |puppet_loader_grant| replace:: NLnet Foundation
-.. _puppet_loader_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |pypi_loader_source| replace:: Source code
-.. _pypi_loader_source: https://forge.softwareheritage.org/source/swh-loader-core/browse/master/swh/loader/package/pypi/
-
-.. |pypi_loader_dev| replace:: Development
-.. _pypi_loader_dev: https://forge.softwareheritage.org/project/profile/88/
-
-.. |pypi_loader_status| replace:: in production
-.. _pypi_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=pypi
-
-
-.. |rubygems_loader_dev| replace:: Development
-.. _rubygems_loader_dev: https://forge.softwareheritage.org/project/profile/206/
-
-.. |rubygems_loader_status| replace:: in development
-.. _rubygems_loader_status: https://forge.softwareheritage.org/T4581
-
-.. |rubygems_loader_grant| replace:: NLnet Foundation
-.. _rubygems_loader_grant: https://nlnet.nl/project/SWH-PackageManagers/index.html
-
-
-.. |subversion_loader_source| replace:: Source code
-.. _subversion_loader_source: https://forge.softwareheritage.org/source/swh-loader-svn/
-
-.. |subversion_loader_dev| replace:: Development
-.. _subversion_loader_dev: https://forge.softwareheritage.org/project/profile/37/
-
-.. |subversion_loader_status| replace:: in production
-.. _subversion_loader_status: https://archive.softwareheritage.org/browse/search/?with_visit=true&with_content=true&visit_type=svn
-
-
-.. _grants: https://www.softwareheritage.org/grants/
-
-.. _Castalia Solutions: https://castalia.solutions/
-.. _Hashbang: https://hashbang.fr/
-.. _OCamlPro: https://ocamlpro.com/
-.. _Octobus: https://octobus.net/
-.. _Stefan Sperling: https://stefansperling.de/
-.. _Tweag: https://www.tweag.io/
+.. include:: table.inc
diff --git a/docs/user/loaders/subversion.rst b/docs/user/loaders/svn.rst
similarity index 78%
rename from docs/user/loaders/subversion.rst
rename to docs/user/loaders/svn.rst
index c2ca2b77d440c1aa93393daf4da097c8360f0077..31325715a2f9849ce79d2eb27c1299a7dd0c0c17 100644
--- a/docs/user/loaders/subversion.rst
+++ b/docs/user/loaders/svn.rst
@@ -1,4 +1,4 @@
-.. _subversion_loader:
+.. _svn_loader:
 
 Subversion loader
 =================
diff --git a/docs/user/logos/bazaar.png b/docs/user/logos/bzr.png
similarity index 100%
rename from docs/user/logos/bazaar.png
rename to docs/user/logos/bzr.png
diff --git a/docs/user/logos/subversion.png b/docs/user/logos/svn.png
similarity index 100%
rename from docs/user/logos/subversion.png
rename to docs/user/logos/svn.png
diff --git a/requirements-test.txt b/requirements-test.txt
index e079f8a6038dd2dc8512967540f96ee0de172067..8136b7be437cd689b2bb589e7d629b01efd7143d 100644
--- a/requirements-test.txt
+++ b/requirements-test.txt
@@ -1 +1,2 @@
 pytest
+types-tabulate
diff --git a/requirements.txt b/requirements.txt
index c2e9ddd0d4834677b52bbd215833ff65654abbcf..5fd1d863db6a6c2feaec39743c33370b5cdb48af 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -11,3 +11,5 @@ pydata-sphinx-theme
 sphinx-click
 myst-parser
 sphinx-celery
+tabulate
+typing-extensions
diff --git a/swh/docs/generate_forge_list.py b/swh/docs/generate_forge_list.py
new file mode 100644
index 0000000000000000000000000000000000000000..129f4f5ae93e2cd71cb818bad0354c2bdb930a9d
--- /dev/null
+++ b/swh/docs/generate_forge_list.py
@@ -0,0 +1,233 @@
+# Copyright (C) 2023 The Software Heritage developers
+# See the AUTHORS file at the top-level directory of this distribution
+# License: GNU General Public License version 3, or any later version
+# See top-level LICENSE file for more information
+
+"""Reads docs/devel/forge-support.yml and generates ReST documents with tables
+summarizing the status of loaders ands listers."""
+
+from pathlib import Path
+import sys
+import textwrap
+
+import tabulate
+from typing_extensions import Literal
+import yaml
+
+LISTERS_PRELUDE = """
+.. This file was generated by swh/docs/generate_forge_list.py using {source_yml}
+
+.. rst-class:: swh-logos-table
+
+.. table::
+  :align: center
+
+"""
+
+
+LOADERS_PRELUDE = """
+.. This file was generated by swh/docs/generate_forge_list.py using {source_yml}
+
+.. rst-class:: swh-logos-table
+
+.. table::
+  :align: center
+
+"""
+
+
+def write_table(data, lister_or_loader: Literal["lister", "loader"], file) -> None:
+    links = []
+    headers = (
+        f"{lister_or_loader.capitalize()} name",
+        "Related links",
+        "Current status",
+        "Related `grants <https://www.softwareheritage.org/grants/>`_",
+    )
+    table = []
+    for (forge_id, forge) in sorted(data["forges"].items()):
+
+        if lister_or_loader == "loader":
+            default_source = (
+                f"https://gitlab.softwareheritage.org/swh/devel/swh-loader-core/-/"
+                f"tree/master/swh/loader/package/{forge_id}"
+            )
+        else:
+            default_source = (
+                f"https://gitlab.softwareheritage.org/swh/devel/swh-lister/-/"
+                f"tree/master/swh/lister/{forge_id}"
+            )
+        links.append(
+            (
+                f"{forge_id}-source",
+                forge[lister_or_loader].get("source", default_source),
+            )
+        )
+
+        logo_cell = f"|{forge_id}_logo|\n\n:ref:`{forge_id}_{lister_or_loader}`"
+
+        if forge_id in ("cran", "gnu"):
+            # FIXME: swh-web coverage should have them lowercased, like everything else
+            id_in_swh_web_coverage = forge_id.upper()
+        else:
+            id_in_swh_web_coverage = forge_id
+
+        status = forge[lister_or_loader]["status"]
+        if status == "N/A":
+            # No lister or loader for this forge, skipping
+            continue
+        elif status == "dev":
+            status_cell = "In development"
+            links_cell = f"* `Source Code <{forge_id}-source_>`__"
+        elif status == "staging":
+            status_cell = "In staging"
+            if lister_or_loader == "loader":
+                links.append(
+                    (
+                        f"{forge_id}-origins",
+                        "https://webapp.staging.swh.network/browse/search/"
+                        f"?with_visit=true&with_content=true&visit_type={forge_id}",
+                    )
+                )
+
+                links_cell = (
+                    f"* `Source Code <{forge_id}-source_>`__\n"
+                    f"* `Browse origins <{forge_id}-origins_>`__"
+                )
+            else:
+                links.append(
+                    (
+                        f"{forge_id}-coverage",
+                        "https://webapp.staging.swh.network/coverage/"
+                        f"?focus={id_in_swh_web_coverage}#{id_in_swh_web_coverage}",
+                    )
+                )
+                links_cell = (
+                    f"* `Source Code <{forge_id}-source_>`__\n"
+                    f"* `See coverage <{forge_id}-coverage_>`__"
+                )
+        elif status == "prod":
+            status_cell = "In production"
+            if lister_or_loader == "loader":
+                links.append(
+                    (
+                        f"{forge_id}-origins",
+                        f"https://archive.softwareheritage.org/browse/search/"
+                        f"?with_visit=true&with_content=true&visit_type={forge_id}",
+                    )
+                )
+                links_cell = (
+                    f"* `Source Code <{forge_id}-source_>`__\n"
+                    f"* `Browse origins <{forge_id}-origins_>`__"
+                )
+            else:
+                links.append(
+                    (
+                        f"{forge_id}-coverage",
+                        f"https://archive.softwareheritage.org/coverage/"
+                        f"?focus={id_in_swh_web_coverage}#{id_in_swh_web_coverage}",
+                    )
+                )
+                links_cell = (
+                    f"* `Source Code <{forge_id}-source_>`__\n"
+                    f"* `See coverage <{forge_id}-coverage_>`__"
+                )
+        else:
+            assert False, f"Unexpected status {status!r} for {forge_id}"
+        issue = forge[lister_or_loader].get("issue")
+        if issue:
+            links_cell += f"\n* `Tracking issue <{forge[lister_or_loader]['issue']}>`__"
+
+        grant_id = forge[lister_or_loader].get("grant")
+        grant = data["grants"][grant_id] if grant_id else None
+        developer_id = forge[lister_or_loader].get("developer")
+        if grant:
+            assert developer_id, f"{forge_id} has grant but no developer"
+            developer = data["developers"][developer_id]
+            grant_cell = (
+                f"|{grant_id}|_\n\n"
+                f"(awarded to `{developer['name']} <{developer['url']}>`__)"
+            )
+        else:
+            assert not developer_id, f"{forge_id} has developer but no grant"
+            grant_cell = ""
+
+        table.append((logo_cell, links_cell, status_cell, grant_cell))
+
+    file.write(
+        textwrap.indent(
+            tabulate.tabulate(table, headers=headers, tablefmt="grid"),
+            prefix="  ",
+        )
+        + "\n\n"
+    )
+
+    for (link_name, link_url) in links:
+        file.write(f".. _{link_name}: {link_url}\n")
+
+    file.write("\n")
+
+
+def write_toctree(data, lister_or_loader: Literal["lister", "loader"], file) -> None:
+    file.write(".. toctree::\n" "  :maxdepth: 2\n" "  :hidden:\n" "\n")
+    for (forge_id, forge) in sorted(data["forges"].items()):
+        if forge[lister_or_loader]["status"] != "N/A":
+            file.write(f"  {forge_id}\n")
+
+    file.write("\n")
+
+
+def write_logos(data, lister_or_loader: Literal["lister", "loader"], file) -> None:
+    for (forge_id, forge) in sorted(data["forges"].items()):
+        if forge[lister_or_loader]["status"] != "N/A":
+            file.write(
+                f".. |{forge_id}_logo| image:: ../logos/{forge_id}.png\n"
+                f"  :width: 50%\n"
+                f"  :target: {forge_id}.html\n"
+                f"  :alt: {forge['name']} {lister_or_loader}\n"
+                f"\n"
+            )
+
+
+def write_grants(data, file) -> None:
+    for (grant_id, grant) in data["grants"].items():
+        file.write(
+            f".. |{grant_id}| replace:: {grant['funder']}\n"
+            f".. _{grant_id}: {grant['announcement']}\n"
+            f"\n"
+        )
+
+
+def main(input_path: Path, lister_output_path: Path, loader_output_path: Path) -> None:
+    data = yaml.safe_load(input_path.read_text())
+
+    with lister_output_path.open("wt") as listers_file, loader_output_path.open(
+        "wt"
+    ) as loaders_file:
+        listers_file.write(LISTERS_PRELUDE.format(source_yml=input_path))
+        loaders_file.write(LOADERS_PRELUDE.format(source_yml=input_path))
+
+        write_table(data, "lister", listers_file)
+        write_table(data, "loader", loaders_file)
+
+        write_toctree(data, "lister", listers_file)
+        write_toctree(data, "loader", loaders_file)
+
+        write_logos(data, "lister", listers_file)
+        write_logos(data, "loader", loaders_file)
+
+        write_grants(data, listers_file)
+        write_grants(data, loaders_file)
+
+
+if __name__ == "__main__":
+    try:
+        (_, input_path, lister_output_path, loader_output_path) = sys.argv
+    except ValueError:
+        print(
+            f"Syntax: {sys.argv[0]} docs/devel/forge-support.yml "
+            f"docs/user/listers/index.rst user/loaders/index.rst",
+            sys.stderr,
+        )
+        exit(1)
+    main(Path(input_path), Path(lister_output_path), Path(loader_output_path))