Which frameworks and bundlers does Cypress 16 support for component tests?
answer
- Four official mount libraries, not one adapter
- The bundler choice is a two-item list
- Two frameworks accept only one bundler
- Cypress 16 raised several version floors
- Svelte still carries alpha support status
basics
~10 sCypress 16 ships official mount libraries for React 18-19, Vue 3, Angular 21-22 and Svelte 5, served by Vite 8 or Webpack 5. Angular and Next.js 15-16 are Webpack-only, and Svelte is still alpha.
solid answer
~40 sCypress Component Testing officially supports four UI frameworks, each with its own mount library shipped inside the `cypress` package: `cypress/react`, `cypress/vue`, `cypress/angular` and `cypress/svelte`. As of Cypress 16 the supported ranges are React 18-19, Vue 3, Angular 21-22 and Svelte 5. There are exactly two dev servers, chosen through `component.devServer.bundler`: `'vite'` (Vite 8) and `'webpack'` (Webpack 5). React, Vue and Svelte accept either; `framework: 'angular'` and `framework: 'next'` are Webpack-only, and Next.js must be 15.0.4 or 16. Svelte carries alpha support status, so its mount API can still change. Qwik and Lit exist only as community plugins, not as values Cypress ships. Anything outside that grid — Rollup, esbuild, Parcel, an older Angular — has no Cypress dev server behind it.
go deeper
Be ready to name the four official frameworks and the two bundlers without looking them up, and to say that both mount libraries and dev servers ship inside the cypress package.
Explain why the matrix is a pairing rather than two independent lists — Angular and Next.js run only on Webpack — and what an alpha support status actually promises.
Show that you check the matrix against the versions in the repository before promising a team component coverage, rather than against a remembered blog post.
Own the consequence that adopting this runner couples your framework and bundler upgrade cadence to someone else's release schedule, and decide whether that trade is acceptable.
Cypress Component Testing does not render your component through a generic adapter. Every UI framework gets its own **mount library**, shipped inside the `cypress` package itself, and every pairing of framework with bundler is a combination Cypress explicitly builds, tests and version-pins. The list is short, it is versioned, and it moves at every major release. So "does Cypress support my stack?" is really two questions: is my framework on the list at all, and is the version I run inside the supported range? ## The Cypress 16 matrix | Framework | UI library version | Bundler | | --- | --- | --- | | React with Vite | React 18-19 | Vite 8 | | React with Webpack | React 18-19 | Webpack 5 | | Next.js 15-16 | React 18-19 | Webpack 5 | | Vue with Vite | Vue 3 | Vite 8 | | Vue with Webpack | Vue 3 | Webpack 5 | | Angular | Angular 21-22 | Webpack 5 | | Svelte with Vite (alpha) | Svelte 5 | Vite 8 | | Svelte with Webpack (alpha) | Svelte 5 | Webpack 5 | Three things in that grid are easy to skim past: - **There are exactly two bundlers.** `component.devServer.bundler` accepts `'vite'` or `'webpack'` and nothing else. Cypress ships a Vite dev server and a Webpack dev server inside the binary; there is no Rollup, esbuild, Parcel or Rspack option to select. - **Not every framework offers both.** `framework: 'angular'` and `framework: 'next'` are Webpack-only. React, Vue and Svelte accept either bundler. - **Svelte is alpha.** Cypress grades each integration `alpha`, `beta`, `full` or `community`. React, Vue, Angular and Next.js are `full`; Svelte is `alpha`, which means its mount API can still change between releases. ## What you import, and what it is called The `framework` string in your config and the module you import are deliberately different names: - `framework: 'react'` and `framework: 'next'` both mount through `cypress/react`. - `framework: 'vue'` mounts through `cypress/vue`. - `framework: 'angular'` mounts through `cypress/angular`. - `framework: 'svelte'` mounts through `cypress/svelte`. None of those modules is a separate npm install. They ride inside the `cypress` package, as do the two dev servers, which is why a component project's `package.json` usually lists only `cypress` plus your own framework and bundler. What you do install is the framework itself at a supported version — that is the half Cypress cannot supply. ## Off the list: community and unsupported Two integrations exist as community plugins rather than Cypress-shipped values: Qwik and Lit, both on Vite. They are maintained outside the Cypress repository, so they follow their own release cadence and are not covered by the matrix above. Everything else — Solid, Ember, Lit without that plugin, a hand-rolled web-component library — has no Cypress mount library at all. That is a real constraint on a design system. If your rating widget, data grid and toast are published as framework-agnostic web components, there is no first-party `cypress/*` mount for them; you mount them by rendering the custom element into the page yourself and driving it with ordinary Cypress commands, which works but gives you none of the framework-aware conveniences. ## Why the ranges are narrow, and why they move A mount library is not a thin wrapper. It has to create the framework's root, apply props, drive its change-detection or reconciliation model, and tear the tree down between tests — all against internal APIs that shift between framework majors. Cypress therefore supports a window rather than a floor, and each major release moves the window: 1. Cypress 16 removed Angular 18, 19 and 20; the minimum is now Angular 21, and Angular 22 is supported. 2. Cypress 16 removed Vite 5, 6 and 7 for the Vite dev server; the minimum is Vite 8. 3. Cypress 16 removed Next.js 14; Next.js 15.0.4 or 16 is required. The practical consequence is that "we use Cypress for component tests" is a statement about your framework and bundler versions too. Before you promise a team component coverage, check the matrix against the versions actually in the repository — not against the version you remember, and not against a blog post written for an earlier Cypress major. ## Checking your own project The Cypress Launchpad detects your framework and bundler on first run and lists the dependencies it needs, flagging any that are missing or below the supported range. That wizard is the fastest honest answer to "will this work here": if it reports a version below the floor, the answer is that you upgrade the framework first and add component tests second. Reading the matrix yourself is the same check done ahead of time, which is what an interviewer is usually probing for.
- Where do the `cypress/react` and `cypress/vue` mount modules come from — are they separate packages?They ship inside the `cypress` package itself, along with the Vite and Webpack dev servers. You do not install `@cypress/react` or `@cypress/vite-dev-server` separately. What you do install is your own framework and bundler at a version inside the supported range, since Cypress cannot supply those.
- Your design system publishes framework-agnostic web components. What are your Cypress component-testing options?There is no first-party mount library for plain custom elements, so no `framework` value fits. You can still run a component project with a bundler you do support, render the custom element into the mounted tree yourself, and drive it with ordinary Cypress commands — you simply get none of the framework-aware mounting conveniences.
saying these in an interview costs you the question
- Claims Cypress can mount any framework with a plugin
- Names Rollup or esbuild as a Cypress bundler option
- Assumes Angular component tests can run on Vite
- Treats Svelte support as stable and finished
- Quotes framework versions from an older Cypress major