px0 (Website)

TLDR AI Tools

Summary

px0 is a fast, lightweight, read-only IDE designed for the AI-agent era, offering instant verification of code with minimal resources like sub-millisecond boot and low memory usage.

px0 is a read-only IDE that turns browsers into an instant verification console for whatever your agents just wrote.
Original Article
View Cached Full Text

Cached at: 09/14/26, 02:21 PM

# px0: a fast, lightweight, read-only IDE Source: [https://px0.ai/](https://px0.ai/) **px0**v0\.1\.2read\-only ide for the ai\-agent erasingle static go binarymit //agents write the code\. you verify it\. ## When all you want isspeed\. 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**~20 MB**, and fuzzy\-finds across the Linux kernel's**95,710 files in 6 ms**\. cold start<1mssub\-millisecond instant bootresident memory20MBVS Code on the same tree: ~1,440 MBfuzzy find6\.0mslinux kernel, 95,710 fileslanguages~280tokenized natively by Chromathemes14one CSS file eachruntime deps0no Electron, no Node, no CGO ~/src/px0 · fuzzy\.go 127\.0\.0\.1:7777 50// Collected right\-to\-left; flip in place\. 51fori,j:=0,len\(pos\)\-1;i<j;i,j=i\+1,j\-1\{ 52pos\[i\],pos\[j\]=pos\[j\],pos\[i\] 53\} 54 55score,prev:=0,\-2 56fork,i:=rangepos\{ 57ifi==prev\+1\{ 58score\+=12// consecutive run 59\}elseifk\>0\{ 60score\-=min\(i\-prev,12\)// gap penalty, bounded 61\} 62ifi\>=e\.nameStart\{ 63score\+=14// basename beats directory noise 64\} 65ifi==0\|\|isBoundary\(p\[i\-1\]\)\{ 66score\+=16// start of a path or word segment 67\}elseifp\[i\]\>='A'&&p\[i\]<='Z'&&p\[i\-1\]\>='a'&&p\[i\-1\]<='z'\{ 68score\+=14// camelCase hump 69\} 70ifp\[i\]==q\[k\]\{ 71score\+=4// exact case 72\} 73prev=i 74\} 75// Prefer the shallower, shorter of two otherwise\-equal paths\. 76score\-=len\(p\)/8 77score\-=strings\.Count\(p,"/"\)\*2 78ifidx:=strings\.Index\(e\.lower\[e\.nameStart:\],q\);idx\>=0\{ 79score\+=40// whole query appears verbatim in the basename 80ifidx==0\{ 81score\+=20 82\} 83\} 84returnscore,pos,true 85\} 14 themes 01/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\. resident memory · same workspace · linear scale**~90x**lighter VS Code15\+ processes ~1,440 MB 1. *1*extension host**~500 MB** 2. *2*language server**~350 MB** 3. *3*server main**~260 MB** 4. *4*IPC proxies & utility**~190 MB** 5. *5*PTY host & terminal**~71 MB** 6. *6*file watcher**~68 MB** real corpus · px0 standalonesorted by files indexed repolangsourcefilesindexfuzzyfull scanopen bigreopenrsspeakflaskPython3 MB2351 ms0\.8 ms2\.3 msn/an/a16 MB18 MBredisC26 MB1,85513 ms1\.0 ms18\.2 ms80\.8 ms1\.2 ms17 MB27 MBdjangoPython74 MB7,01439 ms1\.3 ms26\.8 ms166\.8 ms1\.0 ms20 MB29 MBreactJavaScript63 MB7,17852 ms2\.7 ms32\.2 ms57\.7 ms0\.7 ms21 MB28 MBkubernetesGo370 MB25,926150 ms13\.5 ms84\.6 ms199\.0 ms0\.9 ms30 MB44 MBtypescriptTypeScript414 MB66,533566 ms6\.2 ms150\.3 ms40\.9 ms6\.5 ms69 MB105 MBlinuxC1,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\. 02/why ## Agents write\.*You verify\.* 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 ``` read\-only is the feature - \+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 - \+14 themes, word wrap, back and forward history - \-no write endpoints: the HTTP API reads, searches, and asks language servers - \-no extension host, no plugin marketplace, no Electron - \-no telemetry\. the one outbound call is a daily release check to GitHub - \-binds 127\.0\.0\.1 unless you pass \-host where it fits - **verifying agent output**open the worktree, trace the references, 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 IDEpx0built fortyping code character by character, hosting pluginsreading, exploring, diffing, and verifying codebase memory \(rss\)~1,440 MB~20 MB70x lighterstartup cpu spike35% \- 50%< 1%cold startseveral secondssub\-millisecondprocess tree15\+ Node\.js / Electron processes1 static Go binaryworkspace indexingmulti\-second background churn13 ms for redis, 370 ms for the linux kernelsetupconfig files, plugins, node, npmzero config, zero runtime 03/features ## Everything for reading\.*Nothing else\.* The navigation you reach for a hundred times a day, done in milliseconds, in a UI that renders only the lines you can see\. **f\.01**navigate ### 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\. CtrlP*go to file***1\.3 ms** CtrlShiftO*symbols* CtrlShiftF*regex scan***26\.8 ms** timings: django, 7,014 files **f\.02**git & diff ### Status badges & visual diffs Working\-tree status badges \(M, A, D, U\) in the file tree, dirty ancestor paths, and a changed\-only filter\. Toggle side\-by\-side or unified diffs vs HEAD with Ctrl\+D\. web/srcA markdown\.jsM fuzzy\.go fuzzy\.go \(diff vs HEAD\)Ctrl\+D 64\- score \-= len\(p\) / 4 64\+ score \-= len\(p\) / 8 **f\.03**markdown ### Rendered GFM preview Full GitHub Flavored Markdown and footnotes rendered via goldmark with Chroma\-highlighted code fences\. Switch preview and source with Alt\+M while locking scroll position\. PreviewSourceAltM \# Architecture Deep Dive Windowed tokenizing with Chroma\.\.\. `func FuzzyFind\(\)` **f\.04**render ### 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 rows**0\.015%**mounted **f\.05**highlight ### ~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\.06**lsp · optional ### Semantic when you want it Zero\-config detection of servers on your`$PATH`\. Spawned lazily on first request, stopped on exit\. Missing or crashed? Instant regex outline instead\. - gopls - rust\-analyzer - typescript\-language\-server - pyright · ruff - clangd - zls - lua\-language\-server - solargraph **f\.07**themes ### 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\.08**distribution ### 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 ├─ web/ html css js, ~74 KB └─ themes/ 14 × css ``` **f\.09**memory ### Gives memory back After 15 seconds without requests, px0 reclaims memory\. A tab left open for the afternoon costs what an idle one should\. peak**94 MB** 30 s idle**57 MB** linux kernel, after five full scans 04/git ## Working tree in view\.*Diff against HEAD\.* When AI agents and orchestrators write code, your workflow shifts from typing to verification\. px0 tracks git status, bubbles changes through directories, and renders side\-by\-side split or unified diffs in milliseconds\. git awareness · tree status & diff viewer HEAD: clean ·**4 uncommitted changes** - ▸\.github - ▸docs - ▾internal - fuzzy\.goM - git\.goA - markdown\.goA - search\.go - ▾web - diff\.jsA - main\.js - go\.mod - README\.md **M**modified**A**added**D**deleted**U**untracked**R**renamed HEAD \(committed\)r\.64 61ifdist \> 1 \{ 62// penalize distance 63−score \-= len\(p\) / 4 64\} 65returnscore Working Tree \(modified\)M 61ifdist \> 1 \{ 62// penalize distance 63\+score \-= len\(p\) / 8 64\} 65returnscore PressAltMinside a Markdown file to switch between preview and sourcezero git subprocesses 01DIRTY BUBBLING ### Ancestor propagation #### Collapsed folders never hide edits When a deeply nested file changes, every parent directory in the path receives a dirty marker dot\. You never miss changes hiding inside collapsed folders\. 02Ctrl\+D ### In\-memory Myers diff #### Split and unified views vs HEAD Press Ctrl\+D on any file to inspect the diff against HEAD\. Additions and deletions render with line gutters and syntax highlighting intact\. 03FILTER CHORD ### Changed\-only filter #### Prune 50,000 files to the blast radius One click filters the entire tree down to only touched paths\. Audit an AI agent refactor or local test run without scrolling through clean directories\. 05/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 **router**HTTP · JSON · pooled gzip **index & git**tree, \.gitignore, status & diff **search**parallel worker pool **highlight & md**chroma LRU \+ goldmark GFM **lsp manager**lazy spawn, regex fallback **scavenger**reclaims memory after 15 s idle hostyours - source tree*\+ \.gitignore* - gopls · clangd · …*on first use* - stdlib & module cache*allowlisted* index walk semaphoreNumCPU × 4ignore rulessegment · suffix · path, regex lastdir symlinksskipped, no cyclesstartuplisten first, index in background highlight hlChunk1,000 lineshlContext400 lineshlWindowBytes512 KBbgLimit2 MB exact passcacheBudget512 MB LRU search fast rejectbytes\.Contains on whole filebuffersreused per workercase foldin\-place ASCII lowersnipLead32 runes frontend live rows~60OVERSCAN24 rowspaintrequestAnimationFramemeasureoffscreen, 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 / 8depth−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 →](https://github.com/px0-ai/px0/blob/master/docs/internals/architecture.md) 06/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\. shortcuts12 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 - AltMtoggle Markdown preview / source - F12/Ctrlclickgo to definition - ShiftF12find all references - hovertype signature and docs - Alt←/Alt→back, forward through history palette prefixesCtrlK - ∅files`lspsrv`→ lspservers\.go - \>commands`\>diff`→ Toggle Git Diff - @symbols`@score`→ fuzzyScore - :line`:120`→ go to line 120 07/cli ## Point it at a directory\.*That's the setup\.* `px0`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\. ~ · zsh ``` $ px0 ~/src/linux px0 0.1.2 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.2 (linux/amd64) $ px0 -no-open -port 0 ~/src/api | cat ... [OK] indexed 1855 files 13ms ``` flagsusage: px0 \[flags\] \[directory\] flagdefaultdoes\-port N7777port to listen on \(0 picks an ephemeral free port\)\-host H127\.0\.0\.1local address to bind\-no\-openfalsedo not launch the browser\-no\-lspfalseskip language servers, use the regex outline\-no\-gitfalsedisable git awareness \(tree status badges and diff view\)\-no\-colorfalsestrip ANSI escape sequences\-quietfalsesuppress narration, errors still go to stderr\-updatefalsecheck for and install the latest release\-version, \-vfalseprint version and architecture, then exit 08/install ## One binary\.*Pick a way in\.* Install, point it at a repository, and read\. Language servers are optional and picked up from your`$PATH`whenever they exist\. **a**· quick installmacos · linux · bsd Installs or upgrades to the latest release\. VERSIONpin a release, default`latest`INSTALL\_DIR`/usr/local/bin`or`~/\.local/bin` **b**· prebuilt binary15 targets darwinamd64arm64 linux386amd64armarm64riscv64 freebsdamd64arm64 openbsdamd64arm64 netbsdamd64 windows386amd64arm64 ``` $ sudo install px0-0.1.2-darwin-arm64 /usr/local/bin/px0 ``` [GitHub releases →](https://github.com/px0-ai/px0/releases) **c**· from sourcego 1\.24\+ ``` 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\. optional · language servers for go to definition, hover, referencesclick a command to copy languageserverinstallGogoplsRustrust\-analyzerTypeScript / JavaScripttypescript\-language\-serverPythonpyright or ruffC / C\+\+clangdZigzlsLualua\-language\-serverRubysolargraph $px0 Your codebase, open in the time it takes to read this line\. [Star on GitHub](https://github.com/px0-ai/px0)

Similar Articles

Pixcode

Product Hunt

Pixcode is a self-hosted control room for managing AI coding agents.

Free, open-source, 300k Lines of Code - Agentic IDE

Reddit r/openclaw

intentic is a free, open-source 'Agentic IDE' that lets you run AI coding agents (Claude Code, Codex, Grok, Kimi Code, Gemini) in isolated sandboxes on your own hardware, with a browser-based workspace, plan-and-review workflow, and MIT-licensed code.

Zero

Product Hunt

Vercel has released Zero, a new programming language designed specifically for building AI agents, aimed at enhancing development workflows for AI applications.