vitest-dev/vitest · error · Error
${name}Browser "${browser}" is not supported by the browser
Error message
${name}Browser "${browser}" is not supported by the browser provider "${options.provider.name}". Supported browsers: ${supportedBrowsers.join(', ')}. What it means
Thrown when the requested browser name is not in the provider's supportedBrowser list. Each provider declares which browser engines it can drive; requesting an unsupported one means the provider has no way to launch it.
Source
Thrown at packages/browser/src/node/utils.ts:84
}
export async function getBrowserProvider(
options: ResolvedBrowserOptions,
project: TestProject,
): Promise<BrowserProvider> {
const browser = project.config.browser.name
const name = project.name ? `[${project.name}] ` : ''
if (!browser) {
throw new Error(
`${name}Browser name is required. Please, set \`test.browser.instances[].browser\` option manually.`,
)
}
if (options.provider == null) {
throw new Error(`Browser Mode requires the "provider" to always be specified.`)
}
const supportedBrowsers = options.provider.supportedBrowser || []
if (supportedBrowsers.length && !supportedBrowsers.includes(browser)) {
throw new Error(
`${name}Browser "${browser}" is not supported by the browser provider "${
options.provider.name
}". Supported browsers: ${supportedBrowsers.join(', ')}.`,
)
}
if (typeof options.provider.providerFactory !== 'function') {
throw new TypeError(`The "${name}" browser provider does not provide a "providerFactory" function. Received ${typeof options.provider.providerFactory}.`)
}
return options.provider.providerFactory(project)
}
export function slash(path: string): string {
return path.replace(/\\/g, '/').replace(/\/+/g, '/')
}
export function assertBrowserFileAccess(project: TestProject, path: string): void {
const normalized = slash(path)
if (View on GitHub (pinned to d568f8ce37)
Solutions
- Use the exact engine name the provider lists in its error message (chromium, firefox, webkit for playwright).
- For a custom provider, extend its supportedBrowser array to include the engine you request.
- Switch to a provider that supports your target engine.
Example fix
// before
export default defineConfig({
test: {
browser: {
provider: 'playwright',
instances: [{ browser: 'safari' }],
},
},
})
// after
export default defineConfig({
test: {
browser: {
provider: 'playwright',
instances: [{ browser: 'webkit' }],
},
},
}) Defensive patterns
Strategy: validation
Validate before calling
const PLAYWRIGHT = ['chromium', 'firefox', 'webkit']
const requested = 'safari'
if (!PLAYWRIGHT.includes(requested)) {
throw new Error(`Use one of: ${PLAYWRIGHT.join(', ')} (got '${requested}')`)
} Type guard
function isSupportedBrowser(name: string, supported: string[]): name is string {
return supported.includes(name)
} Prevention
- Use engine names (chromium/firefox/webkit), not product names (chrome/safari/edge).
- Read the provider's supportedBrowser list before choosing instance names.
- For custom providers, document and assert the supportedBrowser contract.
When it happens
Trigger: Passing a browser name the provider doesn't recognize, e.g. 'safari' (the engine is 'webkit'), or 'chrome' (the engine is 'chromium') with the playwright provider, or any name absent from provider.supportedBrowser.
Common situations: Using colloquial browser names ('safari', 'chrome', 'edge') instead of the engine names playwright expects ('webkit', 'chromium'); writing a custom provider and forgetting to add an engine to supportedBrowser.
Related errors
- ${name}Browser name is required. Please, set `test.browser.i
- The ${provider.name} provider does not support tracing.
- Browser Mode requires the "provider" to always be specified.
- Access denied to "${path}". See Vite config documentation fo
- Cannot modify file "${path}". File writing is disabled becau
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/35124b6fcf98922a.json.
Report an issue: GitHub.