v16.0.0
Added 2
- A forceHttp1 configuration option now allows routing every browser through the legacy network path during migration
- A removeSRIAttributes configuration option is now available to address Subresource Integrity errors
Changed 6
- Chrome, Chromium, and Edge now intercept test traffic on the native browser network rather than routing through Cypress, negotiating HTTP/2 or HTTP/3 with your server instead of being downgraded to HTTP/1.1
- Bundled Node.js version has been upgraded from 22.19.0 to 24.15.0
- The experimentalMemoryManagement configuration option has been replaced by manageBrowserMemory, which defaults to true and is now enabled by default in Chromium-based browsers
- The default keystrokeDelay for cy.type() has been changed from 10 to 0 to improve performance
- The experimentalFastVisibility flag has been replaced with a visibilityStrategy configuration option that accepts 'legacy' or 'modern', defaulting to 'modern' which uses the browser's native Element.checkVisibility() API
- cy.intercept() behavior has changed such that req.httpVersion is no longer reported and compression headers are no longer present on intercepted responses when using native network interception
Removed 5
- Support for Node.js 20 and Node.js 25 has been removed; Cypress now requires Node.js ^22.0.0, ^24.0.0, or >=26.0.0
- The Cypress.env() method has been removed; use Cypress.expose() for non-sensitive values and cy.env() for sensitive values
- The cy.exec() command and execTimeout configuration option have been removed; use cy.task() and taskTimeout instead
- The cy.end() command, which ended a chain by yielding null, has been removed
- The experimentalSourceRewriting configuration option has been removed
From Cypress
Breaking Changes:
- Chrome, Chromium, and Edge intercept test traffic on the native browser network rather than routing it through Cypress, so your application negotiates HTTP/2 or HTTP/3 with your server as it does in production instead of being downgraded to HTTP/1.1. A small number of
cy.intercept()behaviors differ as a result: most notably,req.httpVersionis no longer reported, and compression headers are no longer present on an intercepted response. Firefox, WebKit, and Electron continue to use the legacy network path, andforceHttp1routes every browser back through it while you migrate. See Native network interception and the Migration Guide. Addresses #3708. - Removed support for Node.js 20 and Node.js 25. Cypress now requires Node.js
^22.0.0,^24.0.0, or>=26.0.0. Addresses #33705 and #33778. Addressed in #33771. - Upgraded bundled Node.js version from
22.19.0to24.15.0. Addressed in #33494. - Removed
Cypress.env(). UseCypress.expose()for non-sensitive values that need to be readable in the browser, andcy.env()for sensitive values that must remain in the Node process. Theenvkey is no longer supported in per-test or suite config overrides; useexpose: { KEY: value }instead if absolutely necessary. TheallowCypressEnvconfiguration option has also been removed. See the Migration Guide. Addresses #33889. Addressed in #33963. - Removed the
cy.exec()command and theexecTimeoutconfiguration option, both deprecated in Cypress15.21.0. Usecy.task()andtaskTimeoutinstead — a task runs in Node without depending on the operating system, shell, or terminal of the machine running Cypress. Callingcy.exec()now throws, and settingexecTimeoutprints a warning and is otherwise ignored. See the Migration Guide. Addresses #34694. - Removed the
cy.end()command, which ended a chain of commands by yieldingnull. A Cypress chain is already terminated when the nextcy.<command>()starts a new chain, so existing.end()calls can simply be removed. See the Migration Guide. Addressed in #33696. - The
experimentalMemoryManagementconfiguration option has graduated out of experimental status and been replaced bymanageBrowserMemory, which defaults totrue. Memory management is now enabled by default in Chromium-based browsers. SettingexperimentalMemoryManagementprints a warning and is otherwise ignored — if you previously setexperimentalMemoryManagement: falseto opt out, you must now setmanageBrowserMemory: false. See the Migration Guide. Addresses #34385. - Removed the
experimentalSourceRewritingconfiguration option. The default regex-based source rewriting handles every case the AST-based rewriter did, so default behavior is unchanged and the option can be deleted from your config. If you were using it to work around Subresource Integrity errors, enableremoveSRIAttributesinstead. See the Migration Guide. Addresses #34213. - The default
keystrokeDelayforcy.type()has been changed from10to0to improve performance of typing-heavy test runs. Users who relied on the implicit 10ms delay can restore it by settingkeystrokeDelay: 10in their Cypress configuration or viaCypress.Keyboard.defaults(). Addresses #33523. - The experimental
experimentalFastVisibilityflag has been replaced with a newvisibilityStrategyconfiguration option that accepts'legacy'or'modern', defaulting to'modern'. The modern visibility algorithm, based on the browser's nativeElement.checkVisibility()API, is now the default for all users.visibilityStrategyis deprecated, so setvisibilityStrategy: 'legacy'only as a temporary migration path. See the Visibility Strategy guide for migration help. Addressed in #33794. cy.getCookie(),cy.getCookies()andcy.getAllCookies()are now query commands. They re-read the cookie(s) from the browser and retry any attached assertions until they pass or the command times out, socy.getCookie('token').should('exist')now waits for a cookie that is set asynchronously (for example, after a login request resolves) instead of failing on the first read. As a result, their timeout now followsdefaultCommandTimeout(default4000) rather thanresponseTimeout(default30000), and to overwrite these commands you must now useCypress.Commands.overwriteQuery()instead ofCypress.Commands.overwrite(). See the Migration Guide. Addresses #4802.viewportWidthandviewportHeightcan no longer be set viaCypress.config()during test execution. Mutating them this way affected the next test rather than the current one and was not reflected in Test Replay. Usecy.viewport()or set them in the test configuration of adescribe/contextoritblock instead. See the Migration Guide. Addresses #31592. Addressed in #34262.blockHostscan no longer be set viaCypress.config()during test execution. Mutating it this way affected the next test rather than the current one. SetblockHostsin the test configuration of adescribe/contextoritblock instead. See the Migration Guide. Addressed in #34553.cy.getAllLocalStorage()andcy.getAllSessionStorage()are now query commands. They re-read storage from all origins and retry any attached assertions until they pass or the command times out, socy.getAllLocalStorage().should(...)now waits for storage that is populated asynchronously instead of failing on the first read. To overwrite these commands you must now useCypress.Commands.overwriteQuery()instead ofCypress.Commands.overwrite(). See the Migration Guide. Addresses #26422. Addressed in #34318.- The
cypress infocommand no longer prints proxy environment variables (HTTP_PROXY,HTTPS_PROXY,NO_PROXY) orCYPRESS_*environment variables, so its output is safe to paste into a bug report. The command now reports only Cypress-specific details such as file paths, version, and system information. Addresses #34103. Fixed in #34314. - Removed built-in CoffeeScript support. The default
@cypress/webpack-batteries-included-preprocessorno longer bundlescoffee-loaderorcoffeescript, and.coffeeis no longer resolved for specs, support files, orcy.fixture(). Use JavaScript or TypeScript, or add CoffeeScript to your own webpack config via@cypress/webpack-preprocessor. See the Migration Guide. Addressed in #33654. - Cypress Component Testing raises its minimum supported framework versions:
Angularversions 18, 19, and 20 are no longer supported. The minimum supported version is now21.0.0. See the Migration Guide. Addresses #33005, #33655 and #33656.cypress/angular-zonelesshas been merged intocypress/angularand is no longer shipped with the Cypress binary, so update those imports tocypress/angular. The@cypress/angular-zonelessnpm package is deprecated and no longer supported. The zoneless test harness is now the default incypress/angular, sozone.jsno longer needs to be installed, and theautoSpyOutputsandautoDetectChangesmount options have been removed. Addresses #33007.@angular/platform-browser-dynamichas been replaced with@angular/platform-browser. Addresses #33006.@cypress/schematicnow requirescypress^16.0.0,@angular/cli>=21.0.0and@angular/core>=21.0.0, and no longer scaffolds thecypress/angular-zonelessmount handler. Addresses #33007.Viteversions 5, 6, and 7 are no longer supported when using the Vite dev server. The minimum supported version is now8.0.0. Upgrade Vite, and any@vitejs/*plugins that pin older major versions, before upgrading Cypress. Addresses #33724, #33725 and #33726. …