尚未检测到更新。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 |