Skip to content

Methods

Everything comes from public APIs, collected weekly by a job in this repository. No manual data entry, no database, and no credential beyond the token GitHub issues to its own workflow.

What counts as TGX

The tracked list is config/projects.csv: software and data resources the department builds or co-maintains, each named explicitly with the repositories, packages, images, endpoints and papers that belong to it. Nothing is discovered by matching a person, an affiliation string or an ORCID, so nothing arrives in a figure because a name looked right.

No person is queried and none is stored. The department's publication record is a separate thing, held in Pure, and this page does not reproduce it.

Rules the pipeline enforces

Each exists because a dashboard like this has failed that way before. A record that trips one is quarantined into the run manifest with its reason and never published.

Rule Prevents
semantics_gate a figure appearing without a definition of what it counts
period_class a running total being filed under a month, which produces identical rows and a headline that sums the same number repeatedly
future_period upstream placeholder rows entering the series. Bioconductor ships a zero row for every remaining month of the year
no_silent_zero a value collapsing to zero and being published as fact
monotonic a lifetime counter appearing to go backwards
empty_result a source returning HTTP 200 with no rows being read as "nothing to report" while the last good value ages
rate_limited a 429 being absorbed into "handled", which freezes a series while the page claims it is current
volume_drop a collapse in record count being promoted

Freshness comes from each source's own collection timestamp, never from the build clock. Amber past twice a source's cadence, red past five times.

Blind spots

A gap that is not declared reads as a zero, so:

  • Container pulls come from Docker Hub, which is the only registry that publishes a count. An image pushed only to GitHub's registry or another one has no usage figure here, and none of them offer an API that would give one.
  • GitHub page views and clones are not collected. They need push access to every repository, which means storing a token, and this runs without secrets. The window is 14 days anyway.
  • PyPI download history cannot be backfilled. The public API keeps about 180 days.
  • The Research Software Directory only knows registered tools. Software nobody registered shows no mentions, which is a good argument for registering it.
  • Only the projects listed in config/projects.csv are counted. A missing tool means nobody has added it yet, and adding one is a row in a table.
  • Citations are counted for the papers a project declares. A tool with no paper of its own therefore shows none, however much it is used.

Collection status

6 of 6 sources refreshed 2026-09-01 — 1 source incomplete: citations (34 of 35 papers found)
Source Status Last collected Age Records Completeness
bioconductor ok 2026-09-01 0 d 518
citations degraded 2026-09-01 0 d 48 34 of 35 papers
dockerhub ok 2026-09-01 0 d 2
ecosystems ok 2026-09-01 0 d 60
github ok 2026-09-01 0 d 124
rsd ok 2026-09-01 0 d 10

Sources are collected independently, so one broken API degrades one section and the page still builds with that section marked stale rather than showing last week's number as if it were current.

Open an issue. Every figure links to its data, and the run manifests record what each source returned and what failed.

The sources

One section per source: what it is, what this project takes from it, the shape of what it asks for, and every request from the last run. Generated from the run manifest, so it describes what actually happened rather than what the code is meant to do.

What is republished here are derived aggregates, never a verbatim copy of anyone's dataset. Where a source publishes no licence for its statistics, the figure is shown with a link back rather than redistributed. If you maintain one of these services and would rather this project used your data differently, please open an issue.

Every URL below can be pasted into a browser — they are all public and none needs a key — and the answer you get is the answer this page got. In a diagram, requests are on the left, the collector in the middle, the metrics it produced on the right; a box marked ×19 is one endpoint asked nineteen times, and marks a segment that varied between calls. The literal URLs are in the tables, never abbreviated.

Bioconductor

bioconductor · https://bioconductor.org/packages/stats/ · terms: courtesy statistics files with no stated licence; aggregates only, with attribution

Publishes
Bioconductor distinct IPs per month bioc_distinct_ips_monthly, per month Distinct IP addresses downloading a package in a month.
Bioconductor downloads per month bioc_downloads_monthly, per month Downloads recorded by Bioconductor for a package in a month.
Bioconductor download rank bioc_rank, level Position in Bioconductor's published download score table.

2 requests on 2026-09-01, status ok, 518 records kept.

bioconductor518 recordsbioconductor.org/packages/stats/bioc/…x2bioc_distinct_ips_monthly258 recordsbioc_downloads_monthly258 recordsbioc_rank2 records

Every request, in the order it was made
# URL What came back
1 https://bioconductor.org/packages/stats/bioc/bioc_pkg_stats.tab all packages, all months, one file
2 https://bioconductor.org/packages/stats/bioc/bioc_pkg_scores.tab download score table

