This episode explores the history and background behind Cypress, its evolution from a personal project into an open-source framework, the advantages of real-time reload and automatic waiting, and comparisons with Selenium, Playwright, and Jest to decide when to choose Cypress.

Episode 0 made sure your environment is ready. Now it's time to understand why Cypress exists. Episode 1 answers three big questions: where Cypress came from, what advantages it offers, and why you would choose it over other tools.
Many people start using Cypress because of a tutorial, but understanding its background is far more valuable. By knowing the problem it solves, you will find it easier to decide when to use Cypress, when to use Playwright, and how to position it within your team's quality assurance strategy.
Cypress was developed by Brian Mann around 2015. Its motivation was simple: frustration with Selenium's limitations — slow, flaky, hard-to-debug tests that run through WebDriver outside the browser. Brian chose a different architecture: Cypress runs inside the browser alongside the application under test.
Cypress 1.0 was publicly released in 2017, and since 2019 the project has been open source under the MIT license. Unlike the old model, there is no separate server and no WebDriver — and this changed how engineers write and debug tests.
The unique architecture drove rapid growth. The community, plugins, and CI support grew together, and Cypress became one of the most widely used E2E frameworks in the world. As of 2026, Cypress continues to be updated with features such as component testing, cross-origin testing via cy.origin(), and experiments in browser memory management so large suites don't bloat.
npx cypress versionThe npx cypress version command shows the installed version. Get into the habit of checking this regularly because Cypress releases several times a year.
Cypress's version journey marks the growing maturity of its feature set:
cy.intercept(), replacing cy.route() for network stubbing.cy.origin() and stability improvements for large-scale suites.Recent releases also brought built-in test retries and tighter integration with Git and CI. Following the official changelog is a good habit before updating the framework in your projects.
When you write tests in the Test Runner, Cypress automatically reloads the test every time a file is saved. If you fix a selector, you see the result immediately without pressing a button. This experience dramatically shortens the feedback loop — something classic Selenium does not offer.
Cypress automatically waits for elements before running an action. Commands like cy.get() wait for an element to appear in the DOM by default, without any manual sleeps. We will dissect this mechanism fully in episode 5.
Tip
Compare this with classic Selenium: you had to write explicit waits or guess at safe sleep durations. Cypress removes that guesswork — focus on the test flow, not on timing.
Every Cypress command records a snapshot: you can hover over commands in the Test Runner and see exactly what the page looked like at that point. Combined with the Cypress Dashboard for recording videos, screenshots, and CI run analytics, debugging becomes much easier. We will explore the dashboard in episode 11.
| Aspect | Cypress | Selenium | Playwright | Jest |
|---|---|---|---|---|
| Architecture | In-browser + Node proxy | WebDriver | CDP + Node | Node runtime |
| Automatic waiting | Built-in | Manual | Built-in | Not relevant |
| Languages | JavaScript/TypeScript | Many languages | JavaScript/Python/etc. | JavaScript |
| Focus | E2E + component | Multi-language E2E | Cross-browser E2E | Unit/component |
| Cross-browser | Chrome/Edge/Firefox/WebKit | Very broad | Chrome/Firefox/WebKit | No browser |
Key differences: Selenium emphasizes language and browser flexibility, Playwright offers fine-grained browser control via the Chrome DevTools Protocol, while Jest is used for unit testing, not E2E. Cypress excels in debugging ease and developer experience, while Playwright excels in multi-browser execution speed.
You don't have to pick just one. Many teams use Jest for unit tests, Cypress for E2E, and perhaps Playwright for specific needs. What matters is understanding each one's strengths.
When should you choose Cypress? When your priorities are developer experience, visual debugging, and a single language (JavaScript) for the whole team. When should you choose Playwright? When you need aggressive parallel execution speed and cross-language support. They are not enemies — many organizations even run both in the same pipeline.
Cypress's primary case: testing complete flows from the UI to the backend. Login, checkout, search, onboarding — everything real users do can be mapped into tests. This is the core part of phase 3 of this series.
describe("Checkout flow", () => {
it("completes a purchase from the cart", () => {
cy.visit("/products");
cy.get("[data-cy=add-to-cart]").click();
cy.get("[data-cy=checkout]").click();
cy.url().should("include", "/checkout");
});
});cy.get("[data-cy=add-to-cart]") selects the add-to-cart button via the data-cy attribute, then .click() mimics a user click. We will dig deeper into this visit, get, action, assert pattern in episode 4.
Since Cypress 9, you can test React, Vue, and Angular components in isolation at speeds close to unit tests, but with real browser rendering. We will cover this in episode 9.
Cypress is also well suited to testing cooperation between application modules — for example, making sure a frontend form sends correct data to an API, whether the real API or a stub via cy.intercept(). We will dissect this in episode 12.
Episode 1 gave you context: Cypress was born around 2015 out of frustration with Selenium, publicly released in 2017, and open source since 2019. Its strengths are real-time reload, automatic waiting, debuggability, and the dashboard. Compared with Selenium, Playwright, and Jest, Cypress stands out for developer experience and its E2E and component testing focus.
The key takeaways:
In the next episode, episode 2, we will cover Cypress core concepts and architecture — the Test Runner, Dashboard, and plugin components, how Cypress runs in the browser and Node.js, the test lifecycle with hooks, and the project structure and basic configuration. This is the architectural foundation that will accompany the entire series.