Fuzzy everything
Files, symbols, and a full-tree regex scan behind three chords. Ranking favours basenames, word boundaries, and camelCase humps, the way fzf feels.
// agents write the code. you verify it.
px0 is a read-only IDE for the AI-agent era. It turns your browser into an instant verification console for whatever your agents just wrote: symbol-level navigation, full LSP intelligence, and deep search. One binary, zero config. It starts in under 1 ms, idles at ~16 MB, and fuzzy-finds across the Linux kernel's 95,710 files in 6 ms.
Every number here comes from ./benchmark.sh against shallow clones of seven real repositories. Linux, language servers off, fastest of five requests. Run it on your machine and paste the table anywhere.
| repo | lang | source | files | index | fuzzy | full scan | open big | reopen | rss | peak |
|---|---|---|---|---|---|---|---|---|---|---|
| flask | Python | 3 MB | 235 | 1 ms | 0.8 ms | 2.3 ms | n/a | n/a | 16 MB | 18 MB |
| redis | C | 26 MB | 1,855 | 13 ms | 1.0 ms | 18.2 ms | 80.8 ms | 1.2 ms | 17 MB | 27 MB |
| django | Python | 74 MB | 7,014 | 39 ms | 1.3 ms | 26.8 ms | 166.8 ms | 1.0 ms | 20 MB | 29 MB |
| react | JavaScript | 63 MB | 7,178 | 52 ms | 2.7 ms | 32.2 ms | 57.7 ms | 0.7 ms | 21 MB | 28 MB |
| kubernetes | Go | 370 MB | 25,926 | 150 ms | 13.5 ms | 84.6 ms | 199.0 ms | 0.9 ms | 30 MB | 44 MB |
| typescript | TypeScript | 414 MB | 66,533 | 566 ms | 6.2 ms | 150.3 ms | 40.9 ms | 6.5 ms | 69 MB | 105 MB |
| linux | C | 1,809 MB | 95,710 | 370 ms | 6.0 ms | 451.8 ms | 26.7 ms | 0.6 ms | 55 MB | 73 MB |
px0 reclaims memory after 15 s of inactivity, so an open session settles back down.
Servers are separate processes, spawned on the first request for their language and shut down on exit. Without one, px0 falls back to a regex outline instantly.
$ ./benchmark.sh --clone && ./benchmark.shmethodology → BENCHMARKS.mdCode now arrives from the terminal, not the keyboard. What is left for you is review, audit, and navigation, and that job needs one thing done exceptionally well: a zero-latency, distraction-free place to read, explore, and verify. Not an editor that takes seconds to boot and gigabytes to idle.
drives generation
Agents, harnesses, and orchestrators write the code, run the tests, and move the workflow along.
agent 14 files changed ✓ 212 tests passed
drive verification
Follow symbol references, read the surrounding context, and check the architecture the change landed in.
F12 definition Shift F12 refs Ctrl Shift F every call site
is overkill
Booting an Electron suite with an extension host and a gigabyte-plus heap just to read agent output.
1,440 MB rss, 15+ processes 4 - 10 s to index the workspace
| dimension | traditional IDE | px0 |
|---|---|---|
| built for | typing code character by character, hosting plugins | reading, exploring, and verifying code |
| base memory (rss) | ~1,440 MB | ~16 MB80x to 90x lighter |
| startup cpu spike | 35% - 50% | < 1% |
| cold start | several seconds | sub-millisecond |
| process tree | 15+ Node.js / Electron processes | 1 static Go binary |
| workspace indexing | multi-second background churn | 13 ms for redis, 370 ms for the linux kernel |
| setup | config files, plugins, node, npm | zero config, zero runtime |
The navigation you reach for a hundred times a day, done in milliseconds, in a UI that renders only the lines you can see.
Files, symbols, and a full-tree regex scan behind three chords. Ranking favours basenames, word boundaries, and camelCase humps, the way fzf feels.
Native tokenizing through Chroma. The server lexes a 1,000-line window padded with 400 lines of context, never the whole file, and caches rendered HTML under a 512 MB LRU budget.
Opening a 400,000-line file costs the same as a 10-line one. Only the visible window plus 24 rows of overscan is mounted; scrolling recycles rows with a single transform.
Zero-config detection of servers on your $PATH. Spawned lazily on first request, stopped on exit. Missing or crashed? Instant regex outline instead.
Tokyo Night by default, plus Paper, Catppuccin, Dracula, GitHub Dark, Gruvbox, Monokai, Nord, One Dark, Rose Pine, and Solarized. A theme is one CSS file of tokens.
HTML, CSS, and JS are embedded with go:embed. No Electron, no Node, no CGO, no system libraries. Copy it to a box and run it.
px0 static, go:embed ├─ index · search · highlight · lsp ├─ web/ html css js, ~74 KB └─ themes/ 14 × css
After 15 seconds without requests, px0 reclaims memory. A tab left open for the afternoon costs what an idle one should.
A Go server that owns indexing, search, highlighting, and language servers, talking JSON to a zero-dependency ES module frontend. The speed comes from a pile of small, boring decisions.
Pass one proves every query rune is present. Pass two walks back from the last hit to pull matches as tight as possible. The same ranking feel as a dynamic program, in a linear scan. ARCHITECTURE.md →
The chords you already know from your editor, plus one palette that switches mode on its first character. Press ? inside px0 for the full sheet.
lspsrv→ lspservers.go>wrap→ Toggle Word Wrap@score→ fuzzyScore:120→ go to line 120px0 starts the local viewer, prints the URL, and opens your browser while the index builds in the background. Multiple instances walk forward to the next free port.
$ px0 ~/src/linux px0 0.1.0 workspace: /home/you/src/linux url: http://127.0.0.1:7777 ctrl-c to stop ✓ indexed 95710 files 370ms · language servers: clangd (started on first use) $ px0 -version px0 0.1.0 (linux/amd64) $ px0 -no-open -port 0 ~/src/api | cat ... [OK] indexed 1855 files 13ms
| flag | default | does |
|---|---|---|
| -port N | 7777 | port to listen on (0 picks an ephemeral free port) |
| -host H | 127.0.0.1 | local address to bind |
| -no-open | false | do not launch the browser |
| -no-lsp | false | skip language servers, use the regex outline |
| -no-color | false | strip ANSI escape sequences |
| -quiet | false | suppress narration, errors still go to stderr |
| -update | false | check for and install the latest release |
| -version | false | print version and architecture, then exit |
Install, point it at a repository, and read. Language servers are optional and picked up from your $PATH whenever they exist.
Installs or upgrades to the latest release.
latest/usr/local/bin or ~/.local/bin$ sudo install px0-0.1.0-darwin-arm64 /usr/local/bin/px0GitHub releases →git clone https://github.com/px0-ai/px0.git cd px0 make build sudo install px0 /usr/local/bin/
No npm, no node, no CGO, no system libraries. make dist cross-compiles all 15 targets.
| language | server | install |
|---|---|---|
| Go | gopls | |
| Rust | rust-analyzer | |
| TypeScript / JavaScript | typescript-language-server | |
| Python | pyright or ruff | |
| C / C++ | clangd | |
| Zig | zls | |
| Lua | lua-language-server | |
| Ruby | solargraph |