Running

Parallel and cross-browser

Both work today, on the recordings you already have. Nothing is recorded again, and nothing here spends tokens.

Run in parallel

npx saffron run --workers 4

or "workers": 4 in saffron.config.json. Each worker replays one scenario at a time in its own browser context, so cookies and storage never leak between scenarios.

What happens to a scenario that cannot simply replay (no cache yet, a stale cache, or a failure): it is set aside, and after the parallel phase it runs again on its own, with the agent, exactly as it would without --workers. Healing depends on the precise state of the failed page, so agent work stays sequential. The cost is one extra replay for those scenarios; a fully cached suite pays nothing.

How many workers Start with the number of CPU cores. Browsers are the cost, not Saffron.
Order Scenarios start in file order and finish in any order. The report keeps file order.
--no-agent Combine them in CI: --workers 4 --no-agent is the fast, zero-token gate.
Shared test data Parallel scenarios share your application. Two scenarios that edit the same record will interfere, the same as in any parallel runner. Give them their own data, or keep them in one scenario.

Run on another browser

npx saffron run --no-agent --browser firefox
npx saffron run --no-agent --browser webkit

or "browser": "firefox" in the config. Install the engine once with npx playwright install firefox webkit.

Recordings are browser-neutral: targets are roles, names and labels, not engine-specific selectors. Record once on Chromium, replay on every engine. Recording and healing always use Chromium, because the agent attaches to the browser over CDP. Under Firefox or WebKit a scenario that needs the agent fails with that instruction instead of a confusing error, so a red there means "record this on Chromium first" or a genuine cross-browser difference in your app.

Supported today: chromium, firefox, webkit. Branded Chrome and Edge, and several engines in one command, are on the roadmap.

A cross-browser matrix in CI

strategy:
  matrix:
    browser: [chromium, firefox, webkit]
steps:
  - run: npm ci
  - run: npx playwright install ${{ matrix.browser }} --with-deps
  - run: npx saffron run --no-agent --strict --workers 4 --browser ${{ matrix.browser }}

Three jobs, zero tokens, no credentials: replay needs no AI provider.

Run in parallel

npx saffron run --workers 4

or "workers": 4 in saffron.config.json. Each worker replays one scenario at a time in its own browser context, so cookies and storage never leak between scenarios.

What happens to a scenario that cannot simply replay (no cache yet, a stale cache, or a failure): it is set aside, and after the parallel phase it runs again on its own, with the agent, exactly as it would without --workers. Healing depends on the precise state of the failed page, so agent work stays sequential. The cost is one extra replay for those scenarios; a fully cached suite pays nothing.

How many workers Start with the number of CPU cores. Browsers are the cost, not Saffron.
Order Scenarios start in file order and finish in any order. The report keeps file order.
--no-agent Combine them in CI: --workers 4 --no-agent is the fast, zero-token gate.
Shared test data Parallel scenarios share your application. Two scenarios that edit the same record will interfere, the same as in any parallel runner. Give them their own data, or keep them in one scenario.

Run on another browser

npx saffron run --no-agent --browser firefox
npx saffron run --no-agent --browser webkit

or "browser": "firefox" in the config. Install the engine once with npx playwright install firefox webkit.

Recordings are browser-neutral: targets are roles, names and labels, not engine-specific selectors. Record once on Chromium, replay on every engine. Recording and healing always use Chromium, because the agent attaches to the browser over CDP. Under Firefox or WebKit a scenario that needs the agent fails with that instruction instead of a confusing error, so a red there means "record this on Chromium first" or a genuine cross-browser difference in your app.

Supported today: chromium, firefox, webkit. Branded Chrome and Edge, and several engines in one command, are on the roadmap.

A cross-browser matrix in CI

strategy:
  matrix:
    browser: [chromium, firefox, webkit]
steps:
  - run: npm ci
  - run: npx playwright install ${{ matrix.browser }} --with-deps
  - run: npx saffron run --no-agent --strict --workers 4 --browser ${{ matrix.browser }}

Three jobs, zero tokens, no credentials: replay needs no AI provider.