px0 v0.1.8quick fast code reviewsnative git & githubopen source

// the IDE for humans and AI.

Review code.
Damn fast.

px0 is the IDE for humans and AI, optimized for quick, fast code reviews. With native Git and GitHub integrations, open any PR URL directly, review scoped merge-base diffs, draft inline comments, and commit or push fixes back in place. Connected directly to your local coding harnesses (Claude Code, Gemini, Cursor, and more), px0 turns code reviews and agent edits into a zero-latency loop.

Supported harnesses:
Claude CodeGemini CLICursor AgentAntigravityOpenCodeOpenAI CodexAiderGoose
cold start
<1ms
sub-millisecond instant boot
resident memory
20MB
VS Code on the same tree: ~1,440 MB
fuzzy find
6.0ms
linux kernel, 95,710 files
languages
~280
tokenized natively by Chroma
themes
14
one CSS file each
runtime deps
0
no Electron, no Node, no CGO
~/workspace/kernel · 95,710 files
127.0.0.1:7777
225 for (;;) {
226 size_t b, c, d;
227
228 if (a) /* Building heap: sift down a */
229 a -= size << shift;
230 else if (n > 3 * size) { /* Sorting: Extract two largest elements */
231 n -= size;
232 do_swap(base, base + n, size, swap_func, priv);
233 shift = do_cmp(base + size, base + 2 * size, cmp_func, priv) <= 0;
234 a = size << shift;
235 n -= size;
236 do_swap(base + a, base + n, size, swap_func, priv);
237 } else { /* Sort complete */
238 break;
239 }
240
241 /*
242 * Sift element at "a" down into heap. This is the
243 * "bottom-up" variant, which significantly reduces
244 * calls to cmp_func(): we find the sift-down path all
245 * the way to the leaves (one compare per level), then
246 * backtrack to find where to insert the target element.
247 *
248 * Because elements tend to sift down close to the leaves,
249 * this uses fewer compares than doing two per level
250 * on the way down. (A bit more than half as many on
251 * average, 3/4 worst-case.)
252 */
253 for (b = a; c = 2*b + size, (d = c + size) < n;)
254 b = do_cmp(base + c, base + d, cmp_func, priv) > 0 ? c : d;
255 if (d == n) /* Special case last leaf with no sibling */
256 b = c;
257
258 /* Now backtrack from "b" to the correct location for "a" */
259 while (b != a && do_cmp(base + a, base + b, cmp_func, priv) >= 0)
260 b = parent(b, lsbit, size);
Search Ctrl Shift FDiff Ctrl DAgent: agy (gemini-3.6-flash-low)357 linesclangdCPU 0.0% · RAM 55 MB
01/cases

Fast code reviews. Connected to harnesses.

Built from the ground up for speed: instant PR checkouts, native Git operations, and seamless handoff to your AI coding harnesses.

01fast pr reviews

Quick, Fast PR Code Reviews

Paste any GitHub PR URL to review scoped merge-base diffs, draft line comments with Alt+R, and submit formal approvals or batch changes without waiting for heavy IDEs.

quick, fast pr code reviews
$ px0 https://github.com/owner/repo/pull/123
→ opened PR #123 in 12 ms · ephemeral worktree ready
$ # drafted 2 inline comments · Alt+R
 submitted review with Approve to GitHub
launch from urlpx0 <pr-url>
line commentsAlt R
merge-base diffCtrl D
02agent harnesses

Connecting to Coding Harnesses

Select code in px0 or review comments and dispatch directly to Claude Code, Gemini CLI, Cursor Agent, Antigravity, OpenCode, Codex, Aider, or Goose with live reloading.

connecting to coding harnesses
px0: Batch Apply (2 review comments)
→ dispatched to claude-haiku runner
 3 files refactored · tabs reloaded in place
git panel: Commit with AI & push to PR branch
batch apply1-click
inline editAlt E
harness reloadinstant
03massive repos

Auditing Large Repositories

Read through massive, 50,000+ file codebases on a laptop without background indexers hogging RAM or spinning up fans.

auditing large repositories
$ px0 ~/src/linux
indexed 95,710 files in 370 ms · RSS 20.4 MB
$ # fuzzy search in 6 ms · CPU < 1%
 smooth scrolling across million-line trees
linux kernel95,710 files
index time370 ms
idle memory~20 MB
04zero-ssh remote

Remote & Cloud Server Inspection

Spin up on any remote server, VM, or CI runner and browse the codebase instantly from your local browser: no SSH keys, no port forwarding hassle, and no heavy remote desktop daemons.

remote & cloud server inspection
runner@ci-box:~/repo$ px0 -host 0.0.0.0 -no-open
listening on http://10.0.4.12:7777
local-laptop:~$ open http://dev-runner:7777
 connected directly from local browser
setup requiredzero
port forwardnone
transportHTTP / TLS
02/bench

Measured, not claimed.

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.

multi-editor benchmark · identical hardware (Linux)Sub-20 MB resident
editorprocess archmemory (rss)time to openfirst interact
px01 process (native Go)~15 - 18 MB~10 ms~15 ms
Vim1 process~10 - 15 MB~15 ms~15 ms
Neovim1 process~10 - 20 MB~150 ms~150 ms
Sublime Text2-4 processes (C++)~100 - 250 MBGUI dep.~250 - 500 ms
Zed1-3 processes (Rust)~200 - 450 MBGUI dep.~300 - 600 ms
VS Code12 - 15+ processes~1,100 - 1,440 MB~3.0 - 5.0 s~6.0 - 10.0 s
Note: CLI editors (Vim/Neovim) do not provide inline LSP out-of-the-box natively. Zed and Sublime Text evaluated as active GUI configs. VS Code memory heavily depends on active extensions.
real corpus · px0 standalonesorted by files indexed
repolangsourcefilesindexfuzzyfull scanopen bigreopenrsspeak
flaskPython3 MB2351 ms0.8 ms2.3 msn/an/a16 MB18 MB
redisC26 MB1,85513 ms1.0 ms18.2 ms80.8 ms1.2 ms17 MB27 MB
djangoPython74 MB7,01439 ms1.3 ms26.8 ms166.8 ms1.0 ms20 MB29 MB
reactJavaScript63 MB7,17852 ms2.7 ms32.2 ms57.7 ms0.7 ms21 MB28 MB
kubernetesGo370 MB25,926150 ms13.5 ms84.6 ms199.0 ms0.9 ms30 MB44 MB
typescriptTypeScript414 MB66,533566 ms6.2 ms150.3 ms40.9 ms6.5 ms69 MB105 MB
linuxC1,809 MB95,710370 ms6.0 ms451.8 ms26.7 ms0.6 ms55 MB73 MB
full scan searches for a string that matches nothing, so every indexed byte is read. the worst case.open big is the largest source file, cold. file length does not matter: only the visible window is lexed.
linux kernel · rss across a session−37 MB after idle

px0 reclaims memory after 15 s of inactivity, so an open session settles back down.

language server path · goplsserver ready 374 ms, paid once
document outline1.4 ms
go to definition1.5 ms
find all references3.0 ms
hover5.1 ms
px0 memory18 MB
gopls memory122 MB

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.md
03/features

Built for review. Engineered for speed.

The code review, Git inspection, and AI harness tools you reach for a hundred times a day, done in milliseconds, in a UI that renders only the lines you can see.

f.01navigate

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.

CtrlPgo to file1.3 ms
CtrlShiftOsymbols
CtrlShiftFregex scan26.8 ms
timings: django, 7,014 files
f.02git & github

GitHub PR review & Git panel

Pass any PR URL to review merge-base diffs, draft inline comments (Alt+R), and run 1-click batch AI edits. Stage per-file ticks, commit with AI, and push straight back to PR branches.

PR #123 (open)A provider.goM token.go 💬1
token.go (diff vs merge-base)Alt+R
39- return os.Getenv("GITHUB_TOKEN")
39+ if tok := cfg.GitHubToken; tok != ""
f.03batch agent edit

Batch inline agent editing

Stage multiple selection comments across files with Alt+E, review unified batch controls, and apply all edits at once with Mod+Enter. Live Git status sync highlights touched tabs instantly.

Batch Edit2 commentsMod+Enter Apply All
claudehaiku@fuzzy.go:64-70
"simplify score penalty calculation"
claudehaiku@status.go:18-22
"format batch elapsed timer"
f.04selection

Classic text & diff selection

Full Shift and Ctrl keyboard selection across lines, words, and pages. Select code inside side-by-side or unified diffs, right-click for instant actions, or copy standardized @path:l1-l2 snippets.

182func diffSelection(sel) Range {
183 return anchorWorkingTree(sel)
Alt+C copy refAlt+A copy for agentAlt+E edit
f.05markdown & images

Rendered GFM & image tabs

Full GitHub Flavored Markdown with syntax-highlighted code fences and bi-directional scroll sync. Inspect images with zoom/pan, contrast modes (b), pixelated toggle (p), and lightbox.

PreviewSourceImage TabAltM
# Architecture Deep Dive

Windowed tokenizing with Chroma...

🖼icon.svg · 512×512 px [b: checker | p: pixelated]
f.06render

Virtual rows

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.

400,000 lines in file~60 DOM rows0.015% mounted
f.07highlight

~280 languages

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.

gorusttypescriptpythoncc++zigluarubyjavakotlinswifthaskellocamlelixirsqlyamltomlnixbashprotobufhcl+ ~258
f.08lsp · optional

Semantic when you want it

Zero-config detection on $PATH and standard binary folders. Spawned lazily on first request, stopped on exit. Click the status bar hint for automatic installation recipes.

  • gopls
  • rust-analyzer
  • typescript-language-server
  • pyright · ruff
  • clangd
  • zls
  • lua-language-server
  • solargraph
  • jdtls
  • omnisharp
  • texlab
f.09remote

Remote-first & zero SSH

Spin up on cloud VMs, Docker containers, or CI runners with -host 0.0.0.0. Browse in your local browser over Tailscale or WireGuard with zero remote extension daemons and strict DNS rebinding checks.

$ px0 -host 0.0.0.0 -port 7777 ~/work
listening on: http://10.0.4.12:7777
sandboxing:   path traversal + DNS guards
f.10themes

14 built in

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.

f.11distribution

One static binary

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 · agent
├─ web/     html css js, ~74 KB
└─ themes/  14 × css
f.12memory

Gives memory back

After 15 seconds without requests, px0 automatically frees memory back to the kernel. A tab left open for the afternoon costs what an idle one should.

peak94 MB
30 s idle57 MB
linux kernel, after five full scans
04/remote

Remote code. No SSH required.

Spin up on any remote server, cloud instance, or runner in under a millisecond. Inspect and search remote codebases directly in your local browser without configuring SSH keys, forwarding ports through flaky sessions, or installing heavy remote desktop suites.

remote session architecture · zero-friction topology
HTTP / TLS · stateless stream
remote hostcloud / dev box
px0 process1 static Go binary
  • memory~20 MB idle
  • startup< 1 ms
  • scavengerfrees OS memory after 15s
  • accesssecure & sandboxed
your machineany browser
zero-install UIlaptop · tablet · mobile
  • client footprint0 npm / 0 extensions
  • fuzzy findcached in-browser
  • syntax highlightingpre-rendered Chroma
  • diffs vs HEADinstant Myers viewer
common remote workflowsARCHITECTURE.md →
dev box / cloud vm
$ px0 -host 0.0.0.0 -port 7777 ~/work/repo
Instant access over private network / Tailscale
headless ci / test runner
$ px0 -no-open -port 8080 /workspace
Inspect failed build workspaces in any web browser
ephemeral docker / pod
$ docker run -p 7777:7777 -v $(pwd):/src px0:latest
Browse isolated containers without container shells
01NO DAEMON

Zero SSH or heavy client setup

No X11, no remote extension daemon

Remote code editors install gigabytes of node runtimes and background server processes on the remote machine. px0 runs as a single lightweight binary, serving directly over HTTP without requiring you to maintain SSH shell sessions.

02-host 0.0.0.0

Single port over any wire

Tailscale, wireguard, reverse proxy, or tunnel

Pass -host 0.0.0.0 or -port 7777 to bind the web console. Access from any browser on your laptop, iPad, or phone across your private VPN, Tailscale mesh, or Cloudflare Tunnel with pooled gzip compression.

03SANDBOXED

Sandboxed by architecture

Traversal guards & origin verification

Exploration is strictly sandboxed: safePath rejects directory traversal attempts, host header checks protect against DNS rebinding, and external stdlib jumps require explicit allowlisting. Agent editing is protected by origin verification: requests are accepted only when opened by IP address or localhost, and strictly refused through public tunnel hostnames.

05/git

Native GitHub integration. Review, comment, commit.

Pass any pull request URL directly to px0. Inspect merge-base diffs, draft inline comments, run one-click batch AI edits, stage per-file ticks, commit with AI, and push fixes straight back to the PR's own branch without leaving your browser.

● Openpx0-ai/px0 #123main ← auth-refactor
PR #123 · 3 files changed
  • internal/auth
  • token.go💬 1M
  • provider.go💬 1A
  • cmd
  • main.goM
Batch Apply (2)claude-haiku

Apply all drafted review comments across files with your local coding agent.

merge-baseinternal/auth/token.go+14 −3
AltR commentCtrlD diff
diff against merge-base (main @ 8f2a1c)@alice authored
3838 func ResolveToken(cfg Config) (string, error) {
39 return os.Getenv("GITHUB_TOKEN"), nil
39+ if tok := cfg.GitHubToken; tok != "" {
40+ return tok, nil
41+ if tok := os.Getenv("GITHUB_TOKEN"); tok != "" {
Draft Review Comment · line 41in-memory
Check if GH_TOKEN is also set before falling back to the gh CLI binary so standard environment variables take precedence.
Press Ctrl+Enter to save draft
4242 return tok, nil
4343 }
4444 return resolveGhCliToken()
Hover any gutter line for or select code & press AltRpush back to pr branch enabled
01px0 <pr-url>

Native GitHub PR Review

Scoped merge-base diffs from any URL

Pass any pull request URL to inspect diffs in an isolated ephemeral worktree. Full codebase navigation, symbols, definitions, and callers remain accessible with zero disk clutter.

02Alt+R · BATCH APPLY

Inline Comments & AI Apply

Draft review notes or let AI apply them

Hover any line or press Alt+R to draft inline review notes. Submit formal approvals to GitHub or click Batch Apply to dispatch all comments across the PR to your local AI coding agent.

03STAGE · COMMIT · PUSH

Sidebar Git Panel & AI Commits

Stage ticks, AI messages, and safe push

Stage per-file ticks in the tree, generate commit messages from staged diffs with AI, and push directly back to the PR head branch (including forks) without opening a terminal.

06/why

You need to view code. Fast.

Code 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.

  1. 01terminal

    drives generation

    Agents, harnesses, and orchestrators write the code, run the tests, and move the workflow along.

    agent 14 files changed
     212 tests passed
  2. 02you

    drive verification

    Follow symbol references, inspect git diffs, preview rendered docs, and check the architecture.

    Ctrl D diff vs HEAD  Alt M preview
    F12 definition  Shift F12 refs
  3. 03the old ide

    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
the IDE for humans and AI
  • +fuzzy file search, symbols, regex across the tree
  • +git awareness, change tree, and split/unified diffs vs HEAD
  • +rendered Markdown preview with live source switch
  • +go to definition, hover, find references (with an LSP)
  • +jump into stdlib and module-cache sources the server points at
  • +delegates edits to your coding agent (Claude, Gemini, Cursor, Antigravity, OpenCode, Codex, Aider, Goose)
  • +14 themes, word wrap, back and forward history
  • -no heavy editor or save button: edits go through your coding agent, never typed char-by-char
  • -no extension host, no plugin marketplace, no Electron
where it fits
  • verifying agent output open the worktree, trace references, dispatch fixes with Alt+E, close the tab
  • auditing a codebase read a 25,000-file monorepo on a laptop without the fans spinning up
  • remote boxes run on the server, tunnel one port, read in any browser
  • beside your editor keep vim or VS Code for the edits you still type
traditional IDE vs px0side-by-side
dimensiontraditional IDEpx0
built fortyping code character by character, hosting pluginshumans and AI: reading, exploring, diffing, and verifying code
base memory (rss)~1,440 MB~20 MB70x lighter
startup cpu spike35% - 50%< 1%
cold startseveral secondssub-millisecond
process tree15+ Node.js / Electron processes1 static Go binary
workspace indexingmulti-second background churn13 ms for redis, 370 ms for the linux kernel
setupconfig files, plugins, node, npmzero config, zero runtime
07/keys

Hands stay on the keyboard.

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.

shortcuts17 bindings
  • CtrlKuniversal palette, quick open
  • CtrlPgo to file
  • CtrlShiftPcommand palette
  • CtrlShiftOgo to symbol in file
  • CtrlShiftFsearch the whole workspace
  • CtrlFfind in active file
  • CtrlDtoggle git diff vs HEAD
  • Ctrl,open preferences & settings
  • AltEedit with coding agent on selection
  • AltCcopy reference (@path:l1-l2)
  • AltAcopy snippet for agent
  • AltMtoggle Markdown preview / source
  • AltShiftHcall trail (callers / callees)
  • F12/Ctrlclickgo to definition
  • ShiftF12find all references
  • Alt/Altback, forward through history
  • clickright-click selection actions menu
palette prefixesCtrl K
  • fileslspsrv→ lspservers.go
  • >commands>diff→ Toggle Git Diff
  • @symbols@score→ fuzzyScore
  • :line:120→ go to line 120
08/arch

One process. No runtime.

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.

browservanilla js
  • virtual rows ~60 nodes
  • fuzzy & tree cache
  • offscreen font measure
  • rAF-throttled paint
px0 · one go process~20 MB
routerHTTP · JSON · pooled gzip
git & github forgepr review, merge-base, stage & commit
index & treetree walk, .gitignore, status & diff
searchparallel worker pool
highlight & mdchroma LRU + goldmark GFM
lsp managerlazy spawn, regex fallback
agent dispatchharness runner, diff snapshots
hostyours
  • source tree + .gitignore
  • gopls · clangd · … on first use
  • stdlib & module cache allowlisted
git & github
worktree lifecycle
process-scoped os.MkdirTemp
diff calculation
merge-base against target branch
pull safety
fast-forward only, sentinel 409
review submission
fail-closed push access check
index
walk semaphore
NumCPU × 4
ignore rules
segment · suffix · path, regex last
dir symlinks
skipped, no cycles
startup
listen first, index in background
agent dispatch
harnesses
claude · gemini · cursor · agy · opencode · codex · aider · goose
overlap guard
disjoint lines run concurrent
snapshotting
mtime + size + git status diff
localPost guard
IP / localhost only, no tunnel domain
highlight
hlChunk
1,000 lines
hlContext
400 lines
hlWindowBytes
512 KB
bgLimit
2 MB exact pass
cacheBudget
512 MB LRU
search
fast reject
bytes.Contains on whole file
buffers
reused per worker
case fold
in-place ASCII lower
snipLead
32 runes
frontend
live rows
~60
OVERSCAN
24 rows
paint
requestAnimationFrame
measure
offscreen, sub-pixel ch
fuzzyScore() · weightsO(n) two-pass
query verbatim in basename+40
basename starts with query+20
start of a path or word+16
camelCase hump+14
inside the basename+14
consecutive run+12
exact case+4
gap between hits
−min(gap, 12)
path length
−len / 8
depth
−2 per /

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 →

08/partners

Adopting px0 across your engineering team?

If your engineers are actively using coding agents and looking for a fast, ultra-lightweight code reader and diff viewer to speed up verification, we would love to collaborate.

DESIGN PARTNERS
slack connect available
01

Instant Code Review

When agents generate large diffs across dozens of files, inspection speed is key. px0 starts in under 1ms with ~20 MB RAM, giving your team instant fuzzy search and split diffs.

02

Direct Line on Slack

Get a direct line with the core team on Slack or Slack Connect. We prioritize bug fixes, performance tuning, and integration with your specific agent toolchains.

03

Local & Secure by Default

px0 runs strictly locally on developer laptops or remote dev boxes. Zero telemetry, zero cloud dependencies, and zero risk of proprietary code leaking.

Best suited for teams with 10+ engineers or active agent workflows.Collaborate directly with us on Slack to shape a faster review workflow for your team.
Explore Design Partners