尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Your git repo as a pixel-art city that grows along its history.
翻譯準備中
正在載入完整 README。
檢視完整 README ↗Your git repo as a pixel-art city.
Every file is a building. Every directory is a neighbourhood. Watch the city grow, commit by commit, from empty lots to a skyline.
gitropolis.dev for any public repo · npx gitropolis for your own
vite, 2,383 files and 7,419 commits, played back in 10 seconds.
In your browser, for any public GitHub repo: swap github.com for gitropolis.dev.
https://github.com/pallets/flask → https://gitropolis.dev/pallets/flask
The first visit surveys the repo (a minute at most), and the city is kept for everyone after that.
On your machine, for any repo, private ones included:
npx gitropolis /path/to/your/repo
Your browser opens on the city. There's nothing to install or build and no dependencies; you only need Node 18+ and git. Nothing leaves your machine.
gitropolis reads the shape of your code and picks a plan to match it. A big monorepo of separate packages becomes islands in a lagoon. Deep, tightly imported trees become dense wards. Old projects with one famous centre get avenues radiating from it.
src/main/java/org/springframework/samples/petclinic are a stone stairway, one step each, up from the river.* These were forced with --city; left to itself, gitropolis plans axum, express and flask as Paris, ky as Manhattan, and redis as a factory town. Any repo can be drawn as any city.
The terminal tells you why your repo got its plan:
this repo is Tokyo: mostly small buildings (median 99 lines); 3.3 imports per file, so everything connects
Some repos also get a condition on top of their plan. A repo with no recent commits is a ghost town. One where most files haven't been touched in years is ancient ruins. A sudden rush of commits makes a boomtown, and a repo that's mostly tests is a garden city. A repo twenty years old whose first five years still stand is an old walled city: a wall with towers and gates goes round the quarter where those founding files cluster, or round the whole city when they're spread all through it.
| In the city | In your code |
|---|---|
| Footprint and height | lines of code |
| Building type | what the file does: source files are towers, slabs and setbacks; tests and docs are houses; configs and build scripts are sheds; type definitions are steel frames; index files are halls |
| Architectural era | when the file was born: old stone, mid-century, or new glass |
| Materials and roof | the language: Rust, Go, Python, TypeScript, C and others each build in their own vernacular |
| District colour | the directory; a neighbourhood is painted as one |
| Signpost | a folder's name, planted in the middle of its district |
| The tallest spire | the most-imported file |
| City hall · courthouse · clock tower | README · LICENSE · CHANGELOG |
| Port · power plant · airport | lockfile · package manifest · deploy config |
| Field · farmhouse · barn · silo · windmill | a dataset · a notebook · a big notebook · model weights · the most-imported file |
| Supertall · needle · crane · palm villa | one of the biggest files · the most-depended-on file · a file born in the last stretch · a test or doc |
| Axis · superblock · congress · cathedral | a layer of the design · a package · the most-depended-on file · the file that imports the most |
| Terrace · stairway | a package (subpackages are higher terraces) · the empty directories a path climbs through |
| College · chapel · library | docs and books: a page · a table of contents · the most-linked page |
| Container yard · warehouse · tank farm · factory | infrastructure as code: Kubernetes manifests · Helm, Kustomize and Ansible · jsonnet and Nix · Terraform |
| Crane on site | a file that's being edited heavily right now |
| Ruin | a file nobody has touched in over two years |
| Flash on a roof | touched by the commit now playing |
Drag to pan and scroll to zoom. The biggest districts carry signposts with their folder's name, and more appear as you zoom in. Hover a building to see its file and light up its whole district, and click it to light up its imports. The timeline under the city shows how busy each stretch of history was: click or drag it to jump, Space plays or pauses, ← → step. The signpost button (or L) hides the names for a clean view. The builder button (or B) lists who built the city, each with the number of buildings they put up (a file's builder is whoever added it), and picking one lights up their buildings; the address then carries ?by= with their name, so the link shows them too. Esc clears the selection.
The share button makes something to post, drawn in your browser:
A card: the finished city with its name, what it's built like and why, its history and its numbers. Landscape for X and LinkedIn, square, or a story; with the details, or full bleed with just a name tag. Every art pixel is a 2×2 block, so it stays sharp after a social network recompresses it.
A GIF or a video of the city growing: a GIF of about 800 pixels that fits in a chat, or an MP4 in 1080p, square or vertical.
A README badge, in three looks, with the Markdown to copy:
[](https://gitropolis.dev/OWNER/REPO)
A gitropolis.dev/owner/repo link shows its city's card when you paste it into X, Slack, Discord or LinkedIn.
npx gitropolis . --gif city.gif --static --duration 10
This films the city growing along its git history and writes a GIF that fits GitHub's 10 MB limit. Pixel art compresses well, and every GIF pixel is a whole art pixel, so nothing is blurred. Drop --static and the camera dives into the busiest junction instead. Use --video city.mp4 for an MP4, --still city.png for a single frame, or --card card.png for a share card with the repo's name and what city it's built like.
Filming runs in headless Chrome, so it looks the same on every machine. It needs ffmpeg and Chrome, Chromium, Edge or Brave.
| Option | Default | |
|---|---|---|
--city <plan> | auto | farm desert capital mountain university port industrial science themepark resort smalltown manhattan hongkong tokyo la paris venice barcelona |
--style <look> | pixel | maquette plan nocturne are smooth-shaded alternatives |
--pixel <n> | 1 | size of one art pixel, in screen pixels (2 for chunkier art) |
--zoom <n> | 1 | close-up factor; 3 frames the city centre |
--gif <file> · --video <file> | film the city's history | |
--still <file> | one frame (--shot hero|aerial|street|plan, --no-hud) | |
--card <file> | a share card PNG (--shape landscape|square|story, --full for full bleed) | |
--static | hold the establishing shot while filming | |
--duration <s> · --fps <n> · --size <WxH> | 20 · 30 · 1920x1080 | |
--max-mb <n> | 9.5 | size cap for GIF and MP4 |
--headed | film in a visible browser tab | |
--port <n> · --no-open | 4173 | |
--out <file> | write the scanned city as JSON and exit | |
git ls-files, a regex import pass for JS/TS, Python, Go, Rust, Java, Kotlin, C/C++ and Dart (including workspace packages), and a pass over git log --raw that follows renames (including the moves git doesn't pair, like a foo.js ported to foo.ts) and keeps the files deleted along the way. Infrastructure as code is read too, when a repo has enough of it: Terraform module sources, jsonnet imports, Kustomize resources, Helm values and Ansible roles all count as links. So does prose in a docs site or a book: Markdown links between pages. Notebooks are read cell by cell (their imports count too), and datasets and model weights by their size.Streets come from a distance field around the blocks, and cars, buses and boats follow lanes that stay on land or water.
web/vendor) and the captions fall back to system fonts.npx gitropolis on your own copy.gitropolis.dev is this repo's web/ folder on Cloudflare: a Worker in front, a few containers that clone and scan, and R2 keeping every city by commit. It's all in deploy/cloudflare.
Bug reports, repos that come out looking wrong, and ideas for new city types are all welcome. See CONTRIBUTING.md for running gitropolis from a checkout and checking a change.
MIT for the code. The gitropolis name and logo aren't covered by the license: please don't use them for your own copy of the site or the tool.
--bench| print setup and frame timings |