# px0: a read-only browser IDE for reviewing agent-generated code

> px0 is a single static Go binary that serves a read-only code viewer on localhost, with symbol search, grep and optional LSP navigation. It is fast and small, but its limits are deliberate: no edits, no writes, no build system.

**px0-ai/px0** — px0 is a fast, lightweight, read-only IDE designed for instant code navigation and review in your browser. Booting in under 1 ms and using ~20 MB of RAM, it turns your browser into a zero-latency inspection console with symbol-level navigation, deep search, and syntax highlighting across massive codebases.

- Repository: https://github.com/px0-ai/px0
- Website: https://px0.ai/
- Stars: 1,729 · Forks: 221
- Language: JavaScript
- License: MIT
- Published: 2026-09-14 · Updated: 2026-09-14 · Language: en
- Canonical page: https://hysenlabs.com/projects/px0-ai-px0

## The review problem px0 was built around

The README makes an argument before it makes a feature list. Code generation increasingly happens in the terminal, driven by coding agents, CLI tools and background orchestrators. The developer's job shifts toward verification: inspecting diffs, checking symbol references, tracing definitions, sanity-checking architecture. For that job, launching a heavy desktop IDE is disproportionate.

px0 targets exactly that gap. It is a read-only IDE that runs in your browser, boots in under 1 ms according to the README, and uses roughly 20 MB of RAM. The audience is narrow and specific: people who read code more than they type it. If you spend your day writing new modules by hand, the read-only constraint will frustrate you quickly. If you spend it reviewing what an agent produced at 2 a.m., the constraint is the point.

## One static binary, a local server, and a virtual DOM

The architecture is visible in the repository layout. main.go, server.go and ui.go sit next to search.go, symbols.go, highlight.go and index.go, with a web/ directory for the browser assets. The Makefile's build target first runs make web, which invokes node ./scripts/build-web.js to bundle JS, CSS and themes, then compiles with go build -trimpath -ldflags="-s -w" -o px0 . The result is a single static binary embedding HTML, CSS and JS, with no runtime dependencies and no Electron.

Syntax highlighting comes from Chroma (github.com/alecthomas/chroma/v2), which the README describes as native tokenization for about 280 languages. Markdown rendering uses goldmark. On the browser side, the README states that opening a 400,000-line file costs the same as a 10-line file because only visible lines render.

LSP support is optional and lazy. px0 ships no language server. It detects servers on PATH or in usual install folders, and the README says servers are spawned on first request for a file type and shut down on exit. When no server is found, the outline falls back to regex parsing. That fallback is the honest part of the design: navigation quality degrades, but the tool still works.

## Installing px0 and opening a repository

On macOS, Linux and BSD the README gives a one-line installer that fetches the latest release:

```bash
curl -fsSL https://px0.ai/install.sh | bash
```

Piping a remote script into a shell is a decision, not a formality. If you would rather not, build from source. The README states Go 1.24 or newer is required, and go.mod declares go 1.25. No npm, node, CGO or system libraries are needed for the binary itself.

```bash
git clone https://github.com/px0-ai/px0.git
cd px0
make build
sudo install px0 /usr/local/bin/
```

The make build step also bundles the web assets, so the binary is self-contained when it finishes. For binaries across the 15 supported OS and architecture combinations, the README points to make dist or ./build.sh.

Once installed, run px0 from the repository you want to inspect. The README documents three navigation bindings: Cmd/Ctrl+P for fuzzy file search, Cmd/Ctrl+Shift+O for document symbols, and Cmd/Ctrl+Shift+F for a full project regex scan. In a git repository the file tree badges files by status (M, A, D, U, R), a changed-only filter hides clean files, and Cmd/Ctrl+D opens a diff against HEAD in split or unified view. Two flags switch features off: px0 -no-git and px0 -no-lsp.

## Where the read-only model breaks down

The most obvious limitation is in the name. There is no editing, no saving, no refactoring, no terminal, and no build integration. If your review turns into a fix, you leave px0 to make it. That is a real context switch, and for small changes it may cost more than the startup time px0 saves.

