---
next_cursor: eyJzY29yZSI6MCwic2VxIjoxOTQyLCJzaW5jZSI6bnVsbCwidG9vbCI6ImN5cHJlc3MiLCJ2IjoxfQ
has_more: true
next: https://sincecutoff.com/v1/changes.md?tool=cypress&score=0&cursor=eyJzY29yZSI6MCwic2VxIjoxOTQyLCJzaW5jZSI6bnVsbCwidG9vbCI6ImN5cHJlc3MiLCJ2IjoxfQ
items: 10
---
# sincecutoff.com changes: cypress

## Cypress component testing supports experimentalRunAllSpecs (cypress, 2026-01-13)
Published 2026-10-19
- slug: cypress-component-testing-supports-experimentalrunallspecs-de68120b7dbe
- score: 0.91

How to use it:

When using Cypress 15.9.0 or later for component testing, set `experimentalRunAllSpecs: true` to enable the UI for running multiple specs sequentially.

Examples:

```
const { defineConfig } = require('cypress')
module.exports = defineConfig({
  experimentalRunAllSpecs: true,
  component: { /* <component testing configuration> */ },
})
```

- why_it_matters: Run all component test specs in a Cypress component testing workflow.
- sources: <https://docs.cypress.io/app/references/changelog#15-9-0>, <https://docs.cypress.io/app/references/experiments>
- gotchas: "Version: 15.9.0"; "Availability: experimental"; "experimentalRunAllSpecs: Boolean configuration option; defaults to `false`. When `true`, enables the Run All Specs UI for executing multiple specs sequentially."; "Prerequisite: Cypress 15.9.0 or later for component testing support."

## Cypress environment access adds cy.env() and deprecates Cypress.env() (cypress, 2026-02-03)
Published 2026-10-19
- slug: cypress-environment-access-adds-cy-env-and-deprecates-cypress-env-8e5495528e2d
- score: 0.97

How to use it:

When tests read Cypress environment variables, migrate those reads to `cy.env()` and request only the needed keys. After migrating all usages on Cypress 15.10.x, set `allowCypressEnv: false` in the Cypress configuration to prevent further use of `Cypress.env()`.

Examples:

```
cy.env(['<key>']).then(({ <key> }) => {
  // Use <key> here
})
```

```
const { defineConfig } = require('cypress')

module.exports = defineConfig({
  allowCypressEnv: false,
})
```

- why_it_matters: Update Cypress tests that access environment variables to use the asynchronous secure API and prevent remaining use of the deprecated API.
- before: Use `Cypress.env()` to access Cypress environment variables.
- sources: <https://docs.cypress.io/app/references/changelog#15-10-0>, <https://docs.cypress.io/api/commands/env>
- gotchas: "Version: 15.10.0"; "keys (required): Non-empty array of non-empty environment variable key strings to retrieve. Undefined values are returned for keys not set."; "options.log: Boolean; defaults to `true`. Displays the command and requested key names in the Command Log, never values."; "options.timeout: Milliseconds to wait for `cy.env()` to resolve; defaults to `4000` and does not follow `defaultCommandTimeout`."; "allowCypressEnv: Set to `false` in Cypress configuration to disallow the deprecated `Cypress.env()` API on Cypress ^15.10.0."; "Prerequisite: `cy.env()` requires Cypress 15.10.0 or newer, must be chained from `cy`, and requires a non-empty array of non-empty strings."; "Prerequisite: `allowCypressEnv` is available on Cypress ^15.10.0; Cypress 16.0 removes both it and `Cypress.env()`."

## Cypress CLI adds --pass-with-no-tests (cypress, 2026-02-25)
Published 2026-10-19
- slug: cypress-cli-adds-pass-with-no-tests-8f9ba8869457
- score: 0.95

How to use it:

When a Cypress run may find no spec files and CI should treat that case as success, run `cypress run --pass-with-no-tests`.

Examples:

```
cypress run --pass-with-no-tests
```

- why_it_matters: Run Cypress in a workflow where no tests may be present and a passing command result is required.
- sources: <https://docs.cypress.io/app/references/changelog#15-11-0>, <https://docs.cypress.io/app/references/command-line>
- gotchas: "Version: 15.11.0"; "--pass-with-no-tests: For `cypress run`, exits with success when no spec files are found."; "Prerequisite: Install Cypress as an npm module; run the command from the project root, prefixed by the package manager command (for example, `npx`)."

## Cypress CLI recognizes Bun as a package manager (cypress, 2026-06-09)
Published 2026-10-19
- slug: cypress-cli-recognizes-bun-as-a-package-manager-b51f5fead77c
- score: 0.93

