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:
- Host Go Server: A single static native binary running on the workspace host (~20-30 MB RSS).
- 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:
- 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.
- 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 likecode-serverrun heavy Node.js runtimes and remote daemons directly on the server, consuming 500 MB to 1.2 GB+ of server memory. - 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.
- 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