LSP behaviour is the second constraint. Semantic Go-to-Definition, hover types and cross-references depend on a server being installed and detected. The README is explicit that px0 does not ship one. Where a language has several candidates, the first found in the documented order wins, which means your environment decides your navigation quality. The README also notes that ruff is detected for Python but gives no call trails, so "an LSP is installed" and "you get full navigation" are not the same statement.

Git awareness is disabled with -no-git or when git is absent, and the diff view compares against HEAD only. The README does not document comparing arbitrary revisions, so reviewing a range of commits is not something the tool claims to do. Finally, the interface is a browser page served locally. On a headless remote host, you need to think about how that port reaches you; the README does not cover remote access.

## px0 compared with ripgrep plus an editor

The realistic alternative is not another IDE. It is the combination most engineers already have: ripgrep for search, plus whatever editor or pager they use for reading. ripgrep is faster to invoke for a single pattern and needs no server, but it returns text matches with no symbol model, no syntax highlighting, no git status badges and no diff view. You read results in a terminal, not in a navigable tree.

The difference in approach matters. ripgrep answers one query at a time and forgets. px0 keeps a browser session open with an indexed view of the project, so fuzzy file search, symbol outlines, regex scans and diffs are all reachable without leaving the page. The trade is a running process and a browser tab. If you want a single answer to a single question, ripgrep is the smaller tool. If you are spending an hour auditing an unfamiliar repository, the persistent session is the better shape.

## Maintenance, releases and the MIT licence

The last push to the repository was on 2026-09-14, the same day v0.1.2 was released. v0.1.1 and v0.1.0 both landed on 2026-09-13. The project is not archived. Three releases inside two days is a young version line, and the README itself still trails off mid-sentence in the LSP setup section, which is a fair signal of how much polish to expect.

Upgrade cost is low by design. The install script upgrades to the latest release in one command, and the repository contains update.go and update_integration_test.go, so self-update is part of the codebase. Building from source requires a Go toolchain but no npm install for the binary; the web bundling step does call node through scripts/build-web.js, which is worth knowing if you build in a minimal container.

The licence is MIT. That permits commercial use, modification and redistribution with the licence text and copyright notice retained. This is not legal advice; if you embed px0 in a product, read LICENSE and your own obligations. The Makefile also references an optional POSTHOG_KEY build variable passed through LDFLAGS, and the repository contains telemetry.go. The README states the binary has no cloud phone-homes, so if telemetry matters to you, check that file and the build flags rather than assuming either way.

## Conclusion

Adopt px0 if your work is inspection: reviewing diffs from coding agents, tracing symbol references, or auditing a large repository you did not write. Do not adopt it as a replacement for an editor, because it cannot modify files, and do not expect it to work without a browser. Before relying on it, verify two things in your own environment: that the language servers you need are on PATH or in the folders px0 scans (~/go/bin, ~/.cargo/bin, ~/.local/bin, npm's global folder, Homebrew's folders), and that px0 -no-git and px0 -no-lsp behave as you want in repositories where those features add noise. The project is at v0.1.2 as of 2026-09-14, so treat the CLI flags and the LSP auto-detection list as moving parts.

## FAQ

### What is px0?

px0 is a fast, lightweight, read-only IDE for instant code navigation and review in your browser. It is distributed as a single static Go binary that embeds its HTML, CSS and JS, and it targets reviewing code rather than writing it.

### Does px0 support Python?

Yes, for reading. The README lists pyright, pylsp and ruff as detected Python language servers, with quick install commands such as npm install -g pyright or pipx install python-lsp-server. It notes that ruff is detected but gives no call trails, so it is the weaker option for cross-references.

### Can I edit files in px0?

No. px0 is read-only by design, including its git diff view, and the README frames it as a window into a codebase for review, navigation and audit rather than an editing environment.

## Sources

- [License: MIT](https://github.com/px0-ai/px0/blob/master/LICENSE)
- [Project website](https://px0.ai/)
- [px0-ai/px0 on GitHub](https://github.com/px0-ai/px0)
- [README](https://github.com/px0-ai/px0/blob/master/README.md)
- [Releases](https://github.com/px0-ai/px0/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/px0-ai-px0
