Skip to content
Latchkey

Playwright "Timed out waiting ... from config.webServer" in CI

Playwright started your app via webServer but the configured url never responded within the timeout. The server is slow to compile/boot in CI, crashed on start, or the url/port does not match.

What this error means

The run aborts before tests with "Timed out waiting 60000ms from config.webServer." No specs run because Playwright never confirmed the app was ready.

playwright
Error: Timed out waiting 60000ms from config.webServer.

  at WebServer._waitForProcess

Common causes

App boots slower than the timeout in CI

A cold production build on a loaded runner takes longer than the default 60s readiness window - a timing race that often clears on retry.

Wrong url/port or a crashed server

The webServer.url does not match where the app listens, or the start command exits immediately, so the url never becomes reachable.

How to fix it

Raise the readiness timeout and match the url

playwright.config.ts
// playwright.config.ts
export default defineConfig({
  webServer: {
    command: 'npm run start',
    url: 'http://localhost:3000',
    timeout: 180_000,
    reuseExistingServer: !process.env.CI,
  },
});

Diagnose a server that never starts

  1. Run the command manually in CI to confirm it boots and listens on the expected port.
  2. Check the server logs Playwright prints for a startup crash.
  3. Build the app in a prior step so webServer only serves, not compiles.

How to prevent it

  • Set a generous webServer.timeout for the slowest CI tier.
  • Pre-build the app before the E2E step so boot is fast.
  • Keep webServer.url and the app port in one shared value.

Frequently asked questions

What causes ""config.webServer" timed out"?
A cold production build on a loaded runner takes longer than the default 60s readiness window - a timing race that often clears on retry.
How do I fix "config.webServer" timed out?
Raise the readiness timeout and match the url
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