vitest-dev/vitest · error · Error
@vitest/coverage-v8 does not work with ${browserConfig} Use
Error message
@vitest/coverage-v8 does not work with
${browserConfig}
Use either:
${correctExample}
...or change your coverage provider to:
${coverageExample}
What it means
V8 coverage relies on Chrome DevTools Protocol and only works with Chromium-based browsers under the playwright (chromium) or preview (chrome/edge) provider. The block at resolveProjects.ts:695-736 detects a non-chromium browser instance (or non-preview provider) combined with coverage.provider === 'v8' and coverage.enabled, then throws with the offending config and two fixes: switch the browser to chromium/chrome, or switch coverage to istanbul.
Source
Thrown at packages/vitest/src/node/projects/resolveProjects.ts:731
browser: {
provider: ${preferredProvider}(),
instances: [
{ browser: '${preferredBrowser}' }
],
},
}
`.trim()
if (projectConfig.coverage.enabled && projectConfig.coverage.provider === 'v8') {
const coverageExample = `
{
coverage: {
provider: 'istanbul',
},
}
`.trim()
throw new Error(
`@vitest/coverage-v8 does not work with\n${browserConfig}\n`
+ `\nUse either:\n${correctExample}`
+ `\n\n...or change your coverage provider to:\n${coverageExample}\n`,
)
}
if (globalConfig.inspect || globalConfig.inspectBrk) {
const inspectOption = `--inspect${globalConfig.inspectBrk ? '-brk' : ''}`
throw new Error(
`${inspectOption} does not work with\n${browserConfig}\n`
+ `\nUse either:\n${correctExample}`
+ `\n\n...or disable ${inspectOption}\n`,
)
}
}
if (names.has(name)) {View on GitHub (pinned to d568f8ce37)
Solutions
- Switch coverage.provider to 'istanbul' for non-Chromium browsers (istanbul instruments the JS and works anywhere).
- Limit browser.instances to Chromium-based engines (chromium under playwright, chrome/edge under preview) when you need v8 coverage.
- Split into two projects: one chromium project with v8 coverage, one firefox/webkit project with coverage disabled or istanbul.
Example fix
// before
test: {
coverage: { enabled: true, provider: 'v8' },
browser: { enabled: true, provider: 'playwright', instances: [
{ browser: 'chromium' }, { browser: 'firefox' },
] },
}
// after
test: {
coverage: { enabled: true, provider: 'istanbul' },
browser: { enabled: true, provider: 'playwright', instances: [
{ browser: 'chromium' }, { browser: 'firefox' },
] },
} Defensive patterns
Strategy: validation
Validate before calling
const chromiumOnly = (instances: { browser: string }[], provider: string) =>
instances.every(i => isChromiumName(provider, i.browser))
if (config.coverage.enabled && config.coverage.provider === 'v8' && !chromiumOnly(config.browser.instances, config.browser.provider?.name ?? 'preview')) {
throw new Error('v8 coverage requires chromium-only browser instances; switch to istanbul or restrict instances')
} Type guard
function isChromiumBrowser(provider: string, browser: string): boolean {
if (provider === 'playwright') return browser === 'chromium'
return browser === 'chrome' || browser === 'edge'
} Prevention
- Use istanbul coverage when running non-Chromium browsers.
- Restrict browser.instances to chromium/chrome/edge when v8 coverage is required.
- Split multi-browser suites into per-engine projects with matching coverage.
When it happens
Trigger: Setting coverage.provider='v8' while browser.instances includes firefox/webkit, or using a non-chromium browser name with the playwright provider; enabling coverage and a non-chromium browser simultaneously.
Common situations: Wanting coverage numbers across multiple browsers including Firefox/Safari; default v8 coverage inherited from root while a project adds firefox instances; CI matrix that enables coverage globally but runs a webkit project.
Related errors
- ${inspectOption} does not work with ${browserConfig} Use ei
- No codec found for type ${type}
- Unrecognized comparator ${comparator}
- Tester HTML file "${testerHtmlPath}" doesn't exist.
- Something removed the coverage directory "${coverageFilesDir
AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03).
Data as JSON: /data/errors/415f6816e52d90c4.json.
Report an issue: GitHub.