How every number is calculated
GitWrapped only shows what GitHub's public API can back up. Each figure below lists its source and formula. If a number can't be measured, it isn't shown.
Data source
- GitHub GraphQL API, read with a token that has no scopes (public data only). A profile costs 2 requests plus one per 20 repos for file listings, and one more per extra 100 repos for accounts with more than 100.
- Repos analysed: your 100 most recently pushed public, non-fork repos you own. Forks are excluded everywhere, including star counts.
- Freshness: results are cached for 60 minutes. Every “last 30 days” style figure is measured from the moment the data was fetched.
Activity
From GitHub's contribution calendar for the last 12 months, the same data as the green grid on your profile. It counts commits, pull requests, reviews and issues. Private contributions appear as a count only, and only if you enabled “Include private contributions” on GitHub.
| Active weeks | Calendar weeks with at least one contribution. |
| Longest streak | Most consecutive days with a contribution. |
| Current streak | Consecutive active days ending today; an empty today doesn't break it. |
| Pattern | Steady ≥ 75% of weeks active, regular ≥ 40%, bursty > 10%, otherwise quiet. |
| Recently active | A contribution or push in the last 30 days. |
Languages
Byte counts from GitHub Linguist across analysed repos. Markup, styles, build files and notebooks show in the breakdown but don't count as programming languages. A language counts toward “languages used” only if it is at least 2% of your code, or the main language of 2+ repos, so a stray script doesn't make you a polyglot.
Engineering practices
For each analysed, non-archived repo we read the file names at the repo root and in.github/workflows, then report the share of repos where each practice appears. Only exact names count (e.g. tests/, vitest.config.ts,conftest.py, *_test.go), so a folder called latest/ is not a test suite. This checks whether a practice is set up, not how good it is.
The dev card
Each stat is one real metric. Volume-type stats use a log scale, so a 10k-star account and a 250k-star account still get different numbers. HP and damage round to 10, like a printed card.
| HP (40–340) | 40 + 200 × share of weeks active + 100 × min(1, years on GitHub ÷ 10). Rewards showing up steadily over a long time. |
| Light attack (10–120) | 10 + 110 × log-scale(contributions in 12 months, full at 3,000). |
| Heavy attack (20–200) | 20 + 180 × log-scale(stars on your most starred repo, full at 20,000). |
| Ability | Your most exceptional trait. Each candidate is scored against its own bar: a 30-day streak, 90% of weeks active, 200 stars, 6 languages, 100 reviews, 100 PRs, 12 years, CI in 60% of repos, tests in 50%. The highest ratio wins. If nothing reaches half its bar, you get a tenure ability. |
| Retreat (0–4) | 1 per 2 repos pushed in the last 180 days (the live projects you'd walk away from). |
| Stage | Basic under 2 years or very little activity; Stage 2 at 5+ years with 50%+ active weeks or 100+ stars; otherwise Stage 1. |
| Type | Your top programming language by bytes. |
| Rarity | Follows the stage: Basic is common, Stage 1 uncommon, Stage 2 rare. Legendary needs a repo with 10,000+ stars or a 365-day contribution streak. |
Card art
Your top language picks a creature family, and your rarity picks its form. Each family and rarity has its own pool of paintings, 191 planned in total, and the card says how many share your pool (“1 of 6”). Rare and legendary pools only open to accounts that earn them, so few people share those. While a pool is still empty, the card shows the family's original painting.
Your painting is picked from your username with rendezvous hashing: every painting gets a score from hash(username, painting) and you get the highest. It never changes on its own, and adding a painting to a pool of N only moves the roughly 1 in N+1 people who now score it highest. Cards already in READMEs stay as they are.
Passion paintings. If one of your own repos is clearly about fitness, combat sports, soccer, American football, racing, gaming or rap (a GitHub topic or the repo name counts; a single mention in a description doesn't), your creature can appear in a painting of that world. Those paintings are scarcer than the regular pools, so the card goes up one rarity tier, and the card view names the repo that earned it. Words are matched whole, so race-condition is not racing. It has to be a recurring theme: at least 5% of your repos must match, so one game-prototypes among a hundred libraries doesn't make you a gamer.
One of one. A few paintings are made for a single account. Legendary and one-of-one cards are also the only animated ones (a foil sweep and twinkling sparkles; one-of-ones add a travelling gold glint on the frame). Motion switches off if your device asks for reduced motion.
| TypeScript / JavaScript | Sparkit (20) → Voltlynx (10) → Thundermane (6) → Stormcrown (3) |
| Python | Wirelet (20) → Coilisk (10) → Cable Basilisk (6) → Ouroboros Prime (3) |
| Java / Kotlin / C# | Beanling (12) → Brewstone (7) → Brew Golem (4) → Monolith Titan (3) |
| C / C++ / Rust / Go | Bitshell (12) → Kerneltoise (7) → Bedrock Tortoise (4) → Bedrock Leviathan (3) |
| ML / data | Neurolet (8) → Synapsea (5) → Neural Nexus (3) → Singularity Bloom (3) |
| Shell / DevOps | Podling (8) → Pipewyrm (5) → Container Dragon (3) → Cluster Hydra (3) |
| Polyglot / other | Glyphling (10) → Theorowl (6) → Axiom Owl (4) → Babel Seraph (3) |
Known limits
- Contributions to other people's and organisation repos count toward activity, but only repos you own are analysed for languages and practices.
- For accounts with hundreds of starred repos, star totals stop after the 500 most starred and are marked as a lower bound.
- Fork totals on accounts with more than 100 repos are a lower bound (shown with a +): older zero-star repos are never listed, and they can still have forks.
- “Popular repo” means 50+ stars. It's an arbitrary line, and it's stated here so you can judge it.
- Nothing here measures code quality. It measures what is visible on GitHub.