Every day you showed up
A contribution calendar for every year, with your longest streak and busiest day.
Free and open source
ghis reads your commits, pull requests and reviews from GitHub, GitLab, Codeberg or any git host, and turns them into an animated story of everything you've built.
GitHubGitLabCodebergForgejoGiteaBitbucketany git host
What you get
A contribution calendar for every year, with your longest streak and busiest day.
The hours and weekdays you really code, in the timezone you committed from. Night owl or early bird?
Repositories and languages by commits and lines changed. Lockfiles and build output don't count.
Pull and merge requests, time to merge, reviews and approvals. On GitLab and Codeberg, comments too.
Your first commit, your biggest one, tickets touched and the words you reach for most.
Filter by year or repository, compare with last year, then download an image of your highlights that's safe to post.
Get started
You need Python 3.9+ and git. Nothing else to install.
$ git clone https://github.com/radufarcas10/ghis.git
$ cd ghis
$ python3 ghis.py
Scriptable, and the same story.
GITLAB_TOKEN=… python3 ghis.py collect \
--provider gitlab --open
Get a ghis command with pipx.
pipx install git+https://github.com/radufarcas10/ghis
ghis
A Docker image with an allowlist and expiring stories.
docker compose up --build
Privacy
ghis runs on your computer. It talks only to the host you choose, and only to read.
FAQ
Commits whose author email is one of yours. ghis finds them on its own: your account's emails, plus every address you committed with under your git name. You can add more.
No. Without one, ghis reads the repositories already on your computer. With a token it also includes pull or merge requests, reviews, repositories you never cloned and, on GitLab and Codeberg, your comments. If the gh or glab CLI is signed in, ghis uses that.
Yes. Self-managed GitLab, GitHub Enterprise Server, Forgejo and Gitea all work. ghis even reads your instance from the remotes of the repositories you have checked out.
Lockfiles, build output, vendored code and snapshots are left out, so one npm install doesn't outweigh a year of work. Pass --count-all-files to include them.
Yes. Download the share card, an image of your highlights with no repository names, commit messages or emails on it. To share the whole story, use Share-safe data: it removes messages and renames repositories and teammates, keeping every number.
It takes a minute, and you'll probably learn something about yourself.