How to use it:

When running Cypress tests from a Bun repository, use `bun run cypress run`; to open the interactive app, use `bun run cypress open`.

Examples:

```
bun run cypress run
```

```
bun run cypress open
```

- why_it_matters: Run Cypress tests from a repository that uses Bun.
- sources: <https://docs.cypress.io/app/references/changelog#15-17-0>, <https://github.com/cypress-io/cypress/blob/develop/cli/CHANGELOG.md>, <https://docs.cypress.io/app/references/command-line>, <https://docs.cypress.io/app/get-started/open-the-app>
- gotchas: "Version: 15.17.0"; "run (required): Runs Cypress tests to completion; they run headlessly by default."; "open (required): Opens the Cypress app."; "Prerequisite: Install Cypress as an npm module and run the command from the project root."; "Docs conflict: Current Cypress CLI docs show `bunx cypress run` for direct Bun invocation; the 15.17.0 release note gives `bun run cypress run` and `bun run cypress open`. https://docs.cypress.io/app/references/command-line"

## Cypress.expose() supports suite- and test-level config overrides (cypress, 2026-06-09)
Published 2026-10-19
- slug: cypress-expose-supports-suite-and-test-level-config-overrides-16f90c36d710
- score: 0.96

How to use it:

When a suite or test needs different public values, pass them in its test config as `{ expose: { key: value } }`; suite and test overrides merge, with test values taking precedence.

Examples:

```
describe('checkout', { expose: { flow: 'guest' } }, () => {
  it('uses suite and test values', { expose: { step: 'payment' } }, () => {
    expect(Cypress.expose('flow')).to.eq('guest')
    expect(Cypress.expose('step')).to.eq('payment')
  })
})
```

- why_it_matters: Set different Cypress.expose() values for individual suites or tests.
- sources: <https://docs.cypress.io/app/references/changelog#15-17-0>, <https://docs.cypress.io/api/cypress-api/expose>
- gotchas: "Version: 15.17.0"; "suite/test config `expose` object: Object of public configuration values to override for the suite or test."; "`expose` object keys and values: Each key names an exposed variable and its value is the value to set; suite and test objects merge, and duplicate keys use the test-level value. No documented sub-key restriction."; "Prerequisite: Use only for public, non-sensitive values accessible in the browser context."

## Cypress scrollBehavior supports per-axis alignment (cypress, 2026-08-04)
Published 2026-10-19
- slug: cypress-scrollbehavior-supports-per-axis-alignment-bb3be0725bb9
- score: 0.95

How to use it:

When an action must place an element predictably in independently positioned horizontal and vertical content, set `scrollBehavior` to an object with the desired `block` and `inline` alignments. For example, use `{ block: 'start', inline: 'nearest' }` to align the vertical axis to the start and the horizontal axis to the nearest position.

Examples:

```
const { defineConfig } = require('cypress')

module.exports = defineConfig({
  scrollBehavior: { block: 'start', inline: 'nearest' },
})
```

- why_it_matters: Configure an element’s alignment before a Cypress action when editing or testing a page with independently positioned horizontal and vertical content.
- sources: <https://docs.cypress.io/app/references/changelog#15-20-0>, <https://docs.cypress.io/app/core-concepts/interacting-with-elements>, <https://docs.cypress.io/app/references/configuration>
- gotchas: "Version: 15.20.0"; "scrollBehavior: Configuration option for the viewport position before action commands; accepts a single alignment, an object with axis alignments, or `false`."; "scrollBehavior.block: Vertical axis alignment; allowed values: `'start'`, `'end'`, `'center'`, `'nearest'`."; "scrollBehavior.inline: Horizontal axis alignment; allowed values: `'start'`, `'end'`, `'center'`, `'nearest'`. `block` and `inline` independently control their axes; neither is documented as mutually exclusive with the other."; "scrollBehavior` (single alignment): A single value applies to both axes; `'start'` and `'end'` are supported, along with `'top'`, `'bottom'`, `'center'`, and `'nearest'`."; "The per-axis form accepts the same values as native `scrollIntoView`: `'start'`, `'end'`, `'center'`, and `'nearest'`."; "A single value accepts the new `'start'` and `'end'` alignments."

## Cypress adds cypress tap for open-mode sessions (cypress, 2026-08-18)
Published 2026-10-19
- slug: cypress-adds-cypress-tap-for-open-mode-sessions-5530c638d6f7
- score: 0.99

How to use it:

When a Cypress 15.21.0+ open-mode session is running in a supported Chromium-based browser, use `cypress tap` to run or rerun a spec, poll its status, inspect failure details, and read the app’s DOM or accessibility tree.

