microsoft/playwright · error · Error

ERROR: Playwright does not support installing ${executable.n

Error message

ERROR: Playwright does not support installing ${executable.name}

What it means

Thrown inside Registry.install when iterating the requested executables and finding one whose _install function is undefined — meaning Playwright has no installation mechanism for that executable. This guards against attempting to install tools or channels that are detection-only (installType 'none') or platform helpers like 'winldd'.

Source

Thrown at packages/playwright-core/src/server/registry/index.ts:966

          factor: 1.27579,
        },
        onCompromised: (err: Error) => {
          throw new Error(`${err.message} Path: ${lockfilePath}`);
        },
        lockfilePath,
      });
      // Create a link first, so that cache validation does not remove our own browsers.
      await fs.promises.mkdir(linksDir, { recursive: true });
      await fs.promises.writeFile(path.join(linksDir, calculateSha1(PACKAGE_PATH)), PACKAGE_PATH);

      // Remove stale browsers.
      if (options?.gc !== false && !getAsBooleanFromENV('PLAYWRIGHT_SKIP_BROWSER_GC'))
        await this._validateInstallationCache(linksDir);

      // Install browsers for this package.
      for (const executable of executables) {
        if (!executable._install)
          throw new Error(`ERROR: Playwright does not support installing ${executable.name}`);

        if (!getAsBooleanFromENV('CI') && !executable._isHermeticInstallation && !options?.force && executable.executablePath()) {
          const { embedderName } = getEmbedderName();
          const command = buildPlaywrightCLICommand(embedderName, 'install --force ' + executable.name);
          // eslint-disable-next-line no-restricted-properties
          process.stderr.write('\n' + wrapInASCIIBox([
            `ATTENTION: "${executable.name}" is already installed on the system!`,
            ``,
            `"${executable.name}" installation is not hermetic; installing newer version`,
            `requires *removal* of a current installation first.`,
            ``,
            `To *uninstall* current version and re-install latest "${executable.name}":`,
            ``,
            `- Close all running instances of "${executable.name}", if any`,
            `- Use "--force" to install browser:`,
            ``,
            `    ${command}`,
            ``,

View on GitHub (pinned to c8fc3bf8d3)

Solutions

  1. Run 'npx playwright install' with no arguments (or 'chromium'/'firefox'/'webkit') to install only supported targets.
  2. Check the executable name against registry.executables() and filter out entries with installType 'none' before calling install.
  3. Upgrade or align Playwright so the desired executable ships an _install handler.
Defensive patterns

Strategy: validation

Validate before calling

import { registry } from 'playwright-core/lib/server/registry';

const names = process.argv.slice(2); // install targets
const installable = names.filter(n => {
  const e = registry.findExecutable(n);
  return e && e.installType !== 'none';
});
if (installable.length !== names.length)
  throw new Error('Some targets are not installable: ' + names.filter(n => !installable.includes(n)).join(', '));

Type guard

function isInstallable(name: string): boolean {
  const e = registry.findExecutable(name);
  return !!e && e.installType !== 'none' && typeof (e as any)._install === 'function';
}

Prevention

When it happens

Trigger: Calling registry.install() (directly or via 'playwright install <name>') with an Executable whose _install is null — e.g. 'winldd', a system-detected channel with no install script, or any executable the current Playwright build marks as not installable.

Common situations: Passing a custom or deprecated executable name to the install CLI; a bug in calling code that forwards a non-installable Executable to install(); upgrading Playwright where a previously-installable item lost its _install handler.

Related errors


AI-assisted analysis of microsoft/playwright@c8fc3bf8d3 (2026-08-12). Data as JSON: /api/errors/cb1d8c918b99accd. Report an issue: GitHub.