Skip to content
Latchkey

Cypress "The Cypress App could not be downloaded" in CI

Cypress downloads a separate binary after npm install, and that fetch failed. In CI the cause is usually a proxy or firewall blocking the download server, a timeout, or a mirror configured through CYPRESS_INSTALL_BINARY that is unreachable.

What this error means

The install fails with "The Cypress App could not be downloaded" and a URL, often with "Response code 403" or a connection error, before any spec runs.

Cypress
The Cypress App could not be downloaded.
Please check network connectivity and try again:
  https://download.cypress.io/desktop/13.9.0?platform=linux&arch=x64
  ----------
  Response code 403 (Forbidden)

Common causes

A proxy or firewall blocks the download server

The CI egress rules deny download.cypress.io, so the binary fetch returns 403 or times out.

A misconfigured internal mirror

CYPRESS_INSTALL_BINARY points at a mirror that is down, requires auth, or serves the wrong version.

How to fix it

Point Cypress at an approved mirror or proxy

Set the binary URL to an allowed host, or route the download through the CI proxy.

.github/workflows/ci.yml
env:
  CYPRESS_INSTALL_BINARY: https://mirror.internal.example.com/cypress/13.9.0.zip
  HTTPS_PROXY: http://proxy.internal.example.com:8080

Cache the binary so downloads are rare

Persist the Cypress cache folder across runs so a blocked or slow download is not on the path every time.

.github/workflows/ci.yml
- uses: actions/cache@v4
  with:
    path: ~/.cache/Cypress
    key: cypress-${{ hashFiles('package-lock.json') }}

How to prevent it

  • Allowlist download.cypress.io (or a mirror) in CI egress rules.
  • Cache ~/.cache/Cypress keyed on the lockfile.
  • Keep CYPRESS_INSTALL_BINARY pointed at a version that exists on the mirror.

Related guides

Tired of flaky CI? Latchkey auto-heals failed jobs and retries them for you. Start free →