Plate 44
Playwright vs Cypress: 1.47s vs 4.24s Smoke
Playwright 1.55.1 Chromium vs Cypress 14.5.4 Electron on one local smoke (visit /, assert h1, click, assert). Warm medians (7 rounds after 1 warm-up): Playwright 1,466 ms vs Cypress 4,243 ms (~2.9x). Disk: PW node_modules ~12 MB + cache ~918 MB; Cypress node_modules ~23 MB + cache ~601 MB. Fixture /workspace/bench-pw-cy/.
Aditya Challa4 min read
I timed one identical browser smoke seven times on this box: Playwright 1.55 (Chromium) median 1,466 ms, Cypress 14.5 (Electron) median 4,243 ms — about 2.9× slower for the same visit, assert, click, assert. Warm-up already discarded; both exited 0 every round.
Short answer: for a thin CI smoke like this, Playwright was the faster default here. Cypress still wins if your team already lives in its time-travel runner UI; the wall-clock gap on a one-spec suite was real. No affiliate links in this post.
What I tested
- Machine: 8 vCPU Intel Xeon / 15 GB RAM shared Linux cloud box, tested 6 Oct 2026 about 00:15–00:16 IST.
- Versions: @playwright/test 1.55.1 with Chromium headless shell; Cypress 14.5.4 headless Electron; Node 22.20.0. Static fixture served at http://127.0.0.1:4177/.
- Fixture: /workspace/bench-pw-cy/. One page with #title, a button, and #out. Spec: visit /, assert title text, click, assert "clicked". Playwright project workers=1; Cypress video off.
- Timing: wall clock around each CLI (
playwright testvscypress run --browser electron --headless). One warm-up each, then 7 interleaved timed rounds. Caches already populated (browsers preinstalled). - Findings: Playwright median 1,466 ms (min 1,433 / max 1,601). Cypress median 4,243 ms (min 4,066 / max 4,396). Ratio ~2.9×.
- Footprints on disk after install: Playwright node_modules ~12 MB + ms-playwright cache ~918 MB; Cypress node_modules ~23 MB + Cypress cache ~601 MB.
- One surprise: Cypress Electron cache was smaller than Playwright's Chromium cache here, yet every warm run still cost about three Playwright smokes.
- Not tested: Firefox/WebKit, Cypress Chrome channel, parallel shards, component testing, trace viewer UX, flaky-test tooling, Windows or macOS, Auth/SSO flows.
How wide was the smoke gap?
| Runner (1 smoke, warm) | Browser | Median wall | Min / Max |
|---|---|---|---|
Playwright 1.55 test | Chromium | 1,466 ms | 1,433 / 1,601 |
Cypress 14.5 run | Electron | 4,243 ms | 4,066 / 4,396 |
Same assertions, same local static server, same box. Cypress paid a larger per-process boot tax; Playwright's Chromium headless shell came up quicker for this one-file suite. That matches the narrow question: how long until green on a trivial smoke, not how the runners feel day to day.
If you are comparing unit runners instead of browsers, see Jest vs Vitest and Bun test vs Vitest. For a recent Playwright release note on this site, see Playwright 1.63 test locks.
Does the browser channel change the call?
Yes, partly. I did not run Cypress against Chrome or Playwright against Firefox. Electron vs Chromium is not an apples-to-apples engine match. Treat the 2.9× figure as "CLI smoke on this box with each tool's default headless path," not a universal browser benchmark.
Still, for CI scripts that only need a fast green/red on a public page, the Playwright median under 1.5 s was consistently ahead of Cypress past 4 s. Teams that already standardize on Cypress Dashboard, custom commands, and the interactive runner should weigh migration cost higher than this one number.
Should you switch for a one-spec smoke?
| Situation | My pick |
|---|---|
| New greenfield app, CI needs a cheap smoke | Playwright |
| Existing Cypress suite and shared custom commands | Stay on Cypress |
| Multi-browser matrix (Chromium + Firefox + WebKit) | Playwright first |
| Team depends on Cypress time-travel UI daily | Cypress |
| Component tests inside Vite already on Vitest | Prefer Vitest 5 upgrade notes plus Playwright for e2e |
| Network mocking at the service-worker layer | Pair with MSW vs nock regardless of runner |
Bottom line: on one smoke, Playwright returned in 1.47 s median while Cypress needed 4.24 s. Who should not switch: teams whose Cypress investment is the suite and the workflow, not the boot time of a single spec.
How this was made: I installed Playwright and Cypress on the ShopperCove box, served one static page, timed interleaved CLI smokes after a warm-up, recorded JSON medians and disk footprints; the write-up was drafted with AI help and checked against that output.
Sources
- https://playwright.dev/docs/intro
- https://docs.cypress.io/app/get-started/why-cypress
- https://www.npmjs.com/package/@playwright/test
- https://www.npmjs.com/package/cypress
- https://github.com/microsoft/playwright
Related
- https://www.shoppercove.com/blog/playwright-1-63-test-locks-october-2026
- https://www.shoppercove.com/blog/jest-vs-vitest
- https://www.shoppercove.com/blog/bun-test-vs-vitest
- https://www.shoppercove.com/blog/vitest-5-should-you-upgrade-october-2026
- https://www.shoppercove.com/blog/msw-vs-nock
- https://www.shoppercove.com/blog/jsdom-vs-happy-dom-vitest
- https://www.shoppercove.com/blog/c8-vs-nyc
- https://www.shoppercove.com/blog/lefthook-vs-husky
Lab evidence
What I found running this
Hands-on on ShopperCove box 6 Oct 2026 ~00:15–00:16 IST (8 vCPU Intel Xeon / 15 GB shared Linux, Node 22.20.0). @playwright/test 1.55.1 Chromium headless shell; Cypress 14.5.4 headless Electron. Fixture /workspace/bench-pw-cy/: static page at 127.0.0.1:4177 with #title/#btn/#out; one smoke each. Wall clock around CLI; 1 warm-up + 7 interleaved rounds. Medians PW 1466 ms (1433–1601) vs Cypress 4243 ms (4066–4396). Footprints: ms-playwright cache ~918 MB, Cypress cache ~601 MB; pw/node_modules ~12 MB, cy/node_modules ~23 MB. Raw: /workspace/bench-pw-cy/res-pw-cy.json. Not tested: Firefox/WebKit, Cypress Chrome, parallel shards, component testing, trace UX, Windows/macOS. No affiliate.
Related links
Plate 46
esbuild-register vs jiti: 343ms vs 540ms Cold
esbuild-register 3.6.0 vs jiti 2.7.0 on a 61-file TypeScript graph: cold wall medians 343 ms vs 540 ms (~1.57x); after jiti disk cache warm, 185 ms vs esbuild-register 350 ms. Same printed result 970.
5 Oct 2026
Plate 45
Should You Leave Depcruise? 679ms Test
Madge 8.0.0 vs dependency-cruiser 16.10.2 on 116 JS files: median wall 679 ms vs 1122 ms (~1.65x). Both found the same 2 circular dependency groups. Depcruise also reported 120 modules / 193 dependencies.
5 Oct 2026
Plate 94
Should You Leave Prettier? 1.59s vs 0.51s
dprint 0.60.1 vs Prettier 3.9.9 on 180 files (120 JS + 40 JSON + 20 MD, 38925 B pristine): write medians 514 ms vs 1586 ms; check 455 ms vs 1313 ms. Output 44805 vs 45285 B. All 120 JS files differed on arrow-param parentheses under these defaults.
5 Oct 2026