microsoft/playwright · error · Error

Unsupported ${this._name} channel "${options.channel}"

Error message

Unsupported ${this._name} channel "${options.channel}"

What it means

Thrown in _prepareExecutable / args preparation when options.executablePath is unset and the registry lookup for the channel/browser returns no executable whose browserName matches this._name. The channel name resolved to something that is not installed for this browser type.

Source

Thrown at packages/playwright-core/src/server/browserType.ts:191

    }
    await this.prepareUserDataDir(options, userDataDir);

    const browserArguments: string[] = [];
    if (ignoreAllDefaultArgs)
      browserArguments.push(...args);
    else if (ignoreDefaultArgs)
      browserArguments.push(...(await this.defaultArgs(options, isPersistent, userDataDir)).filter(arg => ignoreDefaultArgs.indexOf(arg) === -1));
    else
      browserArguments.push(...await this.defaultArgs(options, isPersistent, userDataDir));

    let executable: string;
    const customExecutablePath = await this.resolveExecutablePath(options);
    if (customExecutablePath) {
      executable = customExecutablePath;
    } else {
      const registryExecutable = registry.findExecutable(this.getExecutableName(options));
      if (!registryExecutable || registryExecutable.browserName !== this._name)
        throw new Error(`Unsupported ${this._name} channel "${options.channel}"`);
      executable = registryExecutable.executablePathOrDie(this.attribution.playwright.options.sdkLanguage);
      await registry.validateHostRequirementsForExecutablesIfNeeded([registryExecutable], this.attribution.playwright.options.sdkLanguage);
    }

    return { executable, browserArguments, userDataDir, artifactsDir, tempDirectories };
  }

  private async _launchProcess(progress: Progress, options: types.LaunchOptions, isPersistent: boolean, browserLogsCollector: RecentLogsCollector, userDataDir?: string): Promise<{ browserProcess: BrowserProcess, artifactsDir: string, userDataDir: string, transport: ConnectionTransport, wsEndpoint?: string }> {
    const {
      handleSIGINT = true,
      handleSIGTERM = true,
      handleSIGHUP = true,
    } = options;

    const env = options.env ? envArrayToObject(options.env) : process.env;
    const prepared = await progress.race(this._prepareToLaunch(options, isPersistent, userDataDir));

    // Note: it is important to define these variables before launchProcess, so that we don't get

View on GitHub (pinned to c8fc3bf8d3)

Solutions

  1. Install the channel: run 'npx playwright install chrome' (or 'msedge', 'chromium') for the browser you launch.
  2. Drop the channel option to fall back to the bundled browser, or set executablePath explicitly to a known binary.
  3. Verify the channel string is one of the supported channel names for this browserType.

Example fix

// before
const b = await chromium.launch({ channel: 'chrome' });
// after
// shell: npx playwright install chrome
const b = await chromium.launch({ channel: 'chrome' });
// or omit channel:
const b = await chromium.launch();
Defensive patterns

Strategy: validation

Validate before calling

import { registry } from 'playwright-core/lib/server';
// Or at runtime, probe before launch:
async function ensureChannel(browserType: any, channel: string) {
  // 'playwright install' must have been run; assert via executablePath fallback
  try {
    await browserType.launch({ channel });
  } catch (e) {
    throw new Error(`Channel '${channel}' unavailable; run: npx playwright install ${channel}`);
  }
}

Type guard

const SUPPORTED_CHANNELS = ['chrome', 'chrome-beta', 'chrome-dev', 'chrome-canary', 'msedge', 'msedge-beta', 'msedge-dev', 'msedge-canary'];
function isKnownChannel(ch?: string): boolean {
  return !!ch && SUPPORTED_CHANNELS.includes(ch);
}

Prevention

When it happens

Trigger: chromium.launch({ channel: 'chrome' }) on a machine where the 'chrome' channel executable is not installed/registered; or using a channel that does not exist in the bundled registry for the current browser type.

Common situations: Running on CI without 'npx playwright install chrome' / 'chromium'. Channel typo. OS where the named channel (e.g. 'msedge') is not present.

Related errors


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