vitest-dev/vitest · error · Error

stackblitz environment does not support the ${resolved.brows

Error message

stackblitz environment does not support the ${resolved.browser.provider?.name} provider. Please, use "@vitest/browser-preview" instead.

What it means

StackBlitz runs in a sandboxed browser environment that cannot launch real browser drivers (Playwright/WebdriverIO). Only the `preview` provider works there. The check at resolveConfig.ts:871 throws when browser mode is enabled with a non-preview provider inside a StackBlitz environment.

Source

Thrown at packages/vitest/src/node/config/resolveConfig.ts:872

  resolved.browser.viewport.height ??= 896

  resolved.browser.locators ??= {} as any
  resolved.browser.locators.testIdAttribute ??= 'data-testid'
  resolved.browser.locators.exact ??= true
  resolved.browser.locators.errorFormat ??= 'all'

  if (typeof resolved.browser.provider === 'string') {
    const source = `@vitest/browser-${resolved.browser.provider}`
    throw new TypeError(
      'The `browser.provider` configuration was changed to accept a factory instead of a string. '
      + `Add an import of "${resolved.browser.provider}" from "${source}" instead. See: https://vitest.dev/config/browser/provider`,
    )
  }

  const isPreview = resolved.browser.provider?.name === 'preview'

  if (!isPreview && resolved.browser.enabled && stdProvider === 'stackblitz') {
    throw new Error(`stackblitz environment does not support the ${resolved.browser.provider?.name} provider. Please, use "@vitest/browser-preview" instead.`)
  }
  if (isPreview && resolved.browser.screenshotFailures === true) {
    console.warn(c.yellow(
      [
        `Browser provider "preview" doesn't support screenshots, `,
        `so "browser.screenshotFailures" option is forcefully disabled. `,
        `Set "browser.screenshotFailures" to false or remove it from the config to suppress this warning.`,
      ].join(''),
    ))
    resolved.browser.screenshotFailures = false
  }
  else {
    resolved.browser.screenshotFailures ??= !isPreview && !resolved.browser.ui
  }
  if (resolved.browser.provider && resolved.browser.provider.options == null) {
    resolved.browser.provider.options = {}
  }

View on GitHub (pinned to d568f8ce37)

Solutions

  1. Use the preview provider on StackBlitz: `browser: { enabled: true, provider: preview }`.
  2. Install/use `@vitest/browser-preview` as the error suggests.
  3. Conditionally set the provider based on environment (e.g. `provider: process.env.STACKBLITZ ? preview : playwright`).

Example fix

// before
export default defineConfig({ test: { browser: { enabled: true, provider: playwright } } })
// after (on StackBlitz)
import { preview } from '@vitest/browser-preview'
export default defineConfig({ test: { browser: { enabled: true, provider: preview } } })
Defensive patterns

Strategy: fallback

Validate before calling

function pickStackblitzProvider(playwright: any, preview: any) {
  return process.env.STACKBLITZ || /stackblitz/i.test(navigator?.userAgent || '') ? preview : playwright
}

Type guard

function isStackblitz(): boolean {
  return !!process.env.STACKBLITZ
}

Prevention

When it happens

Trigger: On StackBlitz, set `browser: { enabled: true, provider: playwright }` and run vitest. `stdProvider === 'stackblitz'` is detected from the runtime.

Common situations: Opening a project on StackBlitz that was authored locally with a real browser provider; CI config reused inside StackBlitz.

Related errors


AI-assisted analysis of vitest-dev/vitest@d568f8ce37 (2026-08-03). Data as JSON: /data/errors/181783b7344b4f5f.json. Report an issue: GitHub.