Skip to content
Latchkey

Playwright Browser Download Fails Behind a Proxy in CI

playwright install fetches browser binaries from a CDN. Behind a corporate proxy or in a locked-down CI network, that download is blocked or times out, so the browsers are never installed.

What this error means

npx playwright install fails with "Failed to download" or a connection timeout to the Playwright CDN. Later, tests fail with "browserType.launch: Executable doesn’t exist" because the binaries were never fetched.

Playwright output
Failed to download Chromium 123.0, caused by
Error: connect ETIMEDOUT 13.x.x.x:443

  at TLSSocket... (playwright-core/lib/server/registry/browserFetcher.js)

Common causes

Proxy or firewall blocks the download CDN

The runner cannot reach Playwright’s default download host directly. Without proxy settings the TLS connection times out or is refused.

No internal mirror configured

In an air-gapped or proxied network with no PLAYWRIGHT_DOWNLOAD_HOST mirror, there is nowhere reachable to fetch binaries from.

How to fix it

Point the installer at the proxy or a mirror

Provide proxy env vars, or a reachable internal download host.

Terminal
export HTTPS_PROXY=http://proxy.corp:8080
export PLAYWRIGHT_DOWNLOAD_HOST=https://npm-mirror.corp/playwright
npx playwright install --with-deps chromium

Use the official Docker image to skip downloads

Dockerfile
# Dockerfile / CI container
FROM mcr.microsoft.com/playwright:v1.44.0-jammy
# browsers are preinstalled in the image

How to prevent it

  • Use the official mcr.microsoft.com/playwright image so binaries ship in the image.
  • Configure HTTPS_PROXY and PLAYWRIGHT_DOWNLOAD_HOST in CI.
  • Cache the Playwright browsers directory between runs.

Frequently asked questions

What causes "Browser download fails (proxy)"?
The runner cannot reach Playwright’s default download host directly. Without proxy settings the TLS connection times out or is refused.
How do I fix Browser download fails (proxy)?
Provide proxy env vars, or a reachable internal download host.
Can Latchkey fix this automatically?
Yes. Latchkey runs your GitHub Actions on managed runners that detect this failure, apply the fix, and retry the job automatically - self-healing is on by default.

Related guides

References

Latchkey auto-heals failures like this one - detected, fixed, and retried without you. Start free → 30-day trial · No credit card