ferridriver
A single static binary. JavaScript / TypeScript BDD step files run natively through it — no separate TypeScript CLI exists — and so do the web front-ends: the trace viewer, UI mode and the HTML report are compiled in, so they work offline with no npm install.
Synopsis
Codegen
ferridriver codegen <url> [--output rec.ts] [--language ts|rust|gherkin]
opens a headed browser, records your clicks / fills / selects / navigation
(generating Playwright-style locators), and writes code to --output or
stdout. Stop with Ctrl+C or by closing the browser.
The default ts output is a runnable script, not a test stub: it reuses
an injected page when one exists — so the MCP run_script tool replays it
on a live session — and otherwise launches its own browser, so the same file
runs standalone via ferridriver run rec.ts. rust emits a #[ferritest]
test; gherkin emits a .feature.
Global flags
ferridriver mcp
See MCP overview and Client setup.
ferridriver bdd
--steps loads JavaScript / TypeScript step-definition files
(repeatable; overrides [test].steps from the config file). Files are
bundled with rolldown, compiled to QuickJS bytecode once at startup, and
run on the embedded engine — no Node, no Bun.
Defaults to steps/**/*.{js,ts} and step_definitions/**/*.{js,ts} when
no --steps flag is provided.
Browser flags shared with mcp: --backend, --headless,
--executable-path, --connect, --auto-connect, --user-data-dir.
ferridriver test
Auto-detects cargo-nextest and falls back to cargo test. Useful in
mixed projects where one command should drive any Rust test target.
ferridriver run
Executes a script with Playwright-shaped globals (chromium, firefox,
webkit, page, context, request). A .ts / .tsx file, or any
source with top-level import / export, is rolldown-bundled and
transpiled before running. args is the positional list exposed as a
global. - reads source from stdin. --eval runs inline source instead
of a file.
ferridriver trace
TRACE is a trace.zip, a directory of trace files (a recording that
was interrupted), or — for view — an http(s) URL. Omit it and the
newest trace under the test output directory is used.
view serves the embedded Playwright trace viewer and opens it in an
application window; --no-open prints the URL and keeps serving, which
is what you want over ssh or in a container.
show prints the same trace as text: the call tree with timings, what
failed and what it was waiting for, then console, network and attachment
summaries. --errors keeps only the failures; --json emits the whole
model for a script to read.
UI mode
Serves Playwright's UI-mode app — the real one, embedded in this binary — and answers the test-server protocol it speaks. The test tree, filters, watch mode, per-test trace with DOM snapshots, source, console and network all come from it. Traces are forced on for the session and are written where the viewer can follow them while a test is still running.
Without --ui-port an application window is opened for you; with one,
the URL is printed and left for you to open (or for another tool to
drive).
ferridriver merge-reports
Reads every blob zip under INPUTS (a directory or the zips
themselves) and replays the merged event stream through the named
reporters, producing the report an unsharded run would have produced.
Exits non-zero when any test in the merged run failed.
See Reporters for the full reporter list and their options.
ferridriver install
Browsers: chromium, chromium-headless-shell, firefox, webkit.
Defaults to chromium. --with-deps also installs Linux system
libraries via the platform package manager.
An install removes the cached versions of that browser older than the
one it just installed, and reports them. Newer versions and other
browsers stay. --no-remove keeps every version.
ferridriver install webkit downloads Playwright's WebKit build into the
ferridriver cache. Alternatively, point FERRIDRIVER_WEBKIT at a
Playwright WebKit checkout, or install Playwright once
(npx playwright install webkit) and ferridriver picks up its cache.
Environment variables
Install the binary
See MCP > Setup for client configuration snippets.