Skip to content

How gitdebt works

gitdebt charts the star history of any public GitHub repository and pairs it with health signals read from the git history itself: commit cadence, change frequency, ownership concentration, and recent TODO/FIXME movement.

What we compute

The health signals come from a shallow git clone analyzed on our side, and each one is a pure, unit-tested function over that data. Star history is different: it is read either from GitHub's stargazer list or rebuilt from historical star data, and every report names the source that produced its chart.

Star history

Illustrative — no repository values
Star history
One point per star, plotted as a cumulative count over time. Read it against calendar dates or aligned to days-since-first-star to compare growth shapes, overlay several repositories on shared axes, and embed the result in a README.
See it on facebook/react

Read from the git history

Illustrative — no repository values
Commit trend
Monthly commit volume across the analyzed history, so a slowdown shows up as a shape rather than an impression.
See it on vercel/next.js
Commit heatmap
The last 52 weeks of commit activity, bucketed by day, to show how steadily — or sporadically — the project moves.
See it on withastro/astro
File change frequency
A straight count of how many analyzed commits touched each file. It identifies frequently revisited files without claiming those changes were unstable or defective.
See it on tailwindlabs/tailwindcss
Fix-labelled changes
How often each file appears in commits whose message matches a fix heuristic. This describes fix-labelled history; it does not prove a bug or measure code quality.
See it on vitejs/vite
Contributors
Everyone who has authored commits, aggregated from the git log so it reflects actual shipped code rather than profile metadata.
See it on nodejs/node
Ownership concentration
How few contributors it takes to write half the commits. It shows where knowledge has pooled in a codebase; it is not a judgement about any person.
See it on prisma/prisma
Language lines
A per-language lines-of-code breakdown of the current HEAD, measured with tokei over a materialized checkout — so you can see where the codebase's mass sits.
See it on django/django
Recent TODO / FIXME movement
The recent running movement of TODO, FIXME, and similar source markers inside the analyzed commit window. It is a directional maintenance signal, not a complete backlog.
See it on pandas-dev/pandas

Published as an embed

Illustrative — no repository values
README embeds
Every chart above also renders as a static image for a README — SVG, PNG and WebP, with light and dark variants where the theme matters. The URL takes the repository slug and nothing else.
See it on tokio-rs/axum

Freshness, limits, and access

Cold vs cached
The first request for a repository is cold: star history starts in the background while a shallow clone is analyzed for the health charts. The report shows a measured live ETA, then fills each finished section on its own — no reload needed. After that, results are cached and served from the edge, so repeat views are near-instant. Popular repos refresh more often, and our browser extension reports the repos people are actively viewing so their data stays current. Very large histories build in durable windows and appear only after the complete snapshot is stored.
What gitdebt does not do
gitdebt does not flag stars as fake, real, or suspicious, and it doesn't score individual accounts. That can't be done correctly without privileged access to GitHub's full dataset, so we don't pretend to. A star series stores the timestamp of each star plus the opaque event id needed to avoid counting one twice — never an actor, a stargazer profile, or an event payload.
Sign-in is optional
Every public repository report works without an account. GitHub sign-in adds a one-click shortcut to your profile-wide aggregate report and queues your own public repositories for analysis; it does not unlock private repository analysis or request write access.

Where a star series comes from

GitHub stargazer list
Exact — one point per star, with its own timestamp. Since July 2026 GitHub serves this list only to applications that administer the repository, and gitdebt is not one of them, so a series read this way stops on a fixed date and no sign-in restarts it.
Historical star data
Rebuilt from historical star data. Star actions are recorded and unstars are not, so it reads as an attention signal rather than a net star count. It keeps flowing for every public repository.
GitHub stargazer list, then historical star data
One line, two methods, joined on a fixed date. The exact list runs up to the join and star activity continues after it, so the tail counts actions rather than current stargazers and does not record every star. Every chart built this way names the date it changes method.

Every chart names its source and its coverage date. None of them states how much of a history is missing: an archive series counts re-stars and can exceed a repository's own star total, so that figure would be wrong exactly where it looks most precise.