OpenAlex

citations · https://openalex.org · terms: CC0

Publishes
Citations of the tool's papers paper_citations, level Citations to every paper describing a tool, summed across its update papers.
Citations per paper paper_citations_by_doi, level Citations to one paper, from OpenAlex.

2 requests on 2026-09-01, status degraded, 48 records kept.

citations48 recordsapi.openalex.org/worksx2paper_citations14 recordspaper_citations_by_doi34 records

Every request, in the order it was made
# URL What came back
1 https://api.openalex.org/works 25 DOIs asked, 24 returned
2 https://api.openalex.org/works 10 DOIs asked, 10 returned

Reported a problem

OpenAlex has no record for 1 DOI(s): 10.6084/m9.figshare.7346384

Docker Hub

dockerhub · https://hub.docker.com · terms: Docker terms of service

Publishes
Container pulls, all time docker_pulls_total, level Docker Hub's lifetime pull counter for an image.

2 requests on 2026-09-01, status ok, 2 records kept.

dockerhub2 recordshub.docker.com/v2/repositories/…/…x2docker_pulls_total2 records

Every request, in the order it was made
# URL What came back
1 https://hub.docker.com/v2/repositories/bigcatum/bridgedb/ bridgedb
2 https://hub.docker.com/v2/repositories/vhp4safety/virtual-human-platform/ vhp

ecosyste.ms

ecosystems · https://ecosyste.ms · terms: CC-BY-SA 4.0

Publishes
Packages depending on it package_dependents, level Other published packages that declare a dependency on one of these, as counted by the registry it is published in.
Registry downloads, last 30 days package_downloads_recent, per none Downloads in the last 30 days, as reported by registries that publish no lifetime counter.
Registry downloads, all time package_downloads_total, level The registry's own lifetime download counter, for registries that publish one.
Registries published to registry_breadth, level Distinct registries carrying an artefact built from a department repository.

27 requests on 2026-09-01, status ok, 60 records kept.

ecosystems60 recordspackages.ecosyste.ms/api/v1/registries/…x27package_dependents27 recordspackage_downloads_recent8 recordspackage_downloads_total4 recordsregistry_breadth21 records

Every request, in the order it was made
# URL What came back
1 https://packages.ecosyste.ms/api/v1/registries/bioconductor.org/packages/BridgeDbR bridgedb
2 https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/bridgedb bridgedb
3 https://packages.ecosyste.ms/api/v1/registries/repo1.maven.org/packages/org.bridgedb:org.bridgedb.bio bridgedb
4 https://packages.ecosyste.ms/api/v1/registries/bioconductor.org/packages/rWikiPathways wikipathways
5 https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pywikipathways wikipathways
6 https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/@wikipathways/pvjs wikipathways
7 https://packages.ecosyste.ms/api/v1/registries/repo1.maven.org/packages/org.pathvisio:org.pathvisio.libgpml pathvisio
8 https://packages.ecosyste.ms/api/v1/registries/repo1.maven.org/packages/org.openscience.cdk:cdk-bundle cdk
9 https://packages.ecosyste.ms/api/v1/registries/repo1.maven.org/packages/org.openscience.cdk:cdk-core cdk
10 https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/cdk cdk
11 https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/cdk cdk
12 https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/cdk cdk
13 https://packages.ecosyste.ms/api/v1/registries/conda-forge.org/packages/r-rcdk cdk
14 https://packages.ecosyste.ms/api/v1/registries/cran.r-project.org/packages/rcdk cdk
15 https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pybacting bacting
16 https://packages.ecosyste.ms/api/v1/registries/repo1.maven.org/packages/io.github.egonw.bacting:managers-cheminfo bacting
17 https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pybiodatafuse biodatafuse
18 https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/pysec2pri sec2pri
19 https://packages.ecosyste.ms/api/v1/registries/pypi.org/packages/rdfsolve rdfsolve
20 https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/cmlxom blue-obelisk
21 https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/cmlxom blue-obelisk
22 https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/libeuclid-java blue-obelisk
23 https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/libeuclid-java blue-obelisk
24 https://packages.ecosyste.ms/api/v1/registries/debian-13/packages/bodr blue-obelisk
25 https://packages.ecosyste.ms/api/v1/registries/ubuntu-24.04/packages/bodr blue-obelisk
26 https://packages.ecosyste.ms/api/v1/registries/repo1.maven.org/packages/io.github.egonw:nanojava nanojava
27 https://packages.ecosyste.ms/api/v1/registries/repo1.maven.org/packages/com.github.egonw:jqudt jqudt

GitHub

