ferridriver
Rust-native browser automation.

Playwright-compatible API. Four backends behind one surface. Test runner, BDD with native JS/TS step bodies, and an MCP server — one binary.

🦀

Rust engine, four backends

One Browser/Page/Locator surface dispatching to CDP over pipes (default), CDP over WebSocket, Playwright WebKit, and Firefox over WebDriver BiDi. Enum dispatch — no vtable cost.

📦

Browser API for Node and Bun

@ferridriver/node ships the same Browser/Page/Locator/Frame/BrowserContext to Node.js and Bun via NAPI-RS. The Rust engine does the work; the JS layer is a thin typed wrapper.

Test runner included

#[ferritest] in Rust. Parallel workers, DAG-resolved fixtures, hooks, retries with flaky detection, 38 auto-retrying expect matchers, snapshots, Playwright-compatible traces.

🥒

BDD with native JS/TS steps

Gherkin backed by the Page API. Step bodies in Rust or JavaScript/TypeScript — TS/JS files bundle to QuickJS bytecode once and run through the same runner. No Node or Bun in the loop.

🤖

MCP server in the box

Scripting-focused MCP server with 10 tools. run_script runs sandboxed JavaScript against the live session with full Page / Context / HttpClient bindings. Multi-step automation in one LLM turn.

📥

One binary

`ferridriver` is the only thing to install. MCP server, BDD runner, script runner, test wrapper, browser installer — all subcommands.

📚

Recipes

Copy-paste patterns for login + saved auth state, network mocking, file upload/download, multi-tab, mobile emulation, screenshots, traces, and CI on GitHub Actions.

📝

Honest about gaps

We do not ship position-stability checks or codegen yet. The comparison page lists every gap against Playwright, Puppeteer, Selenium, and Cypress.

🔧

Troubleshoot fast

Common install issues, flake patterns, MCP setup quirks, CI fixes, and an FAQ. Hit a problem in 5 minutes, find the fix in 30 seconds.