{"record":{"id":"4d7c5f5346ee41c6","repo":"vitest-dev/vitest","slug":"browser-mode-was-enabled-but-provider-was-not-spe","errorCode":null,"errorMessage":"Browser Mode was enabled, but provider was not specified anywhere. See https://vitest.dev/guide/browser/#configuration","messagePattern":"Browser Mode was enabled, but provider was not specified anywhere\\. See https://vitest\\.dev/guide/browser/#configuration","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/vitest/src/node/plugins/browserLoader.ts","lineNumber":57,"sourceCode":"    {\n      name: 'vitest:browser:loader',\n      // `pre` so the browser plugins injected via `applyToEnvironment` land before\n      // Vite's internal resolver in the `client` environment (so e.g. the\n      // `vitest/browser` virtual module wins over the node stub resolution).\n      enforce: 'pre',\n      async config(viteConfig) {\n        const browser = viteConfig.test?.browser\n        if (!browser?.enabled) {\n          return\n        }\n        // The provider can be configured at the project level or per instance\n        // (e.g. connect mode). All instances in a project share one provider\n        // (validated in `resolveTestConfig`), so any instance's server factory\n        // builds the shared server.\n        const provider = browser.provider\n          ?? browser.instances?.find(instance => instance.provider)?.provider\n        if (!provider || typeof provider.serverFactory !== 'function') {\n          throw new Error(`Browser Mode was enabled, but provider was not specified anywhere. See https://vitest.dev/guide/browser/#configuration`)\n        }\n        const contribution = await provider.serverFactory()\n        captures.browserContribution = contribution\n        const browserConfig = await contribution.config(viteConfig, harness)\n        const logLevel = viteConfig.logLevel ?? 'warn'\n        const logger = createViteLogger(harness.logger, logLevel, {\n          allowClearScreen: false,\n        })\n        return {\n          ...browserConfig,\n          customLogger: {\n            ...logger,\n            info(message, options) {\n              // https://github.com/vitejs/vite/blob/ba3119397d0110952f29965774c627a3017d7292/packages/vite/src/node/optimizer/optimizer.ts#L76-L86\n              // https://github.com/vitejs/vite/blob/ba3119397d0110952f29965774c627a3017d7292/packages/vite/src/node/optimizer/optimizer.ts#L483-L490\n              const isOptimizerMessage\n                = message.includes('dependency optimized: ')\n                  || message.includes('dependencies optimized: ')","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/vitest-dev/vitest/blob/1fa9837ec26533512fdcad8baebf249771bd340a/packages/vitest/src/node/plugins/browserLoader.ts#L39-L75","documentation":"Browser mode was enabled but no provider could be resolved. The loader checks browser.provider and the first browser.instances[] entry with a provider; if none has a callable serverFactory, it throws. A provider (e.g. playwright) must be configured for browser mode.","triggerScenarios":"test.browser.enabled === true with neither browser.provider set nor any browser.instances[].provider set, so the resolved provider is undefined (or its serverFactory is not a function).","commonSituations":"Enabling browser mode without installing/configuring a provider; typo in provider name; relying only on instances but forgetting provider on each; provider package not installed.","solutions":["Set test.browser.provider: 'playwright' (or 'webdriverio') in config.","Install the matching provider package (e.g. @vitest/browser-provider-playwright).","If using instances, set provider on at least one instance (or on browser.provider globally)."],"exampleFix":"// before\nexport default defineConfig({\n  test: { browser: { enabled: true, instances: [{ browser: 'chromium' }] } }\n})\n\n// after\nexport default defineConfig({\n  test: {\n    browser: {\n      enabled: true,\n      provider: 'playwright',\n      instances: [{ browser: 'chromium' }]\n    }\n  }\n})","handlingStrategy":"validation","validationCode":"function browserProviderResolved(browser) {\n  const provider = browser.provider ?? browser.instances?.find(i => i.provider)?.provider\n  return !!provider && typeof provider.serverFactory === 'function'\n}\n// before enabling browser: if (!browserProviderResolved(config.test.browser)) set provider in config","typeGuard":"function hasServerFactory(provider): provider is { serverFactory: () => unknown } {\n  return provider != null && typeof provider.serverFactory === 'function'\n}","tryCatchPattern":null,"preventionTips":["Always set test.browser.provider when enabling browser mode.","Install the matching provider package in devDependencies.","If using instances, set provider on each (or once on browser.provider)."],"tags":["browser","provider","config"],"backgroundTag":null,"analyzedSha":"1fa9837ec26533512fdcad8baebf249771bd340a","analyzedAt":"2026-08-11T16:11:39.638Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}