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

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 weeksCalendar weeks with at least one contribution.
Longest streakMost consecutive days with a contribution.
Current streakConsecutive active days ending today; an empty today doesn't break it.
PatternSteady ≥ 75% of weeks active, regular ≥ 40%, bursty > 10%, otherwise quiet.
Recently activeA 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).
AbilityYour 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).
StageBasic under 2 years or very little activity; Stage 2 at 5+ years with 50%+ active weeks or 100+ stars; otherwise Stage 1.
TypeYour top programming language by bytes.
RarityFollows 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 / JavaScriptSparkit (20) → Voltlynx (10) → Thundermane (6) → Stormcrown (3)
PythonWirelet (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 / GoBitshell (12) → Kerneltoise (7) → Bedrock Tortoise (4) → Bedrock Leviathan (3)
ML / dataNeurolet (8) → Synapsea (5) → Neural Nexus (3) → Singularity Bloom (3)
Shell / DevOpsPodling (8) → Pipewyrm (5) → Container Dragon (3) → Cluster Hydra (3)
Polyglot / otherGlyphling (10) → Theorowl (6) → Axiom Owl (4) → Babel Seraph (3)

Known limits