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 getView on GitHub (pinned to c8fc3bf8d3)
Solutions
- Install the channel: run 'npx playwright install chrome' (or 'msedge', 'chromium') for the browser you launch.
- Drop the channel option to fall back to the bundled browser, or set executablePath explicitly to a known binary.
- 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
- Run 'npx playwright install <channel>' as part of CI provisioning.
- Validate the channel name against the supported list before calling launch.
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
- Failed to launch the browser process.\nBrowser logs:\n${upda
- Failed to launch ${this._name} because executable doesn't ex
- Playwright manages remote debugging connection itself.
- Arguments can not specify page to be opened
- Connecting to ${channel} by channel name is not supported on
AI-assisted analysis of microsoft/playwright@c8fc3bf8d3 (2026-08-12).
Data as JSON: /api/errors/3c38e94a7da473a3.
Report an issue: GitHub.