Your GitHub,
as a living city.
Swap github.com for commit.city on any profile, org or repo. A year of git history replays as a 3D city:
every file a tower, every commit a beam of light, every bot and AI agent accounted for.
Every city, so far.
People, orgs and repos that visitors have built. Each one is cached, so it opens instantly.
Who's writing the code, live.
The latest public events GitHub has published, in the order they happened, sorted by who sent them: AI agents by their accounts and the branches they push (copilot/, claude/, …), other bots by their [bot] accounts. Cities also read Co-authored-by trailers; press A in any city for its split.
Real history, drawn to scale.
commit.city doesn't estimate from contribution counts. It replays git itself, so a tower is exactly as tall as that file was on that day.
Run it yourself. Your token never leaves your repo.
commit.city only ever reads public data. For a city with your private work in it, run the same open-source pipeline in GitHub Actions or on your laptop. It writes one self-contained HTML page, and private repos are anonymised by default.
GitHub Action
Click Use this template, turn on Pages and run the workflow. It rebuilds every week and only re-reads repos that moved.
# .github/workflows/commit-city.yml - uses: azank1/commit-city@v0 with: token: ${{ secrets.COMMIT_CITY_TOKEN || github.token }}
Command line
Python 3.11+ and git, no other dependencies. It picks up your gh login and writes one HTML file you can open offline.
pipx install git+https://github.com/azank1/commit-city commit-city build --login you --include-private # → commit-city.html
Questions, answered.
What does it read? Is my code stored?
Public repositories only. Paths and line counts come from replaying git history over GitHub's own git protocol; commit times come from git and GitHub's API. No source code is kept: a city stores paths, line counts and timestamps, the things anyone can already see on GitHub.
How do I hide my city or leave a repo out?
Open your city, press Share, then Sign in with GitHub. Sign-in asks for no permissions. Untick repos to leave them out, or hide your city and your repo cities entirely. More
How does it know what an AI agent wrote?
From the signatures agents leave: their bot accounts (like copilot-swe-agent[bot]), Co-authored-by trailers (Claude Code adds one), message footers and agent branch names. Agent work that isn't disclosed looks human. Details
Why are my numbers lower than my contribution graph?
GitHub's graph also counts pull requests, issues, reviews and private work. A city draws commits that landed on the default branch of a public repo, because those are what changed the code you can see. Repos too big for the hosted builder (over about 1.5 GB, like torvalds/linux) are left out, and the city's panel names them.
Why is the first build slow?
It replays real history from GitHub, and big repos take a minute or two. Repo records are shared between cities, so popular repos are usually cached already, and a rebuild only replays what changed.
Is this affiliated with GitHub?
No. commit.city is an independent, MIT-licensed open-source project. GitHub is a trademark of GitHub, Inc.
