BDD
Cucumber / Gherkin framework for ferridriver. Translates .feature files
into parallel test execution via the core TestRunner — same worker
pool, retries, reporters, and fixtures as Rust tests.
145 built-in steps backed by the Page / Locator API (not raw JS
evaluate). All selectors support the Playwright engine syntax
(role=, text=, label=, …).
Rust step bodies
Wire a binary entry point:
JavaScript / TypeScript step bodies
Given / When / Then / defineStep / And / But / Before /
After / BeforeAll / AfterAll / BeforeStep / AfterStep /
defineParameterType / setWorldConstructor / setDefaultTimeout /
setDefinitionFunctionWrapper are globals. this is the World,
carrying page / context / request / browser / parameters /
attach / log / skip.
DataTable exposes raw/rows/hashes/rowsHash/transpose.
Returning 'pending' or 'skipped' (or calling this.skip()) marks the
step as such.
Files are bundled with rolldown (TypeScript, imports, tree-shake),
compiled to QuickJS bytecode once, and Module::loaded per worker. The
bytecode cache is content-hashed, in-memory within a run and persisted
to a cross-process disk cache so an unchanged source tree skips both
rolldown and the QuickJS compile on the next start. No Node, no Bun,
no package.json, no node_modules.
Hybrid (Rust + JS / TS)
The Rust step registry and the JS / TS registry merge — a single
feature can mix steps defined in both, and Before / After hooks from
either side run together.
Gherkin coverage
Full Gherkin 6+: Features, Rules, Backgrounds, Scenarios, Scenario
Outlines (with named Examples blocks), tags (boolean expressions: and,
or, not, parens), data tables, doc strings (with media-type hints
like """json), the asterisk (*) keyword, and i18n keywords via
--language or # language: xx (70+ languages).
Learn more
- Built-in steps — all 145 steps grouped by category
- Hooks — lifecycle points and tag filters
- Running — CLI, reporters, profiles