Released Jun 9, 2026 Performance: The Command Log no longer becomes progressively unresponsive when moving the mouse in and out of a test's command list during long tests. Hovering over the command area previously triggered a style recalculation across the entire list of commands, causing a delay that grew with the number of commands logged. Fixes #33179 . Fixed a memory leak where runs with screenshotOnRunFailure enabled slowed down progressively, as each failure screenshot was retained in memory for the rest of the run. Fixes #33516 . Features: Added Bun as a recognized package manager. The cypress npm package can now be installed and invoked with Bun (for example bun run cypress open or bun run cypress run ). Addresses #28962 . Addressed in #32580 . Cypress.expose() values can now be overridden per suite or test via test config overrides (for example, describe() , context() , it() , or test() ) using { expose: { key: value } } . Suite- and test-level overrides are merged, with test-level keys taking precedence; override keys are applied at test start and restored after each test without affecting unrelated values set in hooks. Addresses #33356 . Addressed in #33925 . When signing up to Cypress Cloud from the Cypress desktop app, if a project is auto-provisioned during signup, Cypress now automatically writes the projectId to the cypress.config file. If the file cannot be written, a modal is shown with the project ID as a copyable snippet and a link to open the config file directly in your IDE. Addressed in #33976 . Improved CI environment detection and commit metadata capture for Cypress Cloud recorded runs within Argo CD and Argo Workflows. Addressed in #33932 . Bugfixes: Video recording no longer silently fails on Firefox 93+, where it previously produced no video and ended with a We failed processing this video or operation timed out warning. Fixes #18415 . Fixed in #33960 . Fixed an issue where, in the Electron browser, navigating away from a page whose beforeunload handler requested a confirmation prompt (for example window.onbeforeunload = () => 'message' or a beforeunload listener that sets event.returnValue ) would hang and eventually fail the command with a page load timeout. Such navigations — including cy.visit() , cy.reload() , and clicking links — now proceed automatically without the confirmation prompt blocking the test, matching the behavior in Chrome. Fixes #2118 . Fixed an issue where config.isInteractive was always true in the config passed to the plugins / setupNodeEvents function, even during cypress run . The value is now correctly false in run mode and true in open mode, so plugins can reliably distinguish between the two. Fixes #20789 . Fixed an issue where component tests, and end-to-end tests using a local baseUrl , could fail to start with Cypress could not verify that this server is running when an HTTPPROXY environment variable was set. Local hosts excluded from the proxy via NOPROXY (such as localhost , 127.0.0.1 , and ::1 , which includes the component testing dev server) are now verified with a direct connection instead of being routed through the proxy. Fixes #27990 . Fixed an issue where cy.wait('@alias') could time out when the connection to the browser closed before an aliased intercepted request's response completed, including during navigation such as cy.visit() . Fixes #19326 . Fixed an issue where cy.request() with a FormData body failed to upload when a Content-Type header was provided with non-lowercase casing (for example 'Content-Type': 'multipart/form-data' ). Cypress now correctly replaces the user-provided header with the generated multipart/form-data boundary instead of sending two conflicting content-type headers, which previously caused the server to reject the request with a 400 or empty body. Fixes #21173 . Fixed an issue where Cypress could load the config file through the wrong module system (for example, treating an ESM config as CommonJS), so ESM-only APIs such as import.meta.resolve were unavailable in config and plugin code. Cypress now picks ESM or CJS before loading, using Node.js rules from the config file extension and the nearest package.json "type" , then loads only via import() or require() and fails outright on error instead of retrying the other format: .mjs and .mts always load as ESM .cjs and .cts always load as CJS .js and .ts load as ESM when the nearest package.json has "type": "module" ; CJS is loaded otherwise Fixes #33801 . Addresses #33892 . Fixed an issue where a recorded Chrome or Electron run could hang for the duration of the spec timeout when the renderer crashed mid-spec, instead of failing the affected spec and continuing. Fixed in #33943 . Fixed an issue where tests in Chrome and Electron could fail when the application made cross-origin requests to local or private network addresses (for example, a login or OAuth flow that redirects between local development hosts). Chrome 141 began enforcing Local Network Access checks that gate such requests behind a permission prompt the automated browser cannot answer. Cypress now opts out of these checks so these requests succeed as they did in Chrome 140. Fixes #32708 . Fixed an issue where, after a same-origin fetch or XHR request updated a cookie, a subsequent page navigation or reload could send the previous (stale) cookie value to the server instead of the updated one. Fixes #25841 . Fixed an issue where a cross-origin navigation back to a previously-visited origin (for example, completing a login that redirects from an identity provider back to your application) could intermittently load the Cypress app interface instead of your application, causing flaky tests. Fixed in #33991 . Fixed an issue where a cy.origin() test could intermittently fail with The command was expected to run against origin but the application is at origin when a navigation (such as a login redirect) ran on the primary origin shortly after the runner switched super-domains. A stale int...
Jun 09, 2026