{"id":105883,"title":"Rustwright: Rewrite of Playwright in rust that uses 70% less memory (and is 2.55x faster)","tagline":"Remove the subprocess and save so much memory","body":"Hey everyone, Suchintan from Skyvern (YC S23). We run browser automation for AI agents at scale, and we're launching [Rustwright](https://github.com/Skyvern-AI/rustwright): [Playwright on an in-process Rust CDP engine.](https://github.com/Skyvern-AI/rustwright) The engine consumes 70% less memory than Playwright, and is 2.55x faster to boot.\n\n**We built this to improve Skyvern’s memory footprint**, and thought this would be independently valuable to the broader community\n\nThe whole idea fits in two lines:\n\n```\nplaywright-python:  your code ──pipe──► Node driver (separate process) ──CDP──► Chromium\nrustwright:         your code ────────────────── raw CDP ─────────────────────► Chromium\n```\n\nRemoving the driver changes three things:\n\n1. **Less abstraction.** The driver subprocess and its pipe speaks CDP straight to Chromium. In our runs, the new engine is 2.55× and **consumes 70% less memory** than the equivalent playwright process\n2. **No Playwright driver fingerprint.** The driver never loads, so its signatures never appear: no `__playwright__binding__` globals, no `Runtime.enable` on the default path (the well-known console-serialization leak). The claim is deliberately narrow: no Playwright-specific automation fingerprint, not \"undetectable\"\n3. **A single rust core**: a single Rust core backs both language bindings (Python with sync and async; Typescript) with plans to expand to many popular languages (Ruby / Go / Java to name a few). Within the supported surface, migration is often a one-line import change — `from rustwright.sync_api import sync_playwright.`Clicks and typing go through real CDP input events, not synthetic DOM calls, and cross-origin iframes auto-attach with `frame_locator()` routing across origins.\n\n[playwright-python](https://github.com/microsoft/playwright-python) pipes every call through a bundled Node driver process. [Rustwright](https://github.com/Skyvern-AI/rustwright) drives Chromium over raw Chrome DevTools Protocol from a Rust core, an async CDP client on Tokio (WebSocket, plus opt-in Unix-pipe transport), exposed in-process through thin PyO3 bindings for Python and napi-rs bindings for Node.\n\nStatus: alpha, Chromium-only\n\n**Want to give it a try? Change one line of code!**\n\n```jsx\npip install rustwright\n\n- from playwright.sync_api import sync_playwright\n+ from rustwright.sync_api import sync_playwright\n```\n\n⭐ Give it a try here and let us know what you think: \u003chttps://github.com/Skyvern-AI/rustwright\u003e","slug":"RXn-rustwright-rewrite-of-playwright-in-rust-that-uses-70-less-memory-and-is-2-55x-faster","created_at":"2026-07-15T17:10:22.738Z","updated_at":"2026-07-22T14:30:03.206Z","total_vote_count":7,"url":"https://www.ycombinator.com/launches/RXn-rustwright-rewrite-of-playwright-in-rust-that-uses-70-less-memory-and-is-2-55x-faster","share_image_url":"//bookface-static.ycombinator.com/assets/ycdc/yc-og-image-c440a0ad1dacfb86eeeb343717479cc54d256614449b4ef719977a0a451f8bc8.png","company":{"id":28887,"name":"Skyvern","slug":"skyvern","url":"https://www.skyvern.com/","logo":"https://bookface-images.s3.amazonaws.com/small_logos/87d977bf0d4b7032c71830901e118beb0ca9946c.png","batch":"Summer 2023","industry":"B2B","tags":["Artificial Intelligence","Robotic Process Automation","Workflow Automation","Open Source","API"],"search_path":"https://bookface.ycombinator.com/company/28887"}}