Playground — no install, no server

Index a repository in your browser

The real engine — the same walk, the same tree-sitter grammars, the same link-graph — compiled for the browser and run in a Web Worker.

Nothing is precomputed and no server of ours is involved: the file list comes straight from GitHub — or from a folder you open, which never leaves this tab — walk() decides which of those files are worth reading, and the index is built on your machine.

Repository

Try:
Indexed in this tab — nothing is uploaded, and there is no server of ours to upload it to.

What this page does

Where the bytes come from

Unlike the rest of this site, the playground makes external requests: one call to the GitHub trees API for the file list, one request per kept file from raw.githubusercontent.com, and the tree-sitter grammars from this origin.

It indexes the whole repository. walk() still drops what the engine would never index anyway — ignored directories, lockfiles, binaries, anything over 1 MiB — and the capped flag reports that nothing else was. A very large repository means thousands of requests and a lot of memory in the worker; bound it with ?files=500 or ?mb=5 on this page's URL. Enough requests in a row will trip GitHub's rate limit whatever you do — opening the folder locally is the way out that does not depend on the network at all, and it applies the very same walk() rules, so node_modules is never read rather than read and discarded.

The trees API allows 60 unauthenticated calls per hour per IP — one per repository loaded here. When it runs out the playground falls back to jsDelivr, which is unlimited but snapshots a branch rather than following its head, so its file list can lag by a few commits. The summary always names which one answered.