BUSFACTOR.TECH
Dendrochronology

Every repo is a tree. Cut yours open.

One ring per month of your repository’s life, width from that month’s churn, knots where the long branches merged. Reads the commit graph. Never opens a file. Nothing leaves this machine.

npx busfactor ringsPrivate repo? Run it yourself. Offline, no signup, nothing uploaded.

Read a stranger’s trunk

1234567
  1. 1Pith. The first commit. It drifts toward whichever subsystem took the work.
  2. 2Ring. One period. Width is that period's churn, log-scaled against the busiest one.
  3. 3Wedge. A top-level directory. Arc = its share of lifetime churn, largest at 12 o'clock.
  4. 4Sealed pocket. A directory that stopped and is gone from HEAD.
  5. 5Knot. A branch that lived 30 days or more and carried 3+ commits, then merged.
  6. 6Scar. A period where reverts crossed 5% of its commits.
  7. 7Bark. Thickness = distinct authors of the last 12 periods. Counted, never named.

Seventeen inks. Your language mix picks one.

Most-touched family wins.

What every mark counts

MarkGit factHow it is counted
One ringOne period of the repo's lifecommit author dates, UTC
Ring widthLines added + removed that period, log-scaled against the busiest periodgit log --numstat
Tight bandA quiet periodsame
Wide flushA rewrite or a big pushsame
Dark ring edgeLatewood: darker where the period was busiersame
WedgeA top-level directory; arc = its share of lifetime churn, largest at 12 o'clock going clockwisenumstat path prefixes
Bright grainThat directory dominated that period's churnper-period churn share
KnotA merged branch that lived >= 30 days with >= 3 commits, sitting in the subsystem it touched mostmerge parents, walked
ScarA period where reverts were >= 5% of commits and >= 3 of themcommit subjects starting with revert or reverted
Sealed pocketA top-level directory that stopped and is gone from HEADgit ls-tree HEAD
Off-centre pithThe trunk leans toward wherever the work moveddominant wedge per period, accumulated
Lighter outer woodSapwood: the last 12 periodsring index
Bark thicknessDistinct author emails in the sapwood windowhashed locally, counted, never named
InkThe language family whose files were touched most oftennumstat rows by file extension

What you get

npx busfactor rings --print --wallpapers --light