Fathohm

The dark index · findings · 2026-08-12

The index is 49.5% dark. Almost no repository is.

The dark index measures the 100 most-starred repositories on GitHub one at a time: what share of each one’s code no human has written or prompted in the last 180 days. Across all of them, byte-weighted, the answer is 49.5%. This page is what the same 100 rows say when you read across them instead of down them.

This is not comprehension debt. Comprehension debt needs the human review record, which git does not keep; the two do not correlate. Debt figures come from the public gallery. Dark share is the narrower question git can settle exactly, and it is the one every number below is about.

The average describes almost none of its own rows

49.5% is the share of the index’s bytes that are dark. It is not what a typical repository looks like, and there is no typical repository: 24 of the 100 are at least 90% dark and 18 are under 10%, while the 4 middle bands between 30% and 70% hold 26 between them. The median repository reads 40.9%.

010%18
1020%11
2030%11
3040%7
4050%10
5060%5
6070%4
7080%3
8090%7
90100%24

A repository is mostly one thing or mostly the other. That is the first result, and it is the reason the rest of this page is about which repositories land at which end rather than about the average.

Age tracks it. Stars do not.

Two candidate explanations, both testable on the rows already published. Rank correlation over all 100 repositories, ties averaged:

How old the repository is+0.42
Where it sits in star order0.05

Popularity says nothing about whether anyone is still writing the code. That is a negative result and it is the most useful thing on this page: the star count is the number everyone already has, and it does not answer the question. Age does, and the cohorts show the size of it — repositories under 2 years are 2.8% dark, repositories over 10 years are 58.2%.

CohortReposDark, by bytesMedian repoCode
under 2 years192.8%1.7%578 MB
2 to 5 years1949.0%48.1%755 MB
5 to 10 years2330.5%28.5%657 MB
over 10 years3958.2%67.0%4.5 GB

The bands are not monotone — the 2 to 5 years cohort reads darker than the 5 to 10 years one — and we have no mechanism to offer for that, so it is printed rather than smoothed. The claim rests on the correlation, which needs no cut points; the bands only show the shape.

Language, asked twice

Grouping by GitHub’s primary-language label gives a table with an obvious story in it, and the story has an obvious alternative explanation: the newer languages are on the newer repositories, and age is what the section above just showed. Cohorts with fewer than 3 repositories are named below the table rather than shown, because a median over two repositories is one repository’s opinion.

CohortReposDark, by bytesMedian repoCode
C358.1%40.5%1.6 GB
JavaScript1068.7%52.6%1.1 GB
TypeScript1617.9%20.0%1.1 GB
C++540.7%43.2%964 MB
Go667.1%47.6%706 MB
Python2525.8%56.1%409 MB
Rust631.7%24.3%300 MB
HTML365.8%65.8%24 MB
Shell675.7%40.6%4 MB
no language reported985.4%92.1%2 MB
Markdown3100.0%100.0%34 KB

Too few repositories to report: Batchfile, C#, Dart, Java, Jupyter Notebook, MDX, Swift.

So here is the same split with age held roughly fixed — only repositories 5 years and older, which removes the young cohort entirely:

CohortReposDark, by bytesMedian repo
C358.1%40.5%
JavaScript969.3%67.0%
C++439.3%38.6%
Go567.0%39.0%
TypeScript833.5%24.7%
Rust433.2%31.8%
Python1032.5%95.4%
Shell388.0%87.2%
no language reported692.6%97.3%

Too few repositories to report: Batchfile, C#, Dart, HTML, Jupyter Notebook, Markdown, MDX, Swift.

The gaps narrow and do not close. Read the repo counts before the percentages — these cohorts are single digits, which is enough to say the difference survives an age control and not enough to say how big it is. Anyone who wants to argue with it can: the per-repository rows, the language labels and the dates are all published.

What we checked, and left in

The selection rule already removes repositories with no push in the measurement window, because such a repository is 100% dark by arithmetic before anything is measured. The mirror case is not removed and pushes the other way: a repository created inside the window cannot contain code older than the window, so it reads 0% dark for the same arithmetic reason.

3 of the 100 are in that position — garrytan/gstack, ultraworkers/claw-code, VoltAgent/awesome-design-md — carrying 0.8% of the index’s bytes. Dropping them moves the headline from 49.5% to 49.9%: 0.40 points.

It stays in. Removing it means adding a second constant to a methodology whose strength is that it contains one, and the cost of leaving it is small enough to state in a sentence. A reader who finds this should find that we found it first.

Check any of it

Every row behind every number above is one command. No account, no token, nothing written to the repository, and the clock is pinned to the measurement day so you get the reading we got rather than today’s.

npx fathohm read torvalds/linux --now 2026-08-12T00:00:00Z

Then the same command on your own, without the pin, for today’s answer:

npx fathohm read .

Measured 2026-08-12 with fathohm 1.5.1, across 6.4 GB of code in 100 repositories. Repository ages and language labels captured 2026-08-21 from GitHub’s public API; ages are computed to the measurement day, so they do not move with the capture. Star order is the index’s own, recorded when the measurement ran. Full table and the selection rule on the index.