vitest-dev/vitest · error

stackblitz environment does not support the

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 WebContainer that cannot launch a real browser driver. Only the `preview` provider (which opens the user's local browser against the StackBlitz URL) works there. Vitest detects the StackBlitz environment and refuses any other provider, redirecting the user to `@vitest/browser-preview`.

Solutions

  1. Switch to the `preview` provider inside StackBlitz.
  2. Conditionally set the provider based on `process.env.SHELL` / a StackBlitz-detected env var.
  3. Maintain a separate `vitest.stackblitz.config.ts` that uses preview.

Example fix

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

Strategy: validation

Validate before calling

const isStackBlitz = !!process.env.SHELL?.includes('stackblitz') || !!process.env.WEBcontainer
if (isStackBlitz && config.test?.browser?.provider?.name !== 'preview') {
  throw new Error('StackBlitz supports only the preview browser provider.')
}

Type guard

function isStackBlitzEnv(): boolean {
  return Boolean(process.env.WEB_CONTAINER) || /stackblitz/i.test(process.env.SHELL ?? '')
}

Prevention

When it happens

Trigger: Running Vitest inside StackBlitz with `browser.provider: playwright()` (or webdriverio) and `browser.enabled: true`.

Common situations: Reproducing a repo in a StackBlitz link with the same config used locally; a CI matrix that happens to include a StackBlitz runner.

Related errors


AI-assisted analysis of vitest-dev/vitest@1fa9837ec2 (2026-08-11). Data as JSON: /api/errors/181783b7344b4f5f. Report an issue: GitHub.

Appendix: source

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

  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 1fa9837ec2)