← Back to archive

Repo of the Day

Skyvern-AI/rustwright at skyvern.com

Published: Aug 30, 2026

Open repository ↗

Playwright's API on a Rust CDP engine — Chromium browser automation for Python & Node, no driver subprocess. (Alpha) - Skyvern-AI/rustwright

Summary

Rustwright is an alpha browser automation library that exposes the Playwright API for Python and Node.js, but drives Chromium from a native Rust engine speaking raw Chrome DevTools Protocol (CDP). It removes the Node driver subprocess that ships with playwright-python and aims to avoid the automation fingerprint that comes with Playwright's driver. The project is MIT-licensed and explicitly Chromium-only — Firefox and WebKit are not planned.

What it is useful for

Rustwright fits when you want to keep your existing Playwright-shaped code but cut the bundled Node driver, or when you need to avoid the well-known Playwright driver signatures. The README highlights three concrete scenarios:

  • Agent-driven automation, via a shell-friendly rustwright-cli, accessibility snapshots with @eN/eN element refs, and a native Rust MCP server (rustwright-mcp) that exposes browser_* tools over stdio.
  • Cross-origin iframes (OOPIF), with auto-attached out-of-process iframe targets and flattened CDP sessions.
  • Remote Chromium sessions through Skyvern's hosted Browser Sessions product (Python only today; the Node binding does not yet support connect_over_cdp).

Documented limitations: the project is alpha; only ~96% of Playwright's Python sync API is covered (515/536 methods); the Node binding exposes a small subset (launch, newPage, goto, click, fill, title, textContent, evaluate, screenshot, close); and the async API wraps the sync engine through threads, recommended for roughly ≤25 concurrent workflows per process. Local fingerprint diagnostics report 3 of 4 public targets clean (CreepJS still detects headless), and the README makes no undetectability promise.

How engineers can use it

For Python, the README documents a near-drop-in swap:

pip install rustwright
python -m rustwright install chromium

Then change from playwright.sync_api import sync_playwright to from rustwright.sync_api import sync_playwright; the sync_playwright() / chromium.launch() / new_page() / goto() flow is unchanged.

For Node, npm install rustwright and point at an existing browser with RUSTWRIGHT_CHROMIUM, CHROME, or CHROMIUM. From a source clone, build the addon with npm install && npm run build inside node/. Only the subset listed above is bridged; contexts, routing, tracing, and locators are not yet on the Node side.

For agent workflows, install the MCP server with cargo install --git https://github.com/Skyvern-AI/rustwright rustwright-mcp, then register it with claude mcp add rustwright -- rustwright-mcp. The CLI can also be installed via the one-liner from the README. Note that Rustwright sends one engine_launched telemetry event per process to PostHog — opt out with DISABLE_TELEMETRY=1 or DO_NOT_TRACK=1. Full tool surface and configuration live in mcp/README.md and docs/agent-interfaces.md.