{"id":"415f6816e52d90c4","repo":"vitest-dev/vitest","slug":"vitest-coverage-v8-does-not-work-with-browserco","errorCode":null,"errorMessage":"@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","messagePattern":"@vitest/coverage-v8 does not work with\n(.+?)\n\nUse either:\n(.+?)\n\n\\.\\.\\.or change your coverage provider to:\n(.+?)\n","errorType":"validation","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/vitest/src/node/projects/resolveProjects.ts","lineNumber":731,"sourceCode":"  browser: {\n    provider: ${preferredProvider}(),\n    instances: [\n      { browser: '${preferredBrowser}' }\n    ],\n  },\n}\n          `.trim()\n\n        if (projectConfig.coverage.enabled && projectConfig.coverage.provider === 'v8') {\n          const coverageExample = `\n{\n  coverage: {\n    provider: 'istanbul',\n  },\n}\n            `.trim()\n\n          throw new Error(\n            `@vitest/coverage-v8 does not work with\\n${browserConfig}\\n`\n            + `\\nUse either:\\n${correctExample}`\n            + `\\n\\n...or change your coverage provider to:\\n${coverageExample}\\n`,\n          )\n        }\n\n        if (globalConfig.inspect || globalConfig.inspectBrk) {\n          const inspectOption = `--inspect${globalConfig.inspectBrk ? '-brk' : ''}`\n\n          throw new Error(\n            `${inspectOption} does not work with\\n${browserConfig}\\n`\n            + `\\nUse either:\\n${correctExample}`\n            + `\\n\\n...or disable ${inspectOption}\\n`,\n          )\n        }\n      }\n\n      if (names.has(name)) {","sourceCodeStart":713,"sourceCodeEnd":749,"githubUrl":"https://github.com/vitest-dev/vitest/blob/d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09/packages/vitest/src/node/projects/resolveProjects.ts#L713-L749","documentation":"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.","triggerScenarios":"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.","commonSituations":"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.","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."],"exampleFix":"// before\ntest: {\n  coverage: { enabled: true, provider: 'v8' },\n  browser: { enabled: true, provider: 'playwright', instances: [\n    { browser: 'chromium' }, { browser: 'firefox' },\n  ] },\n}\n\n// after\ntest: {\n  coverage: { enabled: true, provider: 'istanbul' },\n  browser: { enabled: true, provider: 'playwright', instances: [\n    { browser: 'chromium' }, { browser: 'firefox' },\n  ] },\n}","handlingStrategy":"validation","validationCode":"const chromiumOnly = (instances: { browser: string }[], provider: string) =>\n  instances.every(i => isChromiumName(provider, i.browser))\nif (config.coverage.enabled && config.coverage.provider === 'v8' && !chromiumOnly(config.browser.instances, config.browser.provider?.name ?? 'preview')) {\n  throw new Error('v8 coverage requires chromium-only browser instances; switch to istanbul or restrict instances')\n}","typeGuard":"function isChromiumBrowser(provider: string, browser: string): boolean {\n  if (provider === 'playwright') return browser === 'chromium'\n  return browser === 'chrome' || browser === 'edge'\n}","tryCatchPattern":null,"preventionTips":["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."],"tags":["coverage","v8","browser","chromium","configuration"],"analyzedSha":"d568f8ce3739b532d5bf2c1ee1e45e8a8a473d09","analyzedAt":"2026-08-03T20:23:56.861Z","schemaVersion":2}