Examples:

```
npx cypress tap sessions
npx cypress tap run <spec-path>
npx cypress tap status --json
```

```
npx cypress tap reporter --test-id <test-id>
npx cypress tap command --test-id <test-id> --command-id <command-id>
```

```
npx cypress tap dom
npx cypress tap aria
npx cypress tap aria --json
```

- why_it_matters: Inspect and rerun a failing spec in an open-mode Cypress session while debugging repository tests.
- sources: <https://docs.cypress.io/app/references/changelog#15-21-0>, <https://docs.cypress.io/app/tooling/cypress-tap>
- gotchas: "Version: 15.21.0"; "<spec-path> (required): Spec path relative to the project; `run` runs or reruns that spec."; "--test-id <test-id> (required): Selects a test for its reporter view or Command Log entry."; "--command-id <command-id> (required): Selects a Command Log entry; the ID is listed by the reporter command."; "--json: Requests machine-readable JSON output."; "--session <pid> / -s <pid>: Targets a specific running session by its listed PID."; "Prerequisite: Requires Cypress v15.21.0 or later and a running `cypress open` session; does not work with headless `cypress run`."; "Prerequisite: Supports Chrome, Chromium, Edge, and Electron; Firefox and WebKit are unsupported."; "Prerequisite: Run tap commands from the same project directory as the open session, or specify `--session <pid>`. No Cypress Cloud account or paid subscription is required."; "The command accesses open-mode Cypress sessions running on the machine."; "Output is readable by default; `--json` selects machine-readable JSON."; "Docs conflict: The current documentation describes `cypress tap` behavior after 15.21.0 and was updated after the card’s version; it documents additional subcommands and later behavior changes. The 15.21.0 release note confirms the card’s listed capabilities and `--json` behavior."

## Cookie commands become retryable queries (cypress, 2026-09-01)
Published 2026-10-19
- slug: cookie-commands-become-retryable-queries-7bc8933b7b9a
- score: 0.95

How to use it:

When overwriting any cookie read query in Cypress 16, register it with `Cypress.Commands.overwriteQuery()`; chained `.should()` assertions retry cookie reads until they pass or the command timeout expires.

Examples:

```
Cypress.Commands.overwriteQuery('getCookie', function (originalFn, ...args) { return originalFn.apply(this, args) })
```

```
cy.getCookie('<name>').should('exist')
```

```
cy.getCookies().should('have.length', <count>)
```

- why_it_matters: Update custom overwrites and assertions for Cypress cookie query commands.
- before: Use `Cypress.Commands.overwrite()` to overwrite `cy.getCookie()`, `cy.getCookies()`, or `cy.getAllCookies()`; the commands were not retryable queries.
- sources: <https://docs.cypress.io/app/references/changelog#16-0-0>, <https://docs.cypress.io/api/cypress-api/custom-queries>, <https://docs.cypress.io/api/commands/getcookie>, <https://docs.cypress.io/api/commands/getcookies>, <https://docs.cypress.io/app/references/configuration#Timeouts>
- gotchas: "Version: 16.0.0"; "name (required): Query name string passed to `overwriteQuery`, such as `getCookie`, `getCookies`, or `getAllCookies`."; "callbackFn (required): Overwrite callback; its first argument is the original query function. It must return an inner function; use `function`, not an arrow function, because the query API uses `this` for timeouts."; "defaultCommandTimeout: Default timeout in milliseconds for most DOM based commands; cookie query options also default to this timeout."; "options.domain: For `cy.getCookies()`, select cookies from the specified domain; defaults to the application hostname."; "options.log: Show the cookie query in the Command log; defaults to `true`."; "options.timeout: Time in milliseconds to wait for the cookie query; defaults to `defaultCommandTimeout`."; "Prerequisite: Use Cypress 16.0.0 or later for these cookie reads to be queries."; "Prerequisite: Cookie queries must be chained from `cy`; use chained `.should()` assertions to drive retry behavior. A `.then()` callback itself is not retried."; "These commands can no longer be overwritten with `Cypress.Commands.overwrite()`."; "The retry behavior is governed by `defaultCommandTimeout`."

## Set viewport dimensions through cy.viewport() or test configuration (cypress, 2026-09-01)
Published 2026-10-19
- slug: set-viewport-dimensions-through-cy-viewport-or-test-configuration-c623c3eb0266
- score: 0.92

How to use it:

When a test needs different viewport dimensions, call `cy.viewport(width, height)` during execution or set `viewportWidth` and `viewportHeight` in its `describe`, `context`, or `it` test configuration. Cypress 16 no longer allows changing these dimensions with `Cypress.config()` during test execution.

