UK public sector / Inside the repositories

What UK public sector repositories contain - datasets, binaries, tests and rewrites - established without reading a file.

Every other measurement on this site is about how a repository is run - who committed, when, whether there is a licence. This one is about what is actually in it. No file was read to produce it: everything below comes from the names of the files and the shape of the changes, both of which are in the clone already.

25,626
REPOSITORIES EXAMINED
across 210 organisations
3,426
CONTAIN A DATASET
13% of those examined
2,107
CONTAIN A BINARY
compiled output committed as source
45%
HAVE NO TESTS
of repositories that contain code

A dataset in a repository is not a breach. Most of these are test fixtures, reference tables, lookup files and published open data sitting exactly where it belongs. The finding is the pattern and the outliers - not any individual file, and this page deliberately publishes counts rather than an index of them.

Committed data

130,837 files with a data extension - .csv, .xlsx, .sqlite, .db and relatives - live in 3,426 repositories. Everyone scans government code for secrets. Almost nobody asks whether a spreadsheet went in by accident, which is both more common and easier to do without noticing.

Where committed datasets are, by sector

Count of data files in repositories belonging to each sector. Sector sizes differ enormously, so read this against the repository counts on the comparison page rather than as a league table.

Central governmentCentral government: 67.3k67.3kOther public bodyOther public body: 60.4k60.4kHealthHealth: 1.8k1.8kLocal governmentLocal government: 532532Public corporationPublic corporation: 406406ParliamentParliament: 360360DevolvedDevolved: 2626Police & emergencyPolice & emergency: 88

Which formats

By extension, across the sampled paths.

.csv.csv: 15k15k.xlsx.xlsx: 2.6k2.6k.rds.rds: 1.3k1.3k.tsv.tsv: 751751.xls.xls: 447447.db.db: 387387.pkl.pkl: 350350.ods.ods: 296296.shp.shp: 169169.dbf.dbf: 166166

Things a build should have produced

23,374 compiled binaries (.exe, .dll, .jar, .pyc and friends) and 31,909 archives are committed across the estate. 1,495 repositories carry vendored dependencies and 1,118 carry build output.

None of this is dangerous. It is the cheapest possible signal of whether a repository was set up by someone who does this often: a missing .gitignore line is what separates most of these from the rest.

Tests

Of the repositories containing code, 9,095 have no test directory at all and 10,914 have one. Among those that do, the median ratio of test files to code files is 0.52.

Treat this gently. A repository can be thoroughly tested with its tests beside the code rather than in a test/ directory, and a three-file utility does not need a suite. What the number is good for is the shape of the estate, not the verdict on any one repository.

The biggest structural changes

Counting files changed per commit finds the moments a repository was restructured rather than edited. Framework migrations, monorepo reorganisations, an initial import of code that already existed somewhere else, and - the interesting one - the day a project moved from a supplier to an in-house team, or the reverse.

RepositoryFiles changed DateCommit
govuk-one-login/di-account-management-backend172,4702024-01-25e26fef191971
digital-land/infrastructure-funding-statement-collection170,7212024-03-1344d15989760b
digital-land/infrastructure-funding-statement-collection170,7192024-03-088b6794b97d63
digital-land/brownfield-land168,2502020-12-1525648bb9aff5
digital-land/radon166,8412025-05-2332a0ef8650e2
digital-land/brownfield-land166,3982020-12-1692bddcd372fc
NaturalHistoryMuseum/plant-traits-old165,8022024-10-1421ffa603427d
govuk-one-login/di-account-management-backend155,2162024-01-26dc385369e60c
alphagov/govuk-topic-taxonomy-static-suggestions-experiment111,5592026-03-1676164221cc55
digital-land/ancient-woodland87,8382021-11-08778fc49c40d1
digital-land/ancient-woodland87,8282021-09-243b3dc423db48
bbc/material-design-icons77,7792016-09-019b3e836f27a3
digital-land/conservation-area-collection75,9182024-03-13f2a428bf6582
digital-land/conservation-area-collection75,9172024-03-088788817d8f6c

82,910 commits across the estate changed 100 files or more. The threshold is arbitrary; the distribution behind it is in the per-repository data.

Method: derived from trees and tree-to-tree diffs in blobless clones, so no file content was fetched or read. Per-file sizes are not available in such a clone without downloading every blob, and are therefore not reported. The churn walk is capped at 30,000 commits per repository; 59 repositories hit that cap and their structural-change counts are therefore lower bounds. 0 repositories failed extraction and are excluded rather than counted as zero. See Method.