Performance Benchmarks & Methodology

px0 is engineered for extreme responsiveness and minimal memory usage. While conventional IDEs allocate over 1 GB of RAM and run 15+ background processes, px0 operates as a single static Go binary utilizing ~20 MB of resident memory.

Benchmark Corpus

Performance is evaluated across seven open-source repositories spanning two orders of magnitude in size:

Repository Source Size Files Indexed Character / Ecosystem
flask 3 MB 235 Microframework: tests sub-millisecond instant path
redis 26 MB 1,855 Systems C codebase with monolithic source files
react 63 MB 7,178 Deep directory trees and nested .gitignore files
django 74 MB 7,014 Large Python web framework with sprawling modules
kubernetes 370 MB 25,926 Large enterprise Go monorepo with vendored code
TypeScript 414 MB 66,533 Massive generated test trees and large source files
linux 1,809 MB 95,710 Extreme scale: ~95,000 files and 1.8 GB source text

Benchmark Results (px0 Standalone)

Tested on Linux x86_64 with language servers disabled (-no-lsp):

Repository Files Index Time Fuzzy Search Full-Tree Regex Scan Resident RAM (RSS)
flask 235 1 ms 0.8 ms 2.3 ms 16 MB
redis 1,855 13 ms 1.0 ms 18.2 ms 17 MB
django 7,014 39 ms 1.3 ms 26.8 ms 20 MB
react 7,178 52 ms 2.7 ms 32.2 ms 21 MB
kubernetes 25,926 150 ms 13.5 ms 84.6 ms 30 MB
TypeScript 66,533 566 ms 6.2 ms 150.3 ms 69 MB
linux 95,710 370 ms 6.0 ms 451.8 ms 55 MB

Multi-Editor Benchmark Matrix

Side-by-side comparison on identical Linux hardware across px0 and common developer editors:

Editor Architecture / Process Model Host / Server RSS Total System RAM (incl. UI) Time to Open
px0 Native Go daemon + Browser client ~20 - 30 MB ~100 - 180 MB ~10 ms
Vim Native CLI ~10 - 15 MB ~10 - 15 MB ~15 ms
Neovim Native CLI ~10 - 20 MB ~10 - 20 MB ~150 ms
Zed Native GUI (Metal / Vulkan) ~200 - 450 MB ~200 - 450 MB GUI dependent
Sublime Text Native GUI (C++) ~100 - 250 MB ~100 - 250 MB GUI dependent
VS Code Electron (Chromium + Node) ~1,100 - 1,440 MB ~1,100 - 1,440 MB ~3.0 - 5.0 s

Note: CLI editors (Vim/Neovim) do not provide inline LSP out-of-the-box (like px0 does) without extra processes. Zed and Sublime Text were evaluated as active running GUI configurations. px0 serves a full workspace complete with instantaneous indexing natively in 20-30 Megabytes.

Accounting for the Browser Tab (Client/Server Breakdown)

A fair and rigorous evaluation of px0 requires acknowledging its client-server architecture:

  1. Host Go Server: A single static native binary running on the workspace host (~20-30 MB RSS).
  2. Web Client: A browser tab running in an existing web browser (Chrome, Firefox, Safari) providing the virtualized UI (~80-150 MB RSS).

Because desktop Electron IDEs (such as VS Code or Cursor) bundle Chromium and Node.js directly into their process tree, comparing only px0’s Go server against VS Code’s combined tree would be an incomplete comparison without accounting for the browser tab.

Client/Server Footprint Breakdown vs. VS Code

Component / Layer VS Code (Desktop Electron) VS Code Remote (code-server) px0 (Local Mode) px0 (Remote Server Mode)
Server / Host Daemon ~400-600 MB (Node.js, Extension Host) ~500-1,200 MB (VS Code Server tree) ~20-30 MB (Native Go binary) ~20-30 MB (Host memory only)
Client UI / Frontend ~700-900 MB (Bundled Chromium + GPU) ~150-300 MB (Web browser tab) ~80-150 MB (Single browser tab) ~80-150 MB (Local client browser)
Total System RAM ~1,100-1,440 MB ~650-1,500 MB ~100-180 MB (~85-90% reduction) ~100-180 MB
Host Impact (Server / Devbox) N/A ~500-1,200 MB ~20-30 MB ~20-30 MB

Why this architectural distinction matters:

  1. Total System Memory is Still ~90% Lighter: Even when adding the browser tab (~80-150 MB) to the Go backend (~20-30 MB), px0’s total local system footprint is ~100-180 MB. Compared to Electron-based IDEs running at ~1,100-1,440 MB, px0 achieves an 85-90% net memory reduction across the operating system.
  2. Remote & Cloud Devboxes: When working across remote servers, cloud VMs, Kubernetes pods, or devboxes (px0 -host 0.0.0.0), the remote machine pays strictly the ~20-30 MB server cost. The UI rendering workload is offloaded to the developer’s local machine. In contrast, remote solutions like code-server run heavy Node.js runtimes and remote daemons directly on the server, consuming 500 MB to 1.2 GB+ of server memory.
  3. Marginal Cost of an Existing Browser: Developers virtually always have a browser running with active tabs. Adding one lightweight tab to an already-warm browser process pool avoids the steep CPU and memory penalty of cold-starting a dedicated, isolated Chromium instance, GPU process, and helper daemons.
  4. Virtualized DOM Keeps the Tab Lean: px0 does not bundle heavy third-party editor frameworks like Monaco or CodeMirror. The frontend uses a custom virtualized renderer that mounts only ~60 active rows at any time regardless of file size. As a result, the browser tab itself remains bounded (~80-150 MB) and does not balloon when inspecting 500,000-line files or large diffs.

Head-to-Head Performance Comparison

Metric / Parameter px0 (Local / Remote) VS Code (Desktop / Remote) Notes
Host / Server Memory (RSS) ~20-30 MB (Static Go binary) ~500 MB - 1,440 MB 20-50x leaner on host/server
Client UI Memory ~80 - 150 MB (Single browser tab) ~700 - 1,000 MB (Bundled Chromium + GPU) Bounded by ~60 virtualized DOM rows
Total System RAM ~100 - 180 MB 1,166 MB - 1,440 MB ~85-90% total system reduction
Startup CPU Spike < 1% 35% - 50% Near-instant startup
Startup / Boot Time < 1 ms 4 - 10 seconds Zero Electron boot overhead
Process Count 1 single static binary 15+ Node.js / Electron processes Single native binary
50,000-File Indexing < 50 ms Multiple seconds of background churn Parallel goroutines
Idle Memory Release Automatic (after 15s) Retained indefinitely Proactive debug.FreeOSMemory()

Reproducing the Benchmarks

All benchmark figures can be measured directly on your own machine using the reproducible benchmark script in the repository:

# 1. Fetch benchmark corpus (shallow clones of 7 repositories)
./benchmark.sh --clone

# 2. Run the complete benchmark suite
./benchmark.sh

# 3. Compare px0 directly against VS Code process tree on your current workspace
./benchmark.sh --vscode .

# 4. Profile memory lifecycle across index, search, and idle recovery
./benchmark.sh --memory bench-repos/linux