Examples:

```
cy.viewport(550, 750)
```

```
describe('page display on medium size screen', { viewportHeight: 1000, viewportWidth: 400 }, () => { it('does not display sidebar', () => { cy.get('#sidebar').should('not.be.visible') }) })
```

- why_it_matters: Change viewport dimensions during a test or define them for a test suite.
- before: Before Cypress 16, changing `viewportWidth` or `viewportHeight` with `Cypress.config()` during test execution affected the next test and was not reflected in Test Replay.
- sources: <https://docs.cypress.io/app/references/changelog#16-0-0>, <https://docs.cypress.io/api/commands/viewport>, <https://docs.cypress.io/app/references/configuration>, <https://docs.cypress.io/app/references/migration-guide/migrating-to-cypress-16-0.md>
- gotchas: "Version: 16.0.0"; "width (required): Viewport width in pixels; must be a non-negative, finite number."; "height (required): Viewport height in pixels; must be a non-negative, finite number."; "viewportWidth (required): Test configuration key for viewport width in pixels."; "viewportHeight (required): Test configuration key for viewport height in pixels."; "describe(name, config, fn) (required): Pass a configuration object as the second argument to set values for a suite; values reset afterward."; "Setting dimensions with `Cypress.config()` during test execution affected the next test rather than the current one and was not reflected in Test Replay."

## Cypress trustedCertificates enables disk caching for declared certificate origins (cypress, 2026-09-15)
Published 2026-10-19
- slug: cypress-trustedcertificates-enables-disk-caching-for-declared-certificate-origin-737e8dbd42ba
- score: 0.93

How to use it:

When running asset-heavy specs on Chrome, Chromium, or Edge with an untrusted application certificate, add that certificate or its SPKI fingerprint to `trustedCertificates`. Cypress then lets the browser trust the declared origin so its static assets can be cached across navigations.

Examples:

```
const { defineConfig } = require('cypress')
module.exports = defineConfig({
  trustedCertificates: [{ filePath: '<project-relative-path-to-PEM-certificate>' }],
})
```

```
const { defineConfig } = require('cypress')
module.exports = defineConfig({
  trustedCertificates: [{ pem: '<inline-PEM-certificate-text>' }],
})
```

```
const { defineConfig } = require('cypress')
module.exports = defineConfig({
  trustedCertificates: [{ spki: '<44-character-base64-SHA-256-SPKI-fingerprint-ending-in-equals>' }],
})
```

- why_it_matters: Run asset-heavy specs against an application presenting an untrusted development certificate on Chrome, Chromium, or Edge.
- before: Before this change, responses from an untrusted-certificate origin were not written to the browser disk cache, so asset-heavy specs re-downloaded assets on each `cy.visit()`.
- sources: <https://docs.cypress.io/app/references/changelog#16-1-0>, <https://docs.cypress.io/app/references/configuration>
- gotchas: "Version: 16.1.0"; "trustedCertificates: Optional array of certificate entries; defaults to `[]`."; "trustedCertificates[].filePath: Path to a PEM-encoded certificate file; relative paths resolve against the project root. Exactly one entry key must be used."; "trustedCertificates[].pem: Inline PEM-encoded certificate text. Every certificate in the PEM string is trusted. Exactly one entry key must be used."; "trustedCertificates[].spki: Precomputed base64-encoded SHA-256 fingerprint of the certificate SPKI; exactly 44 characters ending in `=`. Exactly one entry key must be used."; "filePath, pem, spki exclusivity (required): Each entry must contain exactly one of these keys; using zero or multiple keys causes configuration validation error. They are mutually exclusive."; "Prerequisite: Cypress 16.1.0 or later; the option was added in 16.1.0."; "Prerequisite: Applies on the native browser network path in Chrome, Chromium, and Edge. It has no effect in Firefox, WebKit, Electron, or when `forceHttp1: true`."; "Prerequisite: A `filePath` entry must be readable and PEM data must parse; those failures occur at browser launch. Validation checks entry shape first."; "Applies on the native browser network path in Chrome, Chromium, and Edge."; "Origins not declared continue to load as before."; "Firefox, WebKit, Electron, and `forceHttp1` runs are unaffected."

Next: https://sincecutoff.com/v1/changes.md?tool=cypress&score=0&cursor=eyJzY29yZSI6MCwic2VxIjoxOTQyLCJzaW5jZSI6bnVsbCwidG9vbCI6ImN5cHJlc3MiLCJ2IjoxfQ
Save `next_cursor`; next visit, pass it to get only what was published since.
<!-- end of page -->
