GitHub's "year in review" only counts your public contributions, lives on their servers, and disappears some years entirely. Your real year is in private repos, work repos, that self-hosted GitLab, the client project you can't send anywhere.
coderecap reads your local git log and turns it into a shareable recap — a
persona, your longest streak, the hour you actually code, your most-touched files,
your commit-message tics — printed to your terminal and exported as an SVG card you
can post. It runs on any repo, completely offline. Nothing is uploaded.
npx coderecap # this year, in this repo, for you ● coderecap · nebula 2025
🔒 100% local — nothing was uploaded
🦉 The Night Owl
Your best commits happen after dark.
600 commits · 204 active days · +65,285 -26,671 lines
Highlights
🔥 streak 29 days (2025-03-02 → 2025-03-30)
🌙 peak hour 11 PM
📅 favorite day Wednesday
📈 busiest day 2025-01-01 (5 commits)
📂 files 10 touched
When you commit (midnight → 11pm)
▇▇▇▄▁▁▁▁▁▁▂▂▂▂▂▂▂▂▂▂▄▄▇█
12a 3 6 9 12p 3 6 9 11
Most-touched files
src/engine.ts 252 commits
...
Top words fix×175 · add×121 · api×51 · engine×40 · dark×29
33% "fix" · 17% "wip"/throwaway · avg 18 chars
- 🔒 Local & private by design. It shells out to
git logon your machine and computes everything in-process. No account, no API key, no network. Your proprietary repo never leaves your laptop — so you can finally run a "wrapped" on the code that actually filled your year. - 🎴 A card built to be shared.
coderecap reportwrites a polished SVG (four themes) you open in a browser and screenshot. Every share carries your stats, not a login wall. - 🧠 A persona that fits. Night Owl, Weekend Warrior, Firefighter, Marathoner, Surgeon… picked deterministically from your patterns, not a vibe.
- 🧩 Works anywhere git does. Public, private, monorepo, GitLab, Gitea, self-hosted. Filter to you or include the whole team. Any year, any date range.
- 🛠️ Honest engineering. A pure, dependency-free core powers both the CLI and (soon) a browser playground — same parser, same numbers, fully deterministic.
# run it now, no install
npx coderecap
# or keep it around
npm install -g coderecap # global CLI
npm install -D coderecap # use the library / gate it in CINode ≥ 18, and git on your PATH. The core is dependency-free and browser-safe.
coderecap # this year, this repo, you
coderecap --year 2025 # a specific year
coderecap --all # your entire history
coderecap ~/work/api --all-authors # another repo, the whole team
coderecap --since 2025-01-01 --until 2025-06-30 # a custom window
coderecap report # write coderecap.svg + .md + .json to share
git log ... | coderecap --stdin # feed a log directly (no repo needed)By default coderecap scopes to your commits (via git config user.email). Use
--all-authors for the team, or --author you@work.com to pick an identity.
Everything below is computed from the commit stream — no heuristics you can't audit:
| Group | What you get |
|---|---|
| Persona | One of ten identities (🦉 Night Owl, ⚔️ Weekend Warrior, 🚒 Firefighter, 🏃 Marathoner, 🔬 Surgeon, 🚜 Bulldozer, 🤖 The Machine, 🐦 Early Bird, 🌊 Stream-of-Consciousness, 🧱 Steady Builder) |
| Rhythm | Commits by hour and weekday, your peak hour, night-owl / early-bird / weekend share |
| Streaks | Longest consecutive-day streak (with dates), current streak, active days |
| Volume | Commits, lines added/removed, files touched, your single busiest day |
| Files | Most-touched files and top-level directories, by commits and churn |
| Messages | Top words, how often you write "fix" / "wip", average subject length |
All of it rolls up into the terminal card and the SVG.
1. Your year, ready to post. Every December, run it and share a card from the repos that actually mattered — including the private ones GitHub's wrapped ignores:
coderecap --year 2025 report --theme candy
# → coderecap.svg — open in a browser, screenshot, post2. A sprint or quarter retro, in seconds. Point it at the team repo for a window and drop the Markdown into your retro doc:
coderecap ./service --since 2025-04-01 --until 2025-06-30 --all-authors report --md retro.md3. "Where did my year go?" Run it across each work repo to see which one ate your nights — without sending a single line of proprietary code anywhere.
coderecap report # writes coderecap.svg, .md, .json
coderecap report --theme dark # tokyonight | dark | light | candy
coderecap report --svg card.svg # just the card, custom pathOpen the .svg in any browser and screenshot it (PNG export is on the roadmap). The
card is a self-contained SVG — no fonts to embed, no network to hit.
coderecap init writes coderecap.config.json:
Flags override config; --config <file> points at a specific one.
The core is pure and browser-safe — feed it git log output from anywhere:
import { parseGitLog, analyze, renderCard, toMarkdown } from "coderecap";
const commits = parseGitLog(rawGitLogOutput);
const report = analyze(commits, DEFAULT_CONFIG, {
now: { y: 2025, m: 12, d: 31 },
repo: "my-app",
period: { label: "2025", since: "2025-01-01", until: "2025-12-31" },
authorKeys: ["me@example.com"],
authorLabel: "me",
});
console.log(report.persona.title, report.streaks.longest);
const svg = renderCard(report, "tokyonight");To produce the exact log coderecap expects: git log --no-merges --numstat --date=iso-strict --pretty=format:... — or just import GIT_LOG_ARGS.
coderecap runs git log with a machine-readable format, parses it into commits
(author-local time preserved, binary files and renames handled), and computes every
statistic with deterministic, dependency-free functions. The same input always
produces the same recap. There is no telemetry and no network code — grep the
dist/ if you like.
- 🖼️ PNG/PDF export of the card (so you can post it without the screenshot step).
- 🌐 Browser playground — paste your
git logoutput, get the card, still 100% client-side (the core already runs in a browser). - 🗂️ Multi-repo aggregate — one recap across all your repos for the year.
- 🤖 Optional
--ailayer (bring-your-own key) to write a paragraph-style "year in review" from the numbers. The core stays 100% offline and deterministic.
coderecap is free and MIT-licensed, built and maintained in spare time. If it made your year look good, please consider supporting it:
- ⭐ Star this repo — the simplest free way to help others find it.
- 🍋 Sponsor via Lemon Squeezy — one-time or recurring.
MIT © coderecap contributors

{ "authors": ["you@example.com"], // whose commits to count (empty = your git identity) "identifyBy": "email", // match authors by "email" or "name" "excludePaths": [ // ignored in *file* stats (lockfiles, build output) "package-lock.json", "dist/", "node_modules/", ".min." ], "theme": "tokyonight", // card theme "top": 5 // how many top files / words to show }