No Node.js tax.
95%+ fewer tokens.
Single Rust binary.
Official Playwright in Python or Go spawns a 150MB+ Node.js subprocess that dumps 45,000 tokens of raw div-soup into your LLM.
cdpx compiles to a 1.15MB static Rust binary that drives Chromium over raw CDP WebSockets, compressing dynamic web state into atomic @e1..@eN action handles.
The Real Cost of DOM Bloat in Production
Every turn in an agent loop re-sends the page state. Calculate your exact monthly token invoice comparing traditional Playwright DOM dumps against cdpx Semantic Action-State Projections.
Zero Ghost Clicks. Zero Hydration Races.
SPAs built with React 19, Next.js, and Remix constantly fail under generic tools because click events fire before client-side hydration or during layout shifts. cdpx enforces a strict two-phase execution cycle.
In-Page Scroll & Geometrical Hit-Test
The target handle (e.g. @e4) is resolved inside page context via non-enumerable registry. scrollIntoView aligns the element, re-computes its live bounding box, and verifies visibility with elementFromPoint.
Trusted Hardware CDP Event Sequence
Emits native Input.dispatchMouseEvent packets (mouseMoved → 50ms pause → mousePressed → mouseReleased) directly over WebSocket. Triggers synthetic framework listeners identical to a real user.
MutationObserver Settle Gate
Before returning to the LLM, cdpx awaits document.readyState === 'complete' and listens for DOM mutations to settle within a 250ms quiet window. Guarantees the agent receives post-click reality.
Precision Spec Sheet Architecture
cdpx replaces the heavy multi-tier driver stack with a single, statically linked binary communicating directly with Chromium over standard loopback CDP.
| PART | COMPONENT | SPECIFICATION |
|---|---|---|
| P-01 | CLI & MCP Dispatcher | Pure Rust 2024 edition, Clap v4, stdio JSON-RPC 2.0 protocol engine |
| P-02 | CDP Transport Bus | Asynchronous WebSocket client over Target.attachToTarget session domain |
| P-03 | SASP Tree Walker | Hit-test occlusion culling (elementFromPoint), non-enumerable registry isolation |
| P-04 | Action Engine | In-page scroll re-measurement + trusted CDP Input dispatch + 250ms mutation settle |
| P-05 | Process Cleanup | Auto-kills full process tree (GPU + renderers) on Windows, macOS, Linux via taskkill/kill |
Raw HTML Dump vs Semantic Action-State Projection
Comparing what an LLM actually receives. Notice the complete elimination of nested vector clutter, analytics tags, and invisible wrappers.
Raw HTML with styling classes, inline SVGs, script tags, and offscreen nodes:
<div class="Box-sc-g0xbh4-0 bnbUuV" data-testid="auth-root">
<div class="Subhead">
<h2 class="Subhead-heading">Sign in to GitHub</h2>
</div>
<form action="/session" accept-charset="UTF-8" method="post">
<input type="hidden" name="authenticity_token" value="v9s8..." />
<div class="auth-form-body mt-3">
<label for="login_field">Username or email address</label>
<input type="text" name="login" id="login_field" class="form-control" autocorrect="off" autocapitalize="off" autocomplete="username" autofocus="autofocus" required="required" aria-describedby="login-error" />
<div class="position-relative">
<label for="password">Password</label>
<a class="label-link" href="/password_reset">Forgot password?</a>
<input type="password" name="password" id="password" class="form-control" autocomplete="current-password" required="required" />
<input type="submit" name="commit" value="Sign in" class="btn btn-primary" />
</div>
</div>
</form>
... [1,842 lines of inline SVG paths, script tags, analytics beacons, hidden tracking pixels] ...
</div>
Zero noise. Exactly what the LLM needs to make a deterministic decision:
[Page: Sign in to GitHub • GitHub] (url: https://github.com/login) ------------------------------------------------------------ @e1: input "Username or email address" (x: 631, y: 207) @e2: input "Password" (x: 631, y: 288) @e3: link "Forgot password?" (x: 752, y: 254) @e4: input "commit" (x: 631, y: 344) [value: "Sign in"] @e5: link "Create an account" (x: 682, y: 403) @e6: link "Terms" (x: 296, y: 679) @e7: link "Privacy" (x: 362, y: 679) @e8: link "Docs" (x: 425, y: 679) @e9: link "Contact GitHub Support" (x: 534, y: 679) @e10: button "Manage cookies" (x: 681, y: 679) @e11: button "Do not share my personal information" (x: 873, y: 679) // Agent command: type @e1 "user" -> type @e2 "pass" -> click @e4
20 Global Sites. Atomic Verification.
Tested live on Windows 11 with headless Chrome across top production web applications. 100% clean process exits with zero memory leaks.
| TARGET | URL | STATUS | INTERACTIVE ELEMENTS | TOKEN ESTIMATE | LATENCY |
|---|---|---|---|---|---|
| Wikipedia | en.wikipedia.org |
√ 100% PASS | 32 elements | ~451 tokens | 4.61s |
| GitHub Login | github.com/login |
√ 100% PASS | 11 elements | ~120 tokens | 2.96s |
| DuckDuckGo | duckduckgo.com |
√ 100% PASS | 11 elements | ~140 tokens | 3.73s |
| Hacker News | news.ycombinator.com |
√ 100% PASS | 77 elements | ~870 tokens | 2.37s |
| BBC News | bbc.com |
√ 100% PASS | 45 elements | ~580 tokens | 3.12s |
| Stripe | stripe.com |
√ 100% PASS | 24 elements | ~310 tokens | 4.05s |
| Vercel | vercel.com |
√ 100% PASS | 19 elements | ~260 tokens | 2.84s |
| Python.org | python.org |
√ 100% PASS | 38 elements | ~490 tokens | 3.20s |
| Docs.rs | docs.rs |
√ 100% PASS | 12 elements | ~160 tokens | 2.15s |
| Hugging Face | huggingface.co |
√ 100% PASS | 28 elements | ~380 tokens | 3.45s |
The Author & Philosophy
I am Akash Priyadarshi, a self-taught systems and AI-augmented developer building out of Patna, Bihar, India.
I operate under a strict ₹0 budget constraint. I have no venture subsidies, no cloud credits to burn, and no patience for bloated developer tools. When Python and Node.js tools leak 500MB of RAM and choke LLMs with 40,000 tokens of useless DOM tags, I build the native tool that replaces them.
cdpx is part of a growing suite of high-craft, token-compressed systems designed to built for solo engineers who ship complete systems.
Token-efficient grep for LLM coding agents with stdio MCP server.
179KB drop-in cat replacement producing token-compressed JSON for agents.
Token-budgeted repository visualizer built purely with Go standard library.
Precompiled Telegram TDLib for all 4 Android ABIs with CI-built AARs.
Offline-first India UPI expense tracker with auto-capture for GPay and PhonePe.
Converts full software repositories into formatted academic papers.