Cypress vs Playwright
Both are actively developed, both give you a real browser and a decent debugger. The axis this pairing turns on is who owns parallelism: on Cypress it is a recorded, metered Cloud feature, and on Playwright it is a flag on the CLI. Everything else is a trade between a nicer interactive runner and broader browser and tab coverage.
Pick Playwright if you need cross-machine parallelism without a per-test-result bill, real WebKit coverage, multiple tabs or cross-origin flows as normal cases, or a language other than JavaScript. Stay on Cypress if the time-travel runner is what keeps your team writing tests, your suite fits inside the Cloud quota you already pay for, and the app is single-origin: a rewrite is the real price here, and it is paid in spec files.
Side by side
Cypress vs Playwright at a glance
| Cypress | Playwright | |
|---|---|---|
| Licence | MIT runner, commercial Cloud | Apache-2.0, no commercial tier |
| What you pay for | test results recorded to the Cloud | nothing, only your CI compute |
| Free plan | 500 test results a month, 30-day retention | ✓ no plan, no account |
| Entry paid tier | Team $67/mo or $799/yr, 120k results a year | n/a |
| Next tier up | Business $267/mo or $3,199/yr, same 120k results | n/a |
| Parallel across machines | ✗ --parallel requires --record | ✓ --shard=1/4 plus merge-reports |
| Load balancing by duration | ✓ the Cloud does it for you | ✗ shards split by count |
| Browsers | Chromium family, Firefox, Electron; WebKit experimental | ✓ bundled Chromium, Firefox and WebKit |
| Multiple tabs and origins | ✗ one browser, one superdomain per test, cy.origin as workaround | ✓ contexts, tabs and origins are first class |
| Languages | JavaScript and TypeScript only, by design | ✓ JS/TS, Python, Java, .NET |
| Interactive debugging | ✓ time-travel runner, still the best in class | UI mode, trace viewer, codegen |
| Best for | teams who value the debugging loop above all | free parallel CI, cross-browser, polyglot teams |
Sources: Cypress Cloud pricing · Cypress trade-offs · Cypress parallelization docs · Playwright sharding docs. Compiled July 2026.
Where Playwright wins
Parallelism costs nothing
This is the whole reason the pairing gets searched. The Cypress docs state that running tests in parallel requires the --record flag, which means a Cypress Cloud project and a record key, because the Cloud is what receives the spec list and distributes it. Playwright ships the same capability as two commands: playwright test --shard=1/4 on each machine, then playwright merge-reports to stitch the blob reports into one report. The docs describe this as working on any CI provider without an external service. On the free Cypress tier the difference is sharper than a price: at 500 recorded results a month, hitting the cap disables parallelization outright.
WebKit is a real browser, not an experiment
Playwright downloads and drives patched Chromium, Firefox and WebKit builds itself, so Safari-family coverage is a project you configure rather than a caveat you accept. Cypress runs Chromium-family browsers, Firefox and Electron, with WebKit support still carrying an experimental label. If Safari bugs are the ones reaching your users, that alone can decide it.
Tabs, windows and cross-origin flows stop being workarounds
Cypress documents its own boundaries plainly: it "does not support controlling more than 1 open browser at a time", and each test is "bound to a single superdomain", with cy.origin as the escape hatch. OAuth redirects, payment providers and multi-user chat flows all live on the wrong side of that line. Playwright models browser contexts, pages and origins as ordinary objects, which is why multi-role tests read like normal code there.
The ecosystem momentum is measurable
In the month to 28 July 2026, @playwright/test recorded about 197.2 million npm downloads against 30.5 million for cypress. Treat that as installs rather than teams: CI re-downloads on every run, and other tools pull Playwright in as a dependency. Even discounted, it is the direction third-party integrations are being written for, including Currents, whose dashboard is now Playwright-first.
Where Cypress still wins
The interactive runner has not been rebuilt anywhere. Stepping through a failed run, hovering a command and seeing the DOM as it was at that moment is why plenty of teams write tests at all, and Playwright's trace viewer, good as it is, is a post-mortem rather than a live loop. Cypress is also not standing still: v15.19.0 shipped on 21 July 2026, roughly two weeks after v15.18.1, which is a normal cadence and not the profile of a dying tool.
Cypress Cloud also earns its money in one specific place. It balances specs across machines by measured duration and can cancel a run as soon as a failure makes the rest pointless. Playwright shards split by spec count, so one slow file skews a shard, and nothing cancels the other shards for you. If your suite is uneven and your quota is already paid for, that orchestration is worth something real.
Migrating Cypress to Playwright
The path most teams take:
1. Inventory first. Count custom commands in support/, every cy.intercept alias, and anything reaching into the app through cy.window or cy.stub. Those are the items with no one-line equivalent. There is no official converter, so anything promising a drop-in rewrite deserves suspicion.
2. Change the waiting model, not just the syntax. Selectors and navigation port almost mechanically. What does not is retry-ability: Cypress retries the command chain, Playwright retries the assertion through expect. Ported tests that pass locally and flake in CI are usually this, not infrastructure.
3. Run both for one release cycle. Keep the Cypress suite green while the Playwright one grows, and compare failures rather than counts. Be honest that the overlap period costs double in CI minutes, and on Cypress it still burns recorded test results.
4. What does not move. Your Cypress Cloud run history, flake analytics and screenshots stay behind. Export anything you report on before you cancel the plan, because retention on the free tier is 30 days.
Common questions
FAQ: Cypress vs Playwright
How long does a Cypress to Playwright migration actually take?
Budget per spec file, not per suite. There is no official converter, and the parts that carry real work are custom commands, cy.intercept aliasing and anything that reached into the app through cy.window. Selectors and navigation move quickly; retry-ability assumptions do not, because Playwright's auto-waiting attaches to the assertion via expect rather than to the command chain. Most teams migrate the smoke suite first, keep both suites green for a release cycle, then port the long tail.
Does Playwright really run tests in parallel for free?
Yes, in two independent ways. Inside one machine, the runner uses worker processes by default. Across machines, playwright test --shard=1/4 splits the suite and playwright merge-reports stitches the blob reports back into one HTML report. The docs describe this as working on any CI provider with no external service. Cypress reserves cross-machine parallelism for runs recorded to Cypress Cloud, which is the paid part.
Is Playwright more popular than Cypress in 2026?
By npm downloads, clearly: @playwright/test pulled about 197.2 million downloads in the month to 28 July 2026 against 30.5 million for cypress. Read that as installs rather than teams, since CI pipelines re-download on every run and Playwright is also installed as a dependency by other tools such as Vitest Browser Mode. The direction is real, the ratio is not a headcount.