browser (experimental)
- Type:
- Default:
Browser Mode configuration. When enabled, tests run in a real browser instead of the Node.js environment.
Options
enabled
- Type:
boolean - Default:
false - CLI:
--browser,--browser.enabled
Enable Browser Mode.
Enabling Browser Mode requires installing the @rstest/browser package and Playwright browsers.
provider
- Type:
'playwright' - Default:
'playwright'
Browser driver provider. Currently only Playwright is supported.
Mixing multiple providers in the same test run is currently not supported.
browser
- Type:
'chromium' | 'firefox' | 'webkit' - Default:
'chromium' - CLI:
--browser.name <name>
The browser type to use for testing.
chromium- Google Chrome, Microsoft Edgefirefox- Mozilla Firefoxwebkit- Safari
You need to install the corresponding browser before use:
headless
- Type:
boolean - Default:
truein CI environments,falsefor local development - CLI:
--browser.headless
Whether to run the browser in headless mode (without UI).
During local development, setting headless: false shows the browser window for easier debugging.
If you want headed mode for local debugging and headless in CI, control it with environment variables:
viewport
- Type:
BrowserViewport - Default:
undefined
Set the default runner iframe viewport for Browser Mode tests. When not specified, the Browser UI fills the preview panel.
Use an explicit size when you want all files in a browser project to run with the same viewport:
You can also use a built-in device preset:
Supported presets:
browser.viewport controls the test runner iframe viewport. If you need Playwright context options such as locale, color scheme, or permissions, configure them through providerOptions.context.
port
- Type:
number - Default:
undefined(automatically selects an available port) - CLI:
--browser.port <port>
The port number for the Browser Mode Dev Server.
If you set port and the port is already in use, the behavior is controlled by strictPort: when strictPort: true, Rstest throws an error and exits; when strictPort: false, it falls back to another available port. If port is not specified, an available port is always selected automatically.
strictPort
- Type:
boolean - Default:
false - CLI:
--browser.strictPort
When port is specified, whether the port must be available:
true: throw an error and exit if the port is in usefalse: fall back to another available port if the port is in use
providerOptions
- Type:
Record<string, unknown> - Default:
{}
Provider-specific options passed through to the selected browser provider. Rstest does not validate or interpret the contents of this object — it is forwarded as-is to the provider at both browser launch and context creation time.
The structure of providerOptions is defined by each provider. See the Provider options section below for details.
Current limitation: browser launch options must match in one run
In one rstest process, all Browser Mode projects must share the same browser launch options:
providerbrowserheadlessportstrictPortproviderOptions
This means mixing multiple providers, or running Chromium/Firefox/WebKit together in the same run, is not supported yet.
For cross-browser coverage, run tests in separate executions (for example, in a CI matrix):
Multi-project config isolation
When using projects in Browser Mode, each project still compiles and executes with its own build config (for example plugins, include, and framework-specific setup).
Browser launch options still need to stay aligned across browser projects: provider, browser, headless, port, strictPort, and providerOptions.
Mixing with node tests
You can configure both browser tests and Node.js tests together:
Provider options
Playwright
When using provider: 'playwright', the Playwright provider recognizes the following fields in providerOptions:
launch— Passed to Playwright'sbrowserType.launch(). Controls how the browser process is started.context— Passed to Playwright'sbrowser.newContext(). Controls the browser context created for each test file.
Since providerOptions is typed as Record<string, unknown>, you won't get IntelliSense out of the box. To get type checking and autocompletion, import types directly from the playwright package and use TypeScript's satisfies operator:
Related links
- Browser Mode Guide - Introduction and usage guide for Browser Mode
- Getting Started - Configure Browser Mode tests
- User interactions - Write semantic tests with
page+expect.element