github · https://docs.github.com/en/graphql · terms: GitHub API terms of service

Publishes
Last release latest_release, level The date of a project's most recent release or tag.
Releases per year releases_by_year, per year A tagged release of a project's repositories, from GitHub Releases and git tags.
Repositories active in the last year repos_active, level A project's repositories pushed to in the last 365 days.

5 requests on 2026-09-01, status ok, 124 records kept.

github124 recordsapi.github.com/graphqlx5latest_release17 recordsreleases_by_year91 recordsrepos_active16 records

Every request, in the order it was made
# URL What came back
1 https://api.github.com/graphql (10 repositories) 10 of 10 returned: bridgedb/datasources, bridgedb/BridgeDb, bridgedb/BridgeDbWebservice, bridgedb/bridgedbjs, bridgedb/docker, BiGCAT-UM/BridgeDbR, wikipathways/rWikiPathways, wikipathways/pywikipathways, wikipathways/pvjs, wikipathways/wikipathways-database
2 https://api.github.com/graphql (10 repositories) 10 of 10 returned: wikipathways/GPML2RDF, wikipathways/WikiPathwaysCurator, PathVisio/pathvisio, PathVisio/libGPML, egonw/org.pathvisio.io.rdf, cdk/cdk, cdk/cdk-scaffold, egonw/bacting, blueobelisk/pybacting, BiGCAT-UM/ArrayAnalysis
3 https://api.github.com/graphql (10 repositories) 10 of 10 returned: TGX-UM/R-ODAF-Shiny, VHP4Safety/virtual-human-platform, VHP4Safety/cloud, VHP4Safety/ui-casestudy-config, VHP4Safety/glossary, marvinm2/AOPWikiRDF, marvinm2/AOP-Wiki-Snorql-UI, marvinm2/AOP-Wiki-RDF-dashboard, marvinm2/molAOP-builder, marvinm2/molAOP-analyser
4 https://api.github.com/graphql (10 repositories) 10 of 10 returned: BioDataFuse/pyBiodatafuse, BioDataFuse/biodatafuseUI, sec2pri/pysec2pri, jmillanacosta/rdfsolve, blueobelisk/euclid, blueobelisk/cmlxom, blueobelisk/iupac-names, blueobelisk/bodr, WDscholia/scholia, enanomapper/nanojava
5 https://api.github.com/graphql (2 repositories) 2 of 2 returned: egonw/jqudt, CyTargetLinker/cytargetlinker

Research Software Directory

rsd · https://research-software-directory.org · terms: platform Apache-2.0, content CC-BY

Publishes
Papers mentioning the software rsd_mentions, level Works the Research Software Directory records as mentioning a tool.

1 request on 2026-09-01, status ok, 10 records kept.

rsd10 recordsresearch-software-directory.org/api/v1/…rsd_mentions10 records

Every request, in the order it was made
# URL What came back
1 https://research-software-directory.org/api/v1/rpc/software_by_organisation?organisation_id=34e58775-bba6-48ee-9e0e-d1821cd33108 28 software entries

Charts and icons

Charts are drawn with Vega-Lite (BSD-3-Clause), vendored into docs/assets/js/ and pinned rather than loaded from a CDN, so the page renders the same in five years and archives intact. The site itself is built with MkDocs Material (MIT).

The type and the icons work the same way. Open Sans (Apache-2.0) is the substitute UM's own web guidance names for Thesis Sans, its licensed house typeface; the four subset faces are served from this repository, licence included. The tile icons are inline SVG taken from Simple Icons (CC0-1.0) and Octicons (MIT); the brand marks belong to their owners, and they are there to say which registry a number came from. The project logos work the same way: each is the mark that project publishes in its own repository, copied into docs/assets/images/logos/ so the page fetches nothing, and shown only to identify the tool whose figures sit beneath it. Every one of them remains the property of the project that made it. A project with no mark of its own gets initials instead. Nothing on this page is requested from anyone else.

The TGX logo and icon are the department's own marks. Colours follow the UM house style, and the chart series take the department's own #00A2DB and #E84E10.

File Version SHA-384
vega.min.js 5.30.0 em7CHpJd+SsMugVFf6TY7AKQcLWMcbPhD84hmNK8o6WFDkK+2uHSUQRVQV1/w827
vega-lite.min.js 5.21.0 GhkD6ks9/zgY1m5EFOUZWz/vMVMUFF/92DL61RZc+B42J8osL+jNufKv68bNHHZ2
vega-embed.min.js 6.26.0 TqXb8su49m5OnEpKGO8m+VrgHesrUxyP22HgpXi4hnh1Hm43dXroiSYemNf5D8lv