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
- 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
- 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
- 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.