See your repo as a city.

Folders become districts. Files become buildings. Git history leaves its marks. Open the result in your browser, or build it in Minecraft.

packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js as a building in the React city
Lines
6,581
Height
107 blocks
Commits, last year
42
TODO markers
35
Last change
2026-10-12
Building
tower
Open this building →

facebook/react at 098d2e8, rendered with repoville defaults. Commits counted over the last year.

Your repo. One command.

Point it at a folder, owner/repo or a git URL. It writes one HTML file and opens it.

npx --package=https://github.com/maximilianfeix/repoville/releases/latest/download/repoville.tgz repoville . --open

Needs Node.js 22 or newer and git. The package installs from the GitHub release; it is not on npm yet.

$ repoville facebook/react -o out repoville: building facebook/react merged 3871 files into folder towers to stay under 4000 buildings 7,165 files · 903,811 LOC · 678 commits · 3,294 buildings on 1024×1024 blocks hottest districts (commits in 1y): packages/react-devtools-shared/src: 125 commits, 3 roofs on fire packages/react-dom/src/__tests__: 114 commits, 9 roofs on fire packages/react-reconciler/src: 107 commits, 14 roofs on fire most ruined buildings (TODO/FIXME/HACK/XXX): packages/react-reconciler/src/ReactFiberCommitWork.js: 73 markers in 5231 lines oldest mossy corner: scripts/bench/benchmarks/pe-class-components/benchmark.js wrote html out/facebook-react.html done in 7.6 s · analysis ran locally, nothing was uploaded

A real run on a Mac, October 2026. Output shortened: two of the three ruined buildings and the schematic line are left out.

The buildings are data.

Every building is a file, and everything that happens to it is something git can tell.

Fire means activity. Moss means time since the last change. Neither is a code review.

A folderA district with streets, a plaza and a name sign
A fileA building. Height grows with the square root of its lines, capped at 250 blocks
Commits in the last yearFire on the roof of the busiest files
TODO, FIXME, HACKCracked walls
No commit for a yearMoss and vines
The languageThe district's materials

Large repositories fold whole folders into one tower, so the city stays small enough to open. All nine building types.

Try another repository.

Each of these is the file repoville wrote, unchanged. Open one and click any building.

The React repository as a city, seen from above the react-reconciler districtfacebook/reactOpen the city →

One HTML file. Or actual blocks.

The viewer is a single file you can send to someone. The same city exports as blocks for a Minecraft Java world.

  • .htmlThe 3D viewer: search, building cards, history and churn views, night mode, photo export
  • .schemSponge schematic for WorldEdit
  • .litematicFor Litematica
  • worldA world folder to open in singleplayer
  • --liveBuilds into a running server over RCON

Checked on Paper 1.21.11 with WorldEdit 7.3.19: one block of every type in the test city survives a paste, a world load and a live build. How to load it.

The analysis runs on your machine.

No upload

Files and git history are read locally. Remote repositories are cloned with your own git.

Two optional requests

The viewer loads web fonts when you are online, and fetches original block textures only if you switch them on.

Mind what you share

The HTML file contains file paths, line counts and commit counts. Share it like you would share the file listing.