{
  "doc": {
    "id": "app/configure/configuration",
    "title": "Configuration in Cypress",
    "description": "Change the default behavior of Cypress by configuring options in the Cypress configuration file.",
    "section": "app",
    "source_path": "/llm/markdown/app/configure/configuration.md",
    "version": "066c46e056f0f322a0670d2d3aa4e6adaebfe717",
    "updated_at": "2026-09-10T13:30:12.426Z",
    "headings": [
      {
        "id": "app/configure/configuration#cypress-configuration",
        "text": "Cypress Configuration",
        "level": 1
      },
      {
        "id": "app/configure/configuration#esm-vs-commonjs",
        "text": "ESM vs CommonJS",
        "level": 2
      },
      {
        "id": "app/configure/configuration#intelligent-code-completion",
        "text": "Intelligent Code Completion",
        "level": 2
      },
      {
        "id": "app/configure/configuration#options",
        "text": "Options",
        "level": 2
      },
      {
        "id": "app/configure/configuration#global",
        "text": "Global",
        "level": 3
      },
      {
        "id": "app/configure/configuration#timeouts",
        "text": "Timeouts",
        "level": 3
      },
      {
        "id": "app/configure/configuration#folders-files",
        "text": "Folders / Files",
        "level": 3
      },
      {
        "id": "app/configure/configuration#screenshots",
        "text": "Screenshots",
        "level": 3
      },
      {
        "id": "app/configure/configuration#videos",
        "text": "Videos",
        "level": 3
      },
      {
        "id": "app/configure/configuration#downloads",
        "text": "Downloads",
        "level": 3
      },
      {
        "id": "app/configure/configuration#browser",
        "text": "Browser",
        "level": 3
      },
      {
        "id": "app/configure/configuration#viewport",
        "text": "Viewport",
        "level": 3
      },
      {
        "id": "app/configure/configuration#actionability",
        "text": "Actionability",
        "level": 3
      },
      {
        "id": "app/configure/configuration#keyboard",
        "text": "Keyboard",
        "level": 3
      },
      {
        "id": "app/configure/configuration#system",
        "text": "System",
        "level": 3
      },
      {
        "id": "app/configure/configuration#experiments",
        "text": "Experiments",
        "level": 3
      },
      {
        "id": "app/configure/configuration#testing-type-specific-options",
        "text": "Testing Type-Specific Options",
        "level": 2
      },
      {
        "id": "app/configure/configuration#e2e",
        "text": "e2e",
        "level": 3
      },
      {
        "id": "app/configure/configuration#component",
        "text": "component",
        "level": 3
      },
      {
        "id": "app/configure/configuration#overriding-options",
        "text": "Overriding Options",
        "level": 2
      },
      {
        "id": "app/configure/configuration#overriding-individual-options",
        "text": "Overriding Individual Options",
        "level": 3
      },
      {
        "id": "app/configure/configuration#specifying-an-alternative-config-file",
        "text": "Specifying an Alternative Config File",
        "level": 3
      },
      {
        "id": "app/configure/configuration#testing-type-specific-overrides",
        "text": "Testing Type-Specific Overrides",
        "level": 3
      },
      {
        "id": "app/configure/configuration#environment-variables",
        "text": "Environment Variables",
        "level": 3
      },
      {
        "id": "app/configure/configuration#test-configuration",
        "text": "Test Configuration",
        "level": 2
      },
      {
        "id": "app/configure/configuration#cypress-config",
        "text": "Cypress.config()",
        "level": 3
      },
      {
        "id": "app/configure/configuration#test-specific-configuration",
        "text": "Test-specific Configuration",
        "level": 3
      },
      {
        "id": "app/configure/configuration#syntax",
        "text": "Syntax",
        "level": 4
      },
      {
        "id": "app/configure/configuration#suite-configuration",
        "text": "Suite configuration",
        "level": 4
      },
      {
        "id": "app/configure/configuration#single-test-configuration",
        "text": "Single test configuration",
        "level": 4
      },
      {
        "id": "app/configure/configuration#resolved-configuration",
        "text": "Resolved Configuration",
        "level": 2
      },
      {
        "id": "app/configure/configuration#notes",
        "text": "Notes",
        "level": 2
      },
      {
        "id": "app/configure/configuration#blockhosts",
        "text": "blockHosts",
        "level": 3
      },
      {
        "id": "app/configure/configuration#hosts",
        "text": "hosts",
        "level": 3
      },
      {
        "id": "app/configure/configuration#devserver",
        "text": "devServer",
        "level": 3
      },
      {
        "id": "app/configure/configuration#custom-dev-server",
        "text": "Custom Dev Server",
        "level": 4
      },
      {
        "id": "app/configure/configuration#excludespecpattern",
        "text": "excludeSpecPattern",
        "level": 3
      },
      {
        "id": "app/configure/configuration#forcehttp1",
        "text": "forceHttp1",
        "level": 3
      },
      {
        "id": "app/configure/configuration#injectdocumentdomain",
        "text": "injectDocumentDomain",
        "level": 3
      },
      {
        "id": "app/configure/configuration#known-incompatibilities",
        "text": "Known Incompatibilities",
        "level": 4
      },
      {
        "id": "app/configure/configuration#isinteractive",
        "text": "isInteractive",
        "level": 3
      },
      {
        "id": "app/configure/configuration#managebrowsermemory",
        "text": "manageBrowserMemory",
        "level": 3
      },
      {
        "id": "app/configure/configuration#modifyobstructivecode",
        "text": "modifyObstructiveCode",
        "level": 3
      },
      {
        "id": "app/configure/configuration#removesriattributes",
        "text": "removeSRIAttributes",
        "level": 3
      },
      {
        "id": "app/configure/configuration#setupnodeevents",
        "text": "setupNodeEvents",
        "level": 3
      },
      {
        "id": "app/configure/configuration#trashassetsbeforeruns",
        "text": "trashAssetsBeforeRuns",
        "level": 3
      },
      {
        "id": "app/configure/configuration#test-files-not-found-when-using-spec-parameter",
        "text": "Test files not found when using spec parameter",
        "level": 3
      },
      {
        "id": "app/configure/configuration#history",
        "text": "History",
        "level": 2
      },
      {
        "id": "app/configure/configuration#see-also",
        "text": "See also",
        "level": 2
      }
    ]
  },
  "chunks": [
    {
      "id": "app/configure/configuration#esm-vs-commonjs",
      "doc_id": "app/configure/configuration",
      "heading": "ESM vs CommonJS",
      "heading_level": 2,
      "content_markdown": "## ESM vs CommonJS\n\nStarting in Cypress [15.17.0](/llm/markdown/app/references/changelog.md#15-17-0), Cypress determines whether your config loads as **ESM** or **CommonJS** _before_ running it, using the same rules as Node.js. Cypress then loads the file with only `import()` (ESM) or `require()` (CommonJS) and does **not** fall back to the other format if loading fails.\n\nThe same rules apply to plugin code in `setupNodeEvents` — Cypress evaluates your config and plugins in a Node.js child process, so the module system for that file determines which APIs are available (for example `import.meta.resolve` in ESM or `require()` in CommonJS).\n\n| Config file extension | Nearest `package.json` `\"type\"` | Loaded as |\n| --- | --- | --- |\n| `.mjs` | (any) | ESM |\n| `.cjs` | (any) | CommonJS |\n| `.js` | `\"module\"` | ESM |\n| `.js` | omitted or `\"commonjs\"` | CommonJS |\n\nCypress walks up from the config file to find the **nearest** `package.json`. If a parent directory has its own `package.json` without `\"type\": \"module\"`, that scope wins over an ancestor that is ESM-only.\n\nUse the file extension and `package.json` `\"type\"` that match how the config is written:\n\n*   **ESM config** — use `import` / `export default` and ESM-only APIs such as `import.meta.resolve` and `import.meta.dirname`:\n\ncypress.config.js (ESM project)\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    setupNodeEvents(on, config) {\n      // import.meta is available in ESM configs\n      return config\n    },\n  },\n})\n```\n\n*   **CommonJS config** — use `require()` and `module.exports`:\n\ncypress.config.js (CommonJS project)\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    setupNodeEvents(on, config) {\n      // require() is available in CommonJS configs\n      return config\n    },\n  },\n})\n```\n\nIf your project has `\"type\": \"module\"` but you need CommonJS syntax in the config, rename the file to `cypress.config.cjs`. If your project is CommonJS but you want ESM syntax, use `cypress.config.mjs` or set `\"type\": \"module\"` in `package.json`.\n\nTo call CommonJS-only dependencies from an ESM config (or the reverse), use Node's interoperability helpers — for example `createRequire(import.meta.url)` to `require()` from an ESM file.\n\nConfigs that previously loaded only because Cypress retried the alternate module format may now fail with a clear load error. That behavior is intentional: it matches Node.js and ensures ESM-only APIs such as `import.meta.resolve` work reliably in config and plugin code.\n",
      "section": "app",
      "anchors": [
        "esm-vs-commonjs"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 504
    },
    {
      "id": "app/configure/configuration#intelligent-code-completion",
      "doc_id": "app/configure/configuration",
      "heading": "Intelligent Code Completion",
      "heading_level": 2,
      "content_markdown": "## Intelligent Code Completion\n\nThe `defineConfig` helper function is exported by Cypress, and it provides automatic code completion for configuration in many popular code editors. While it's not strictly necessary for Cypress to parse your configuration, we recommend wrapping your config object with `defineConfig()` like this:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    baseUrl: 'http://localhost:1234',\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    baseUrl: 'http://localhost:1234',\n  },\n})\n```\n",
      "section": "app",
      "anchors": [
        "intelligent-code-completion"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 112
    },
    {
      "id": "app/configure/configuration#options",
      "doc_id": "app/configure/configuration",
      "heading": "Options",
      "heading_level": 2,
      "content_markdown": "## Options\n\nThe default behavior of Cypress can be modified by supplying any of the following configuration options. Below is a list of available options and their default values.\n\n### Global\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `clientCertificates` | `[]` | An optional array of [client certificates](/llm/markdown/app/references/client-certificates.md). |\n| `env` | `{}` | Any secret values to be set as [environment variables](/llm/markdown/app/guides/environment-variables.md). |\n| `expose` | `{}` | Any public values to be set as [exposed variables](/llm/markdown/api/cypress-api/expose.md). |\n| `forceHttp1` deprecated | `false` | Whether Cypress routes all browser traffic through the legacy network path instead of using the native browser network in Chrome, Chromium, and Edge. [Please read the notes on using this.](#forceHttp1) |\n| `includeShadowDom` | `false` | Whether to traverse shadow DOM boundaries and include elements within the shadow DOM in the results of query commands (e.g. [`cy.get()`](/llm/markdown/api/commands/get.md)). |\n| `manageBrowserMemory` | `true` | Whether Cypress monitors browser memory and collects garbage when usage crosses a threshold, so memory-heavy suites don't crash the browser. Chromium-based browsers only; no effect in Firefox or WebKit. See [manageBrowserMemory](/llm/markdown/app/references/configuration.md#manageBrowserMemory). |\n| `numTestsKeptInMemory` | Default based on `run` or `open` mode | The number of tests for which snapshots and command data are kept in memory. `numTestsKeptInMemory` is set to `50` by default during `cypress open` and set to `0` by default during `cypress run`. Reduce this number if you are experiencing high memory consumption in your browser during a test run. |\n| `port` | `null` | Port used to host Cypress. Normally this is a randomly generated port. |\n| `projectId` | `null` | The unique ID used to record test results to [Cypress Cloud](/llm/markdown/cloud/get-started/introduction.md). Set automatically when you [connect your project to Cypress Cloud](/llm/markdown/cloud/get-started/setup.md#Setup). |\n| `redirectionLimit` | `20` | The number of times that the application under test can redirect before erroring. |\n| `reporter` | `spec` | The [reporter](/llm/markdown/app/tooling/reporters.md) used during `cypress run`. |\n| `reporterOptions` | `null` | The [reporter options](/llm/markdown/app/tooling/reporters.md#Reporter-Options) used. Supported options depend on the reporter. |\n| `retries` | `{ \"runMode\": 0, \"openMode\": 0 }` | The number of times to retry a failing test. Can be configured to apply to `cypress run` or `cypress open` separately. As of Cypress `13.4.0`, the experimental Flake Detection strategy can also be configured. See [Test Retries](/llm/markdown/app/guides/test-retries.md) for more information. |\n| `watchForFileChanges` | Default based on `run` or `open` mode | Whether Cypress will watch and restart tests on test file changes. `watchForFileChanges` is set to `true` by default during `cypress open` and set to `false` by default during `cypress run`. |\n\n### Timeouts\n\n**Core Concept**\n\n[Timeouts are a core concept](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Timeouts) you should understand well. The default values listed here are meaningful.\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `defaultCommandTimeout` | `4000` | Time, in milliseconds, to wait until most DOM based commands are considered timed out. |\n| `taskTimeout` | `60000` | Time, in milliseconds, to wait for a task to finish executing during a [`cy.task()`](/llm/markdown/api/commands/task.md) command. |\n| `pageLoadTimeout` | `60000` | Time, in milliseconds, to wait for `page transition events` or [`cy.visit()`](/llm/markdown/api/commands/visit.md), [`cy.go()`](/llm/markdown/api/commands/go.md), [`cy.reload()`](/llm/markdown/api/commands/reload.md) commands to fire their page `load` events. Network requests are limited by the underlying operating system, and may still time out if this value is increased. |\n| `requestTimeout` | `5000` | Time, in milliseconds, to wait for a request to go out in a [`cy.wait()`](/llm/markdown/api/commands/wait.md) command. |\n| `responseTimeout` | `30000` | Time, in milliseconds, to wait until a response in a [`cy.request()`](/llm/markdown/api/commands/request.md), [`cy.wait()`](/llm/markdown/api/commands/wait.md), [`cy.fixture()`](/llm/markdown/api/commands/fixture.md), [`cy.setCookie()`](/llm/markdown/api/commands/setcookie.md), [`cy.clearCookie()`](/llm/markdown/api/commands/clearcookie.md), [`cy.clearCookies()`](/llm/markdown/api/commands/clearcookies.md), [`cy.clearAllCookies()`](/llm/markdown/api/commands/clearallcookies.md), and [`cy.screenshot()`](/llm/markdown/api/commands/screenshot.md) commands. |\n\n### Folders / Files\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `downloadsFolder` | `cypress/downloads` | Path to folder where files downloaded during a test are saved. |\n| `fileServerFolder` | root project folder | Path to folder where application files will attempt to be served from. |\n| `fixturesFolder` | `cypress/fixtures` | Path to folder containing fixture files (Pass `false` to disable). |\n| `screenshotsFolder` | `cypress/screenshots` | Path to folder where screenshots will be saved from [`cy.screenshot()`](/llm/markdown/api/commands/screenshot.md) command or after a test fails during `cypress run`. |\n| `videosFolder` | `cypress/videos` | Path to folder where videos will be saved during `cypress run`. |\n\n### Screenshots\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `screenshotOnRunFailure` | `true` | Whether Cypress will take a screenshot when a test fails during `cypress run`. |\n| `screenshotsFolder` | `cypress/screenshots` | Path to folder where screenshots will be saved from [`cy.screenshot()`](/llm/markdown/api/commands/screenshot.md) command or after a test fails during `cypress run`. |\n| `trashAssetsBeforeRuns` | `true` | Whether Cypress will trash assets within the `downloadsFolder`, `screenshotsFolder`, and `videosFolder` before tests run with `cypress run`. This clears the **entire contents** of those folders, including all files and nested subfolders. |\n\nFor more options regarding screenshots, view the [Cypress.Screenshot API](/llm/markdown/api/cypress-api/screenshot-api.md).\n\n### Videos\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `trashAssetsBeforeRuns` | `true` | Whether Cypress will trash assets within the `downloadsFolder`, `screenshotsFolder`, and `videosFolder` before tests run with `cypress run`. This clears the **entire contents** of those folders, including all files and nested subfolders—not only screenshots and videos. [Please read the notes for more details.](#trashAssetsBeforeRuns) |\n| `videoCompression` | `false` | The quality setting for the video compression, in Constant Rate Factor (CRF). The value can be `false` or `0` to disable compression or a CRF between `1` and `51`, where a lower value results in better quality (at the expense of a higher file size). Setting this option to `true` will result in a default CRF of `32`. |\n| `videosFolder` | `cypress/videos` | Where Cypress will automatically save the video of the test run when tests run with `cypress run`. |\n| `video` | `false` | Whether Cypress will capture a video of the tests run with `cypress run`. |\n\n### Downloads\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `downloadsFolder` | `cypress/downloads` | Path to folder where files downloaded during a test are saved. |\n| `trashAssetsBeforeRuns` | `true` | Whether Cypress will trash assets within the `downloadsFolder`, `screenshotsFolder`, and `videosFolder` before tests run with `cypress run`. This clears the **entire contents** of those folders, including all files and nested subfolders—not only screenshots and videos. [Please read the notes for more details.](#trashAssetsBeforeRuns) |\n\n### Browser\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `defaultBrowser` | `null` | The default browser to launch if the \"--browser\" command line option is not provided. This option only affects the first browser launch; changing this option after the browser is already launched will have no effect. Set this to an installed browser (for example, `'chrome'`) to stop relying on the deprecated bundled Electron default — see the note below. |\n| `chromeWebSecurity` | `true` | Whether to enable Chromium-based browser's Web Security for same-origin policy and insecure mixed content. |\n| `blockHosts` | `null` | A String or Array of hosts that you wish to block traffic for. [Please read the notes for examples on using this.](#blockHosts) |\n| `hosts` | `null` | An Object of hostname patterns to IP addresses. Acts like a Cypress-specific `/etc/hosts` file, letting Cypress resolve custom hostnames within tests. [Please read the notes for examples on using this.](#hosts) |\n| `modifyObstructiveCode` | `true` | Whether Cypress will search for and replace obstructive JS code in `.js` or `.html` files. [Please read the notes for more information on this setting.](#modifyObstructiveCode) |\n| `removeSRIAttributes` | `false` | Whether Cypress will remove [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) `integrity` attributes from `<script>` and `<link>` elements so that first-party resources rewritten by Cypress are not blocked. [Please read the notes for more information on this setting.](#removeSRIAttributes) |\n| `userAgent` | `null` | Enables you to override the default user agent the browser sends in all request headers. User agent values are typically used by servers to help identify the operating system, browser, and browser version. See [User-Agent MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) for example user agent values. |\n\n**Electron is deprecated as a test browser** and will be removed in a future version of Cypress. If you don't pass [`--browser`](/llm/markdown/app/references/command-line.md#cypress-run) and have no `defaultBrowser` set, Cypress falls back to the bundled Electron browser. Set `defaultBrowser` to an installed browser to make your runs explicit and to avoid a breaking change when you upgrade:\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  defaultBrowser: 'chrome',\n})\n```\n\nSee [Migrating away from the Electron browser](/llm/markdown/app/references/migration-guide.md#Migrating-away-from-the-Electron-browser).\n\n### Viewport\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `viewportHeight` | `660` | Default height in pixels for the application under tests' viewport. (Override with [`cy.viewport()`](/llm/markdown/api/commands/viewport.md) command) |\n| `viewportWidth` | `1000` | Default width in pixels for the application under tests' viewport. (Override with [`cy.viewport()`](/llm/markdown/api/commands/viewport.md) command) |\n\n### Actionability\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `animationDistanceThreshold` | `5` | The distance in pixels an element must exceed over time to be considered animating. |\n| `waitForAnimations` | `true` | Whether to wait for elements to finish animating before executing commands. |\n| `scrollBehavior` | `top` | Viewport position to which an element should be scrolled before executing commands. Accepts a single alignment (`'top'`, `'bottom'`, `'start'`, `'end'`, `'center'`, or `'nearest'`), an object that aligns each axis independently with `block` and `inline` (each set to `'start'`, `'end'`, `'center'`, or `'nearest'`), or `false` to disable scrolling. `'top'` and `'bottom'` align the vertical axis only, while `'start'` and `'end'` align both. See [Scrolling](/llm/markdown/app/core-concepts/interacting-with-elements.md#Scrolling). |\n| `visibilityStrategy` | `modern` | Selects the algorithm Cypress uses to check element visibility. `'modern'` (the default) delegates to the browser's native `Element.checkVisibility()` API. `'legacy'` opts back into the ancestor-walking algorithm from Cypress 15 and earlier. This option is deprecated — the `'legacy'` value and the option itself will be removed in a future major version. |\n\nFor more information, see the docs on [actionability](/llm/markdown/app/core-concepts/interacting-with-elements.md#Actionability).\n\n### Keyboard\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `keystrokeDelay` | `null` | The delay, in milliseconds, between keystrokes while typing with [`.type()`](/llm/markdown/api/commands/type.md). Must be a non-negative number. |\n\nAs of Cypress 16, typing has no keystroke delay unless you ask for one, which makes typing-heavy suites noticeably faster. The resolved `keystrokeDelay` value is read from this configuration first, then [`Cypress.Keyboard.defaults()`](/llm/markdown/api/cypress-api/keyboard-api.md), and falls back to `0` if neither is set. A per-command `delay` passed to [`.type()`](/llm/markdown/api/commands/type.md) is independent of this and overrides the resolved value for that single call.\n\nIf you relied on the pre-16 default of `10`, set `keystrokeDelay: 10` here or via [`Cypress.Keyboard.defaults()`](/llm/markdown/api/cypress-api/keyboard-api.md) in a support file.\n\n### System\n\nThese values are set by Cypress at startup and are read-only — they cannot be changed in your Cypress configuration file. They can be accessed via [`Cypress.config()`](/llm/markdown/api/cypress-api/config.md). The `browsers` property is an exception: it can also be modified in [`setupNodeEvents`](#setupNodeEvents) to filter or add custom browsers.\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `arch` | `os.arch()` | The underlying OS CPU architecture. Common values are `x64`, `arm`, and `arm64`. |\n| `browsers` | `[]` | A list of browsers found on your system. Populated by Cypress at startup. Can be filtered or extended in [`setupNodeEvents`](#setupNodeEvents). |\n| `isInteractive` | `true` | Whether Cypress is running in interactive mode (`cypress open`). Set to `false` during `cypress run`. See [Notes](#isInteractive) for usage. |\n| `platform` | `os.platform()` | The underlying OS platform name (e.g. `linux`, `darwin`, `win32`). |\n| `resolvedNodePath` | `null` | The path to the Node.js binary used for [`cy.task()`](/llm/markdown/api/commands/task.md) commands. Set by Cypress at startup. |\n| `resolvedNodeVersion` | `null` | The version of Node.js used by Cypress. Set by Cypress at startup. |\n\n### Experiments\n\nConfiguration might include experimental options currently being tested. See [Experiments](/llm/markdown/app/references/experiments.md) page.\n",
      "section": "app",
      "anchors": [
        "options"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 2652
    },
    {
      "id": "app/configure/configuration#global",
      "doc_id": "app/configure/configuration",
      "heading": "Global",
      "heading_level": 3,
      "content_markdown": "### Global\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `clientCertificates` | `[]` | An optional array of [client certificates](/llm/markdown/app/references/client-certificates.md). |\n| `env` | `{}` | Any secret values to be set as [environment variables](/llm/markdown/app/guides/environment-variables.md). |\n| `expose` | `{}` | Any public values to be set as [exposed variables](/llm/markdown/api/cypress-api/expose.md). |\n| `forceHttp1` deprecated | `false` | Whether Cypress routes all browser traffic through the legacy network path instead of using the native browser network in Chrome, Chromium, and Edge. [Please read the notes on using this.](#forceHttp1) |\n| `includeShadowDom` | `false` | Whether to traverse shadow DOM boundaries and include elements within the shadow DOM in the results of query commands (e.g. [`cy.get()`](/llm/markdown/api/commands/get.md)). |\n| `manageBrowserMemory` | `true` | Whether Cypress monitors browser memory and collects garbage when usage crosses a threshold, so memory-heavy suites don't crash the browser. Chromium-based browsers only; no effect in Firefox or WebKit. See [manageBrowserMemory](/llm/markdown/app/references/configuration.md#manageBrowserMemory). |\n| `numTestsKeptInMemory` | Default based on `run` or `open` mode | The number of tests for which snapshots and command data are kept in memory. `numTestsKeptInMemory` is set to `50` by default during `cypress open` and set to `0` by default during `cypress run`. Reduce this number if you are experiencing high memory consumption in your browser during a test run. |\n| `port` | `null` | Port used to host Cypress. Normally this is a randomly generated port. |\n| `projectId` | `null` | The unique ID used to record test results to [Cypress Cloud](/llm/markdown/cloud/get-started/introduction.md). Set automatically when you [connect your project to Cypress Cloud](/llm/markdown/cloud/get-started/setup.md#Setup). |\n| `redirectionLimit` | `20` | The number of times that the application under test can redirect before erroring. |\n| `reporter` | `spec` | The [reporter](/llm/markdown/app/tooling/reporters.md) used during `cypress run`. |\n| `reporterOptions` | `null` | The [reporter options](/llm/markdown/app/tooling/reporters.md#Reporter-Options) used. Supported options depend on the reporter. |\n| `retries` | `{ \"runMode\": 0, \"openMode\": 0 }` | The number of times to retry a failing test. Can be configured to apply to `cypress run` or `cypress open` separately. As of Cypress `13.4.0`, the experimental Flake Detection strategy can also be configured. See [Test Retries](/llm/markdown/app/guides/test-retries.md) for more information. |\n| `watchForFileChanges` | Default based on `run` or `open` mode | Whether Cypress will watch and restart tests on test file changes. `watchForFileChanges` is set to `true` by default during `cypress open` and set to `false` by default during `cypress run`. |\n",
      "section": "app",
      "anchors": [
        "global"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 541
    },
    {
      "id": "app/configure/configuration#timeouts",
      "doc_id": "app/configure/configuration",
      "heading": "Timeouts",
      "heading_level": 3,
      "content_markdown": "### Timeouts\n\n**Core Concept**\n\n[Timeouts are a core concept](/llm/markdown/app/core-concepts/introduction-to-cypress.md#Timeouts) you should understand well. The default values listed here are meaningful.\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `defaultCommandTimeout` | `4000` | Time, in milliseconds, to wait until most DOM based commands are considered timed out. |\n| `taskTimeout` | `60000` | Time, in milliseconds, to wait for a task to finish executing during a [`cy.task()`](/llm/markdown/api/commands/task.md) command. |\n| `pageLoadTimeout` | `60000` | Time, in milliseconds, to wait for `page transition events` or [`cy.visit()`](/llm/markdown/api/commands/visit.md), [`cy.go()`](/llm/markdown/api/commands/go.md), [`cy.reload()`](/llm/markdown/api/commands/reload.md) commands to fire their page `load` events. Network requests are limited by the underlying operating system, and may still time out if this value is increased. |\n| `requestTimeout` | `5000` | Time, in milliseconds, to wait for a request to go out in a [`cy.wait()`](/llm/markdown/api/commands/wait.md) command. |\n| `responseTimeout` | `30000` | Time, in milliseconds, to wait until a response in a [`cy.request()`](/llm/markdown/api/commands/request.md), [`cy.wait()`](/llm/markdown/api/commands/wait.md), [`cy.fixture()`](/llm/markdown/api/commands/fixture.md), [`cy.setCookie()`](/llm/markdown/api/commands/setcookie.md), [`cy.clearCookie()`](/llm/markdown/api/commands/clearcookie.md), [`cy.clearCookies()`](/llm/markdown/api/commands/clearcookies.md), [`cy.clearAllCookies()`](/llm/markdown/api/commands/clearallcookies.md), and [`cy.screenshot()`](/llm/markdown/api/commands/screenshot.md) commands. |\n",
      "section": "app",
      "anchors": [
        "timeouts"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 223
    },
    {
      "id": "app/configure/configuration#folders-files",
      "doc_id": "app/configure/configuration",
      "heading": "Folders / Files",
      "heading_level": 3,
      "content_markdown": "### Folders / Files\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `downloadsFolder` | `cypress/downloads` | Path to folder where files downloaded during a test are saved. |\n| `fileServerFolder` | root project folder | Path to folder where application files will attempt to be served from. |\n| `fixturesFolder` | `cypress/fixtures` | Path to folder containing fixture files (Pass `false` to disable). |\n| `screenshotsFolder` | `cypress/screenshots` | Path to folder where screenshots will be saved from [`cy.screenshot()`](/llm/markdown/api/commands/screenshot.md) command or after a test fails during `cypress run`. |\n| `videosFolder` | `cypress/videos` | Path to folder where videos will be saved during `cypress run`. |\n",
      "section": "app",
      "anchors": [
        "folders-files"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 151
    },
    {
      "id": "app/configure/configuration#screenshots",
      "doc_id": "app/configure/configuration",
      "heading": "Screenshots",
      "heading_level": 3,
      "content_markdown": "### Screenshots\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `screenshotOnRunFailure` | `true` | Whether Cypress will take a screenshot when a test fails during `cypress run`. |\n| `screenshotsFolder` | `cypress/screenshots` | Path to folder where screenshots will be saved from [`cy.screenshot()`](/llm/markdown/api/commands/screenshot.md) command or after a test fails during `cypress run`. |\n| `trashAssetsBeforeRuns` | `true` | Whether Cypress will trash assets within the `downloadsFolder`, `screenshotsFolder`, and `videosFolder` before tests run with `cypress run`. This clears the **entire contents** of those folders, including all files and nested subfolders. |\n\nFor more options regarding screenshots, view the [Cypress.Screenshot API](/llm/markdown/api/cypress-api/screenshot-api.md).\n",
      "section": "app",
      "anchors": [
        "screenshots"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 141
    },
    {
      "id": "app/configure/configuration#videos",
      "doc_id": "app/configure/configuration",
      "heading": "Videos",
      "heading_level": 3,
      "content_markdown": "### Videos\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `trashAssetsBeforeRuns` | `true` | Whether Cypress will trash assets within the `downloadsFolder`, `screenshotsFolder`, and `videosFolder` before tests run with `cypress run`. This clears the **entire contents** of those folders, including all files and nested subfolders—not only screenshots and videos. [Please read the notes for more details.](#trashAssetsBeforeRuns) |\n| `videoCompression` | `false` | The quality setting for the video compression, in Constant Rate Factor (CRF). The value can be `false` or `0` to disable compression or a CRF between `1` and `51`, where a lower value results in better quality (at the expense of a higher file size). Setting this option to `true` will result in a default CRF of `32`. |\n| `videosFolder` | `cypress/videos` | Where Cypress will automatically save the video of the test run when tests run with `cypress run`. |\n| `video` | `false` | Whether Cypress will capture a video of the tests run with `cypress run`. |\n",
      "section": "app",
      "anchors": [
        "videos"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 227
    },
    {
      "id": "app/configure/configuration#downloads",
      "doc_id": "app/configure/configuration",
      "heading": "Downloads",
      "heading_level": 3,
      "content_markdown": "### Downloads\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `downloadsFolder` | `cypress/downloads` | Path to folder where files downloaded during a test are saved. |\n| `trashAssetsBeforeRuns` | `true` | Whether Cypress will trash assets within the `downloadsFolder`, `screenshotsFolder`, and `videosFolder` before tests run with `cypress run`. This clears the **entire contents** of those folders, including all files and nested subfolders—not only screenshots and videos. [Please read the notes for more details.](#trashAssetsBeforeRuns) |\n",
      "section": "app",
      "anchors": [
        "downloads"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 108
    },
    {
      "id": "app/configure/configuration#browser",
      "doc_id": "app/configure/configuration",
      "heading": "Browser",
      "heading_level": 3,
      "content_markdown": "### Browser\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `defaultBrowser` | `null` | The default browser to launch if the \"--browser\" command line option is not provided. This option only affects the first browser launch; changing this option after the browser is already launched will have no effect. Set this to an installed browser (for example, `'chrome'`) to stop relying on the deprecated bundled Electron default — see the note below. |\n| `chromeWebSecurity` | `true` | Whether to enable Chromium-based browser's Web Security for same-origin policy and insecure mixed content. |\n| `blockHosts` | `null` | A String or Array of hosts that you wish to block traffic for. [Please read the notes for examples on using this.](#blockHosts) |\n| `hosts` | `null` | An Object of hostname patterns to IP addresses. Acts like a Cypress-specific `/etc/hosts` file, letting Cypress resolve custom hostnames within tests. [Please read the notes for examples on using this.](#hosts) |\n| `modifyObstructiveCode` | `true` | Whether Cypress will search for and replace obstructive JS code in `.js` or `.html` files. [Please read the notes for more information on this setting.](#modifyObstructiveCode) |\n| `removeSRIAttributes` | `false` | Whether Cypress will remove [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) `integrity` attributes from `<script>` and `<link>` elements so that first-party resources rewritten by Cypress are not blocked. [Please read the notes for more information on this setting.](#removeSRIAttributes) |\n| `userAgent` | `null` | Enables you to override the default user agent the browser sends in all request headers. User agent values are typically used by servers to help identify the operating system, browser, and browser version. See [User-Agent MDN Documentation](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent) for example user agent values. |\n\n**Electron is deprecated as a test browser** and will be removed in a future version of Cypress. If you don't pass [`--browser`](/llm/markdown/app/references/command-line.md#cypress-run) and have no `defaultBrowser` set, Cypress falls back to the bundled Electron browser. Set `defaultBrowser` to an installed browser to make your runs explicit and to avoid a breaking change when you upgrade:\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  defaultBrowser: 'chrome',\n})\n```\n\nSee [Migrating away from the Electron browser](/llm/markdown/app/references/migration-guide.md#Migrating-away-from-the-Electron-browser).\n",
      "section": "app",
      "anchors": [
        "browser"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 479
    },
    {
      "id": "app/configure/configuration#viewport",
      "doc_id": "app/configure/configuration",
      "heading": "Viewport",
      "heading_level": 3,
      "content_markdown": "### Viewport\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `viewportHeight` | `660` | Default height in pixels for the application under tests' viewport. (Override with [`cy.viewport()`](/llm/markdown/api/commands/viewport.md) command) |\n| `viewportWidth` | `1000` | Default width in pixels for the application under tests' viewport. (Override with [`cy.viewport()`](/llm/markdown/api/commands/viewport.md) command) |\n",
      "section": "app",
      "anchors": [
        "viewport"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 75
    },
    {
      "id": "app/configure/configuration#actionability",
      "doc_id": "app/configure/configuration",
      "heading": "Actionability",
      "heading_level": 3,
      "content_markdown": "### Actionability\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `animationDistanceThreshold` | `5` | The distance in pixels an element must exceed over time to be considered animating. |\n| `waitForAnimations` | `true` | Whether to wait for elements to finish animating before executing commands. |\n| `scrollBehavior` | `top` | Viewport position to which an element should be scrolled before executing commands. Accepts a single alignment (`'top'`, `'bottom'`, `'start'`, `'end'`, `'center'`, or `'nearest'`), an object that aligns each axis independently with `block` and `inline` (each set to `'start'`, `'end'`, `'center'`, or `'nearest'`), or `false` to disable scrolling. `'top'` and `'bottom'` align the vertical axis only, while `'start'` and `'end'` align both. See [Scrolling](/llm/markdown/app/core-concepts/interacting-with-elements.md#Scrolling). |\n| `visibilityStrategy` | `modern` | Selects the algorithm Cypress uses to check element visibility. `'modern'` (the default) delegates to the browser's native `Element.checkVisibility()` API. `'legacy'` opts back into the ancestor-walking algorithm from Cypress 15 and earlier. This option is deprecated — the `'legacy'` value and the option itself will be removed in a future major version. |\n\nFor more information, see the docs on [actionability](/llm/markdown/app/core-concepts/interacting-with-elements.md#Actionability).\n",
      "section": "app",
      "anchors": [
        "actionability"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 249
    },
    {
      "id": "app/configure/configuration#keyboard",
      "doc_id": "app/configure/configuration",
      "heading": "Keyboard",
      "heading_level": 3,
      "content_markdown": "### Keyboard\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `keystrokeDelay` | `null` | The delay, in milliseconds, between keystrokes while typing with [`.type()`](/llm/markdown/api/commands/type.md). Must be a non-negative number. |\n\nAs of Cypress 16, typing has no keystroke delay unless you ask for one, which makes typing-heavy suites noticeably faster. The resolved `keystrokeDelay` value is read from this configuration first, then [`Cypress.Keyboard.defaults()`](/llm/markdown/api/cypress-api/keyboard-api.md), and falls back to `0` if neither is set. A per-command `delay` passed to [`.type()`](/llm/markdown/api/commands/type.md) is independent of this and overrides the resolved value for that single call.\n\nIf you relied on the pre-16 default of `10`, set `keystrokeDelay: 10` here or via [`Cypress.Keyboard.defaults()`](/llm/markdown/api/cypress-api/keyboard-api.md) in a support file.\n",
      "section": "app",
      "anchors": [
        "keyboard"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 156
    },
    {
      "id": "app/configure/configuration#system",
      "doc_id": "app/configure/configuration",
      "heading": "System",
      "heading_level": 3,
      "content_markdown": "### System\n\nThese values are set by Cypress at startup and are read-only — they cannot be changed in your Cypress configuration file. They can be accessed via [`Cypress.config()`](/llm/markdown/api/cypress-api/config.md). The `browsers` property is an exception: it can also be modified in [`setupNodeEvents`](#setupNodeEvents) to filter or add custom browsers.\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `arch` | `os.arch()` | The underlying OS CPU architecture. Common values are `x64`, `arm`, and `arm64`. |\n| `browsers` | `[]` | A list of browsers found on your system. Populated by Cypress at startup. Can be filtered or extended in [`setupNodeEvents`](#setupNodeEvents). |\n| `isInteractive` | `true` | Whether Cypress is running in interactive mode (`cypress open`). Set to `false` during `cypress run`. See [Notes](#isInteractive) for usage. |\n| `platform` | `os.platform()` | The underlying OS platform name (e.g. `linux`, `darwin`, `win32`). |\n| `resolvedNodePath` | `null` | The path to the Node.js binary used for [`cy.task()`](/llm/markdown/api/commands/task.md) commands. Set by Cypress at startup. |\n| `resolvedNodeVersion` | `null` | The version of Node.js used by Cypress. Set by Cypress at startup. |\n",
      "section": "app",
      "anchors": [
        "system"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 247
    },
    {
      "id": "app/configure/configuration#testing-type-specific-options",
      "doc_id": "app/configure/configuration",
      "heading": "Testing Type-Specific Options",
      "heading_level": 2,
      "content_markdown": "## Testing Type-Specific Options\n\nYou can provide configuration options for either E2E or Component Testing by creating `e2e` and `component` objects inside your Cypress configuration.\n\n### e2e\n\nThese options are available to be specified inside the `e2e` configuration object:\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `baseUrl` | `null` | URL used as prefix for [`cy.visit()`](/llm/markdown/api/commands/visit.md) or [`cy.request()`](/llm/markdown/api/commands/request.md) command's URL. |\n| `setupNodeEvents` | `null` | Function in which node events can be registered and config can be modified. Takes the place of the (removed) pluginFile option. [Please read the notes for examples on using this.](#setupNodeEvents) |\n| `supportFile` | `cypress/support/e2e.{js,jsx,ts,tsx}` | Path to file to load before spec files load. This file is compiled and bundled. (Pass `false` to disable) |\n| `specPattern` | `cypress/e2e/**/*.cy.{js,jsx,ts,tsx}` | A String or Array of glob patterns of the test files to load. |\n| `excludeSpecPattern` | `*.hot-update.js` | A String or Array of glob patterns used to ignore test files that would otherwise be shown in your list of tests. [Please read the notes on using this.](#excludeSpecPattern) |\n| `slowTestThreshold` | `10000` | Time, in milliseconds, to consider a test \"slow\" during `cypress run`. A slow test will display in orange text in the default reporter. |\n| `testIsolation` | `true` | Whether or not [test isolation](/llm/markdown/app/core-concepts/writing-and-organizing-tests.md#Test-Isolation) is enabled to ensure a clean browser context between tests. |\n| `injectDocumentDomain` deprecated | `false` | Instructs Cypress to use the `document.domain` property to reduce the need for [`cy.origin`](/llm/markdown/api/commands/origin.md). [Please read the notes on using this.](#injectDocumentDomain) |\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    // e2e options here\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    // e2e options here\n  },\n})\n```\n\n### component\n\nThese options are available to be specified inside the `component` configuration object:\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `devServer` | `null` | Required option used to configure the component testing dev server. [Please read the notes for examples on using this.](#devServer) |\n| `indexHtmlFile` | `cypress/support/component-index.html` | This is where Cypress renders your components and allows you to add in global assets, such as styles, fonts, and external scripts. |\n| `justInTimeCompile` | `true` | Compile resources directly related to your spec for webpack, compiling them 'just-in-time' before spec execution. |\n| `setupNodeEvents` | `null` | Function in which node events can be registered and config can be modified. Takes the place of the (removed) plugins file. [Please read the notes for examples on using this.](#setupNodeEvents) |\n| `supportFile` | `cypress/support/component.js` | Path to file to load before spec files load. This file is compiled and bundled. (Pass `false` to disable) |\n| `specPattern` | `**/*.cy.{js,jsx,ts,tsx}` | A glob pattern String or Array of glob pattern Strings of the spec files to load.  \n  \nNote that any files found matching the `e2e.specPattern` value will be automatically **excluded.** |\n| `excludeSpecPattern` | `['/snapshots/*', '/image_snapshots/*']` | A String or Array of glob patterns used to ignore spec files that would otherwise be shown in your list of specs. [Please read the notes on using this.](#excludeSpecPattern) |\n| `experimentalSingleTabRunMode` | `false` | Run all specs in a single tab, instead of creating a new tab per spec. This can improve run mode performance, but can impact spec isolation and reliability on large test suites. This experiment currently only applies to Component Testing. |\n| `slowTestThreshold` | `250` | Time, in milliseconds, to consider a test \"slow\" during `cypress run`. A slow test will display in orange text in the default reporter. |\n| `devServerPublicPathRoute` | `/__cypress/src` | The public path of the dev server in use. Use caution overriding the default value as it can have unintended consequences. See [Framework Configuration](/llm/markdown/app/component-testing/component-framework-configuration.md) or dev server specific documentation (in particular `@cypress/vite-dev-server`). |\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  component: {\n    // component options here\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  component: {\n    // component options here\n  },\n})\n```\n",
      "section": "app",
      "anchors": [
        "testing-type-specific-options"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 923
    },
    {
      "id": "app/configure/configuration#e2e",
      "doc_id": "app/configure/configuration",
      "heading": "e2e",
      "heading_level": 3,
      "content_markdown": "### e2e\n\nThese options are available to be specified inside the `e2e` configuration object:\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `baseUrl` | `null` | URL used as prefix for [`cy.visit()`](/llm/markdown/api/commands/visit.md) or [`cy.request()`](/llm/markdown/api/commands/request.md) command's URL. |\n| `setupNodeEvents` | `null` | Function in which node events can be registered and config can be modified. Takes the place of the (removed) pluginFile option. [Please read the notes for examples on using this.](#setupNodeEvents) |\n| `supportFile` | `cypress/support/e2e.{js,jsx,ts,tsx}` | Path to file to load before spec files load. This file is compiled and bundled. (Pass `false` to disable) |\n| `specPattern` | `cypress/e2e/**/*.cy.{js,jsx,ts,tsx}` | A String or Array of glob patterns of the test files to load. |\n| `excludeSpecPattern` | `*.hot-update.js` | A String or Array of glob patterns used to ignore test files that would otherwise be shown in your list of tests. [Please read the notes on using this.](#excludeSpecPattern) |\n| `slowTestThreshold` | `10000` | Time, in milliseconds, to consider a test \"slow\" during `cypress run`. A slow test will display in orange text in the default reporter. |\n| `testIsolation` | `true` | Whether or not [test isolation](/llm/markdown/app/core-concepts/writing-and-organizing-tests.md#Test-Isolation) is enabled to ensure a clean browser context between tests. |\n| `injectDocumentDomain` deprecated | `false` | Instructs Cypress to use the `document.domain` property to reduce the need for [`cy.origin`](/llm/markdown/api/commands/origin.md). [Please read the notes on using this.](#injectDocumentDomain) |\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    // e2e options here\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    // e2e options here\n  },\n})\n```\n",
      "section": "app",
      "anchors": [
        "e2e"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 371
    },
    {
      "id": "app/configure/configuration#component",
      "doc_id": "app/configure/configuration",
      "heading": "component",
      "heading_level": 3,
      "content_markdown": "### component\n\nThese options are available to be specified inside the `component` configuration object:\n\n| Option | Default | Description |\n| --- | --- | --- |\n| `devServer` | `null` | Required option used to configure the component testing dev server. [Please read the notes for examples on using this.](#devServer) |\n| `indexHtmlFile` | `cypress/support/component-index.html` | This is where Cypress renders your components and allows you to add in global assets, such as styles, fonts, and external scripts. |\n| `justInTimeCompile` | `true` | Compile resources directly related to your spec for webpack, compiling them 'just-in-time' before spec execution. |\n| `setupNodeEvents` | `null` | Function in which node events can be registered and config can be modified. Takes the place of the (removed) plugins file. [Please read the notes for examples on using this.](#setupNodeEvents) |\n| `supportFile` | `cypress/support/component.js` | Path to file to load before spec files load. This file is compiled and bundled. (Pass `false` to disable) |\n| `specPattern` | `**/*.cy.{js,jsx,ts,tsx}` | A glob pattern String or Array of glob pattern Strings of the spec files to load.  \n  \nNote that any files found matching the `e2e.specPattern` value will be automatically **excluded.** |\n| `excludeSpecPattern` | `['/snapshots/*', '/image_snapshots/*']` | A String or Array of glob patterns used to ignore spec files that would otherwise be shown in your list of specs. [Please read the notes on using this.](#excludeSpecPattern) |\n| `experimentalSingleTabRunMode` | `false` | Run all specs in a single tab, instead of creating a new tab per spec. This can improve run mode performance, but can impact spec isolation and reliability on large test suites. This experiment currently only applies to Component Testing. |\n| `slowTestThreshold` | `250` | Time, in milliseconds, to consider a test \"slow\" during `cypress run`. A slow test will display in orange text in the default reporter. |\n| `devServerPublicPathRoute` | `/__cypress/src` | The public path of the dev server in use. Use caution overriding the default value as it can have unintended consequences. See [Framework Configuration](/llm/markdown/app/component-testing/component-framework-configuration.md) or dev server specific documentation (in particular `@cypress/vite-dev-server`). |\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  component: {\n    // component options here\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  component: {\n    // component options here\n  },\n})\n```\n",
      "section": "app",
      "anchors": [
        "component"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 519
    },
    {
      "id": "app/configure/configuration#overriding-options",
      "doc_id": "app/configure/configuration",
      "heading": "Overriding Options",
      "heading_level": 2,
      "content_markdown": "## Overriding Options\n\nCypress gives you the option to dynamically alter configuration options. This is helpful when running Cypress in multiple environments and on multiple developer machines.\n\n### Overriding Individual Options\n\nWhen running Cypress from the command line you can pass a `--config` flag to override individual config options.\n\nFor example, to override `viewportWidth` and `viewportHeight`, you can run:\n\n```\ncypress run --browser firefox --config viewportWidth=1280,viewportHeight=720\n```\n\n### Specifying an Alternative Config File\n\nIn the Cypress CLI, you can change which config file Cypress will use with the [`--config-file`](/llm/markdown/app/references/command-line.md#cypress-open-config-file-lt-configuration-file-gt) flag.\n\n```\ncypress run --config-file tests/cypress.config.js\n```\n\nSee the [Command Line](/llm/markdown/app/references/command-line.md) guide for more examples.\n\n### Testing Type-Specific Overrides\n\nIn addition to setting [Testing Type-Specific options](#Testing-Type-Specific-Options), you can override other configuration options for either the [E2E Testing](/llm/markdown/app/core-concepts/testing-types.md#What-is-E2E-Testing) or [Component Testing](/llm/markdown/app/core-concepts/testing-types.md#What-is-Component-Testing).\n\nFor example:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  // These settings apply everywhere unless overridden\n  defaultCommandTimeout: 5000,\n  viewportWidth: 1000,\n  viewportHeight: 600,\n  // Viewport settings overridden for component tests\n  component: {\n    viewportWidth: 500,\n    viewportHeight: 500,\n  },\n  // Command timeout overridden for E2E tests\n  e2e: {\n    defaultCommandTimeout: 10000,\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  // These settings apply everywhere unless overridden\n  defaultCommandTimeout: 5000,\n  viewportWidth: 1000,\n  viewportHeight: 600,\n  // Viewport settings overridden for component tests\n  component: {\n    viewportWidth: 500,\n    viewportHeight: 500,\n  },\n  // Command timeout overridden for E2E tests\n  e2e: {\n    defaultCommandTimeout: 10000,\n  },\n})\n```\n\n### Environment Variables\n\nConfiguration options can be overridden with environment variables. This is especially useful in [Continuous Integration](/llm/markdown/app/continuous-integration/overview.md) or when working locally. This gives you the ability to change configuration options without modifying any code or build scripts.\n\nFor example, these environment variables in the command line will override any `viewportWidth` or `viewportHeight` options set in the Cypress configuration:\n\n```\nexport CYPRESS_VIEWPORT_WIDTH=800\nexport CYPRESS_VIEWPORT_HEIGHT=600\n```\n",
      "section": "app",
      "anchors": [
        "overriding-options"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 403
    },
    {
      "id": "app/configure/configuration#overriding-individual-options",
      "doc_id": "app/configure/configuration",
      "heading": "Overriding Individual Options",
      "heading_level": 3,
      "content_markdown": "### Overriding Individual Options\n\nWhen running Cypress from the command line you can pass a `--config` flag to override individual config options.\n\nFor example, to override `viewportWidth` and `viewportHeight`, you can run:\n\n```\ncypress run --browser firefox --config viewportWidth=1280,viewportHeight=720\n```\n",
      "section": "app",
      "anchors": [
        "overriding-individual-options"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 53
    },
    {
      "id": "app/configure/configuration#specifying-an-alternative-config-file",
      "doc_id": "app/configure/configuration",
      "heading": "Specifying an Alternative Config File",
      "heading_level": 3,
      "content_markdown": "### Specifying an Alternative Config File\n\nIn the Cypress CLI, you can change which config file Cypress will use with the [`--config-file`](/llm/markdown/app/references/command-line.md#cypress-open-config-file-lt-configuration-file-gt) flag.\n\n```\ncypress run --config-file tests/cypress.config.js\n```\n\nSee the [Command Line](/llm/markdown/app/references/command-line.md) guide for more examples.\n",
      "section": "app",
      "anchors": [
        "specifying-an-alternative-config-file"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 49
    },
    {
      "id": "app/configure/configuration#testing-type-specific-overrides",
      "doc_id": "app/configure/configuration",
      "heading": "Testing Type-Specific Overrides",
      "heading_level": 3,
      "content_markdown": "### Testing Type-Specific Overrides\n\nIn addition to setting [Testing Type-Specific options](#Testing-Type-Specific-Options), you can override other configuration options for either the [E2E Testing](/llm/markdown/app/core-concepts/testing-types.md#What-is-E2E-Testing) or [Component Testing](/llm/markdown/app/core-concepts/testing-types.md#What-is-Component-Testing).\n\nFor example:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  // These settings apply everywhere unless overridden\n  defaultCommandTimeout: 5000,\n  viewportWidth: 1000,\n  viewportHeight: 600,\n  // Viewport settings overridden for component tests\n  component: {\n    viewportWidth: 500,\n    viewportHeight: 500,\n  },\n  // Command timeout overridden for E2E tests\n  e2e: {\n    defaultCommandTimeout: 10000,\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  // These settings apply everywhere unless overridden\n  defaultCommandTimeout: 5000,\n  viewportWidth: 1000,\n  viewportHeight: 600,\n  // Viewport settings overridden for component tests\n  component: {\n    viewportWidth: 500,\n    viewportHeight: 500,\n  },\n  // Command timeout overridden for E2E tests\n  e2e: {\n    defaultCommandTimeout: 10000,\n  },\n})\n```\n",
      "section": "app",
      "anchors": [
        "testing-type-specific-overrides"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 177
    },
    {
      "id": "app/configure/configuration#environment-variables",
      "doc_id": "app/configure/configuration",
      "heading": "Environment Variables",
      "heading_level": 3,
      "content_markdown": "### Environment Variables\n\nConfiguration options can be overridden with environment variables. This is especially useful in [Continuous Integration](/llm/markdown/app/continuous-integration/overview.md) or when working locally. This gives you the ability to change configuration options without modifying any code or build scripts.\n\nFor example, these environment variables in the command line will override any `viewportWidth` or `viewportHeight` options set in the Cypress configuration:\n\n```\nexport CYPRESS_VIEWPORT_WIDTH=800\nexport CYPRESS_VIEWPORT_HEIGHT=600\n```\n",
      "section": "app",
      "anchors": [
        "environment-variables"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 87
    },
    {
      "id": "app/configure/configuration#test-configuration",
      "doc_id": "app/configure/configuration",
      "heading": "Test Configuration",
      "heading_level": 2,
      "content_markdown": "## Test Configuration\n\nWe provide two options to override the configuration while your test are running, `Cypress.config()` and suite-specific or test-specific configuration overrides.\n\n⚠️ **Note:** The configuration values below are all writeable and **can be changed** via test configuration. Any other configuration values are readonly and cannot be changed at run time.\n\n*   `animationDistanceThreshold`\n*   `baseUrl`\n*   `blockHosts` - this option cannot be overridden with `Cypress.config()` while a test is executing\n*   `defaultCommandTimeout`\n*   `includeShadowDom`\n*   `keystrokeDelay`\n*   `numTestsKeptInMemory`\n*   `pageLoadTimeout`\n*   `redirectionLimit`\n*   `requestTimeout`\n*   `responseTimeout`\n*   `retries`\n*   `screenshotOnRunFailure`\n*   `scrollBehavior`\n*   `slowTestThreshold`\n*   `taskTimeout`\n*   `testIsolation` - this option can only be overridden at the suite-specific override level\n*   `viewportHeight` - this option cannot be overridden with `Cypress.config()` while a test is executing\n*   `viewportWidth` - this option cannot be overridden with `Cypress.config()` while a test is executing\n*   `waitForAnimations`\n\n### `Cypress.config()`\n\nYou can also override configuration values within your test using [`Cypress.config()`](/llm/markdown/api/cypress-api/config.md).\n\nThis changes the configuration _for the remaining execution of the current spec file_. The values will reset to the previous default values after the spec has complete.\n\n```\nCypress.config('pageLoadTimeout', 100000)\n\nCypress.config('pageLoadTimeout') // => 100000\n```\n\n`blockHosts`, `viewportHeight`, and `viewportWidth` cannot be overridden with `Cypress.config()` while a test is executing, because doing so would affect the _next_ test rather than the current one. Set them in [test-specific configuration](#Test-specific-Configuration) instead, or use [`cy.viewport()`](/llm/markdown/api/commands/viewport.md) to change the viewport during a test.\n\n### Test-specific Configuration\n\nTo apply specific Cypress [configuration](/llm/markdown/app/references/configuration.md) values to a suite or test, pass a configuration object to the test or suite function as the second argument.\n\nThe configuration values passed in will only take effect during the suite or test where they are set. The values will then reset to the previous default values after the suite or test is complete.\n\nYou can also pass an `expose` object so plugins can declare public configuration per suite or test with [`Cypress.expose()`](/llm/markdown/api/cypress-api/expose.md). Expose overrides are merged across nested suites and tests, 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.\n\n#### Syntax\n\n```\ndescribe(name, config, fn)\ncontext(name, config, fn)\nit(name, config, fn)\nspecify(name, config, fn)\n```\n\n#### Suite configuration\n\nIf you want to target a suite of tests to run or be excluded when run in a specific browser, you can override the `browser` configuration within the suite configuration. The `browser` option accepts the same arguments as [`Cypress.isBrowser()`](/llm/markdown/api/cypress-api/isbrowser.md).\n\nYou can configure the number of times to retries a suite of tests if they fail during `cypress run` and `cypress open` separately.\n\n```\ndescribe(\n  'login',\n  {\n    retries: {\n      runMode: 3,\n      openMode: 2,\n    },\n  },\n  () => {\n    it('should redirect unauthenticated user to sign-in page', () => {\n      // ...\n    })\n\n    it('allows user to login', () => {\n      // ...\n    })\n  }\n)\n```\n\n#### Single test configuration\n\nIf you want to target a test to run or be excluded when run in a specific browser, you can override the `browser` configuration within the test configuration. The `browser` option accepts the same arguments as [Cypress.isBrowser()](/llm/markdown/api/cypress-api/isbrowser.md).\n\n```\nit('Show warning outside Chrome', { browser: '!chrome' }, () => {\n  cy.get('.browser-warning').should(\n    'contain',\n    'For optimal viewing, use Chrome browser'\n  )\n})\n```\n",
      "section": "app",
      "anchors": [
        "test-configuration"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 713
    },
    {
      "id": "app/configure/configuration#cypress-config",
      "doc_id": "app/configure/configuration",
      "heading": "Cypress.config()",
      "heading_level": 3,
      "content_markdown": "### `Cypress.config()`\n\nYou can also override configuration values within your test using [`Cypress.config()`](/llm/markdown/api/cypress-api/config.md).\n\nThis changes the configuration _for the remaining execution of the current spec file_. The values will reset to the previous default values after the spec has complete.\n\n```\nCypress.config('pageLoadTimeout', 100000)\n\nCypress.config('pageLoadTimeout') // => 100000\n```\n\n`blockHosts`, `viewportHeight`, and `viewportWidth` cannot be overridden with `Cypress.config()` while a test is executing, because doing so would affect the _next_ test rather than the current one. Set them in [test-specific configuration](#Test-specific-Configuration) instead, or use [`cy.viewport()`](/llm/markdown/api/commands/viewport.md) to change the viewport during a test.\n",
      "section": "app",
      "anchors": [
        "cypress-config"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 121
    },
    {
      "id": "app/configure/configuration#test-specific-configuration",
      "doc_id": "app/configure/configuration",
      "heading": "Test-specific Configuration",
      "heading_level": 3,
      "content_markdown": "### Test-specific Configuration\n\nTo apply specific Cypress [configuration](/llm/markdown/app/references/configuration.md) values to a suite or test, pass a configuration object to the test or suite function as the second argument.\n\nThe configuration values passed in will only take effect during the suite or test where they are set. The values will then reset to the previous default values after the suite or test is complete.\n\nYou can also pass an `expose` object so plugins can declare public configuration per suite or test with [`Cypress.expose()`](/llm/markdown/api/cypress-api/expose.md). Expose overrides are merged across nested suites and tests, 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.\n\n#### Syntax\n\n```\ndescribe(name, config, fn)\ncontext(name, config, fn)\nit(name, config, fn)\nspecify(name, config, fn)\n```\n\n#### Suite configuration\n\nIf you want to target a suite of tests to run or be excluded when run in a specific browser, you can override the `browser` configuration within the suite configuration. The `browser` option accepts the same arguments as [`Cypress.isBrowser()`](/llm/markdown/api/cypress-api/isbrowser.md).\n\nYou can configure the number of times to retries a suite of tests if they fail during `cypress run` and `cypress open` separately.\n\n```\ndescribe(\n  'login',\n  {\n    retries: {\n      runMode: 3,\n      openMode: 2,\n    },\n  },\n  () => {\n    it('should redirect unauthenticated user to sign-in page', () => {\n      // ...\n    })\n\n    it('allows user to login', () => {\n      // ...\n    })\n  }\n)\n```\n\n#### Single test configuration\n\nIf you want to target a test to run or be excluded when run in a specific browser, you can override the `browser` configuration within the test configuration. The `browser` option accepts the same arguments as [Cypress.isBrowser()](/llm/markdown/api/cypress-api/isbrowser.md).\n\n```\nit('Show warning outside Chrome', { browser: '!chrome' }, () => {\n  cy.get('.browser-warning').should(\n    'contain',\n    'For optimal viewing, use Chrome browser'\n  )\n})\n```\n",
      "section": "app",
      "anchors": [
        "test-specific-configuration"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 401
    },
    {
      "id": "app/configure/configuration#suite-configuration",
      "doc_id": "app/configure/configuration",
      "heading": "Suite configuration",
      "heading_level": 4,
      "content_markdown": "#### Suite configuration\n\nIf you want to target a suite of tests to run or be excluded when run in a specific browser, you can override the `browser` configuration within the suite configuration. The `browser` option accepts the same arguments as [`Cypress.isBrowser()`](/llm/markdown/api/cypress-api/isbrowser.md).\n\nYou can configure the number of times to retries a suite of tests if they fail during `cypress run` and `cypress open` separately.\n\n```\ndescribe(\n  'login',\n  {\n    retries: {\n      runMode: 3,\n      openMode: 2,\n    },\n  },\n  () => {\n    it('should redirect unauthenticated user to sign-in page', () => {\n      // ...\n    })\n\n    it('allows user to login', () => {\n      // ...\n    })\n  }\n)\n```\n",
      "section": "app",
      "anchors": [
        "suite-configuration"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 141
    },
    {
      "id": "app/configure/configuration#single-test-configuration",
      "doc_id": "app/configure/configuration",
      "heading": "Single test configuration",
      "heading_level": 4,
      "content_markdown": "#### Single test configuration\n\nIf you want to target a test to run or be excluded when run in a specific browser, you can override the `browser` configuration within the test configuration. The `browser` option accepts the same arguments as [Cypress.isBrowser()](/llm/markdown/api/cypress-api/isbrowser.md).\n\n```\nit('Show warning outside Chrome', { browser: '!chrome' }, () => {\n  cy.get('.browser-warning').should(\n    'contain',\n    'For optimal viewing, use Chrome browser'\n  )\n})\n```\n",
      "section": "app",
      "anchors": [
        "single-test-configuration"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 85
    },
    {
      "id": "app/configure/configuration#resolved-configuration",
      "doc_id": "app/configure/configuration",
      "heading": "Resolved Configuration",
      "heading_level": 2,
      "content_markdown": "## Resolved Configuration\n\nWhen you open a Cypress project, expanding the Project Settings panel under **Settings** will display the resolved configuration to you. This helps you to understand and see where different values came from. Each set value is highlighted to show where the value has been set via the following ways:\n\n*   Default value\n*   [Cypress configuration file](/llm/markdown/app/references/configuration.md)\n*   The `cypress.env.json` file (if present)\n*   System set environment variables prefixed with `CYPRESS_`\n*   [Command Line arguments](/llm/markdown/app/references/command-line.md)\n*   [setupNodeEvents](#setupNodeEvents)\n",
      "section": "app",
      "anchors": [
        "resolved-configuration"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 105
    },
    {
      "id": "app/configure/configuration#notes",
      "doc_id": "app/configure/configuration",
      "heading": "Notes",
      "heading_level": 2,
      "content_markdown": "## Notes\n\n### blockHosts\n\nBy passing a string or array of strings you can block requests made to one or more hosts.\n\nTo block a host:\n\n*   ✅ Pass only the host\n*   ✅ Use wildcard `*` patterns\n*   ✅ Include the port other than `80` and `443`\n*   ❌ Do **NOT** include protocol: `http://` or `https://`\n\nNot sure what a part of the URL a host is? [Use this guide as a reference.](https://nodejs.org/api/url.html#url_url_strings_and_url_objects)\n\nWhen blocking a host, we use [`minimatch`](/llm/markdown/api/utilities/minimatch.md) to check the host. When in doubt you can test whether something matches yourself.\n\nGiven the following URLs:\n\n```\nhttps://www.google-analytics.com/ga.js\n\nhttp://localhost:1234/some/user.json\n```\n\nThis would match the following blocked hosts:\n\n```\nwww.google-analytics.com\n*.google-analytics.com\n*google-analytics.com\n\nlocalhost:1234\n```\n\nBecause `localhost:1234` uses a port other than `80` and `443` it **must be included**.\n\n**Subdomains**\n\nBe cautious for URL's which have no subdomain.\n\nFor instance given a URL: `https://google.com/search?q=cypress`\n\n*   ✅ Matches `google.com`\n*   ✅ Matches `*google.com`\n*   ❌ Does NOT match `*.google.com`\n\nWhen Cypress blocks a request made to a matching host, it will automatically send a `503` status code. As a convenience it also sets a `x-cypress-matched-blocked-host` header so you can see which rule it matched.\n\n### hosts\n\nBy passing an object with hostname patterns as keys and IP addresses as values, you can resolve custom hostnames to specific IP addresses within Cypress. This is the equivalent of adding entries to your machine's `/etc/hosts` file, but scoped to Cypress — no changes to your OS are required.\n\nTo map a hostname:\n\n*   ✅ Pass an exact hostname\n*   ✅ Use wildcard `*` patterns (e.g., `*.example.com`)\n*   ❌ Do **NOT** include protocol: `http://` or `https://`\n\nWildcard patterns use the same glob syntax supported by [`minimatch`](/llm/markdown/api/utilities/minimatch.md). When in doubt you can test whether a pattern matches yourself.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  hosts: {\n    'not.public.host.com': '191.1.191.111',\n    '*.loc': '127.0.0.1',\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  hosts: {\n    'not.public.host.com': '191.1.191.111',\n    '*.loc': '127.0.0.1',\n  },\n})\n```\n\nThis is useful when testing against hostnames that have no public DNS entries, or when you need multiple domain names to resolve to local test servers without editing your system hosts file.\n\n### devServer\n\nThe `devServer` option is required for [`component`](#component) testing, and allows you to register a component testing dev server.\n\nTypically, you will specify a `framework` and `bundler` options in `devServer` for your framework and UI library like so:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  component: {\n    devServer: {\n      framework: 'create-react-app',\n      bundler: 'webpack',\n    },\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  component: {\n    devServer: {\n      framework: 'create-react-app',\n      bundler: 'webpack',\n    },\n  },\n})\n```\n\nSee [Framework Configuration](/llm/markdown/app/component-testing/component-framework-configuration.md) guide for more info on all the available `framework` and `bundler` options, as well as additional configuration options.\n\n#### Custom Dev Server\n\nIt is possible to customize the devServer and provide your own function for custom or advanced setups.\n\nThe devServer function receives a `cypressConfig` argument:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  component: {\n    devServer(cypressConfig) {\n      // return dev server instance or a promise that resolves to\n      // a dev server instance here\n    },\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  component: {\n    devServer(cypressConfig) {\n      // return dev server instance or a promise that resolves to\n      // a dev server instance here\n    },\n  },\n})\n```\n\nSee the [Custom Dev Server](/llm/markdown/app/component-testing/component-framework-configuration.md) guide for more info.\n\n### excludeSpecPattern\n\nCypress uses `minimatch` with the options: `{dot: true, matchBase: true}`. We suggest using [https://globster.xyz](https://globster.xyz) to test what files would match.\n\nThe `**/node_modules/**` pattern is automatically added to `excludeSpecPattern`, and does not need to be specified (and can't be overridden). See [`e2e`](#e2e) or [`component`](#component) testing-specific options.\n\n### forceHttp1\n\nThis option is deprecated, and will be removed in a future version of Cypress.\n\nAs of [Cypress 16](/llm/markdown/app/references/changelog.md#16-0-0), Cypress intercepts network traffic inside Chrome, Chromium, and Edge on the native browser network. Your application connects to your server directly and negotiates whatever protocol the server supports (HTTP/1.1, HTTP/2, or HTTP/3), the same way it does in production, so requests are no longer always downgraded to HTTP/1.1.\n\n| Browser | `forceHttp1: false` (default) | `forceHttp1: true` |\n| --- | --- | --- |\n| Chrome, Chromium, Edge | Native browser network | Legacy network path |\n| Firefox, WebKit | Legacy network path | Legacy network path |\n| Electron | Legacy network path | Legacy network path |\n\nFirefox and WebKit continue to use the legacy network path because Cypress has not implemented a native browser network path for them yet. Electron also uses the legacy network path; see [Electron is deprecated as a test browser](/llm/markdown/app/references/migration-guide.md#Electron-browser-deprecated).\n\nSet `forceHttp1` to `true` to route every browser through the legacy network path, the way Cypress worked before version 16. See [Native network interception](/llm/markdown/app/guides/native-network-interception.md) for the full list of differences and how to update tests that rely on them. If undocumented behavior is what makes your suite pass, [open an issue](https://github.com/cypress-io/cypress/issues/new/choose). Setting it to `true` restarts the Cypress server when changed, and cannot be set per test or per suite.\n\n[`forceHttp1`](/llm/markdown/app/references/configuration.md#forceHttp1) is both introduced and deprecated in Cypress 16. It exists only to give suites time to migrate, or as a temporary escape hatch while an issue you have filed is fixed, and it will be removed once the native browser network is supported long term. Do not set it to `true` only to avoid updating tests for the native browser network, such as skipping `Cypress.isBrowser()` gates. Treat it as a temporary aid, not a permanent setting.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  forceHttp1: true,\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  forceHttp1: true,\n})\n```\n\n### injectDocumentDomain\n\nThis option is deprecated, and will be removed in a future version of Cypress.\n\nSet this configuration option to `true` to instruct Cypress to [inject document.domain](/llm/markdown/app/guides/cross-origin-testing.md#What-Cypress-does-under-the-hood) into your test application. This can reduce the need for [`cy.origin()`](/llm/markdown/api/commands/origin.md) when [navigating between subdomains](/llm/markdown/app/guides/cross-origin-testing.md), but comes with compatibility caveats for some sites.\n\nThis configuration option is provided to ease the transition between [`cy.origin()`](/llm/markdown/api/commands/origin.md)'s behavior in Cypress 13 and the default behavior in Cypress 14. [Read the Cypress 14 migration guide](/llm/markdown/app/references/migration-guide.md#Migrating-to-Cypress-140) to understand how to update your tests to remove the need to set this flag.\n\nThis configuration value _must_ be set to true if you are running tests with experimental WebKit support, as [`cy.origin()`](/llm/markdown/api/commands/origin.md) is not yet supported in WebKit.\n\n#### Known Incompatibilities\n\nSetting this configuration value to `true` can cause the application you are testing to behave in unexpected ways. This is especially true if a site your tests visit sets the [`Origin-Agent-Cluster`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin-Agent-Cluster) header.\n\nAt this point in time, we are aware of the following sites that cannot be tested properly if this option is set to `true`:\n\n*   Azure AD B2C authentication workflows\n*   Salesforce\n*   Google\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    injectDocumentDomain: true,\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    injectDocumentDomain: true,\n  },\n})\n```\n\n### isInteractive\n\nYou can open Cypress in the interactive mode via the `cypress open` command, and in run mode via the `cypress run` command. To detect the mode from your test code you can query the `isInteractive` property on [Cypress.config](/llm/markdown/api/cypress-api/config.md).\n\n```\nif (Cypress.config('isInteractive')) {\n  // interactive \"cypress open\" mode!\n} else {\n  // \"cypress run\" mode\n}\n```\n\n### manageBrowserMemory\n\nIn a long-running Cypress test suite, the browser accumulates memory across tests. References to DOM nodes, event listeners, and application state from earlier tests can linger in the browser's heap even after Cypress clears the page. As memory pressure builds, the browser can slow down and in severe cases crash mid-run.\n\nAs of Cypress 16, [`manageBrowserMemory`](/llm/markdown/app/references/configuration.md#Global) defaults to `true`, so this is handled for you without any configuration. Cypress samples the browser's memory usage on an interval while your tests run, and forces a garbage collection before the next test only when a sample has crossed a memory threshold.\n\n`manageBrowserMemory` only applies to Chromium-based browsers (Chrome, Edge). It has no effect in Firefox or WebKit.\n\nThis flag is not a blanket speed improvement. Clearing memory between tests takes time, paid on every test transition. If your suite is not under meaningful memory pressure, you can opt out to potentially save the overhead. You should measure the performance impact before and after disabling the flag.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  manageBrowserMemory: false,\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  manageBrowserMemory: false,\n})\n```\n\n### modifyObstructiveCode\n\nWith this option enabled - Cypress will search through the response streams coming from your server on `.html` and `.js` files and replace code that matches patterns commonly found in framebusting.\n\nThese script patterns are antiquated and deprecated security techniques to prevent clickjacking and framebusting. They are a relic of the past and are no longer necessary in modern browsers. However many sites and applications still implement them.\n\nThese techniques prevent Cypress from working, and they can be safely removed without altering any of your application's behavior.\n\nCypress modifies these scripts at the network level, and therefore there is a tiny performance cost to search the response streams for these patterns.\n\nYou can turn this option off if the application or site you're testing **does not** implement these security measures. Additionally it's possible that the patterns we search for may accidentally rewrite valid JS code. If that's the case, please disable this option.\n\nDetails for `experimentalModifyObstructiveThirdPartyCode` can be found [here](/llm/markdown/app/guides/cross-origin-testing.md#Modifying-Obstructive-Third-Party-Code).\n\nBecause rewriting these scripts changes their bytes, any pinned [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) hash on the resource will no longer match and the browser will block it. If your application uses SRI, enable [`removeSRIAttributes`](#removeSRIAttributes) so the rewritten resources are not blocked.\n\n### removeSRIAttributes\n\nWhen this option is enabled, Cypress removes [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) `integrity` attributes from `<script>` and `<link>` elements as they are served to the browser.\n\nCypress rewrites obstructive JS and HTML (see [`modifyObstructiveCode`](#modifyObstructiveCode)) before it reaches the browser. Rewriting changes the resource's bytes, which invalidates any pinned SRI hash, so the browser refuses to execute or apply the resource and reports an error such as:\n\n```\nFailed to find a valid digest in the 'integrity' attribute for resource '…' …\nThe resource has been blocked.\n```\n\nEnabling `removeSRIAttributes` strips the `integrity` attribute so these resources load normally under test. It applies to **first-party** resources, and covers `integrity` defined in any of the following ways:\n\n*   a static HTML attribute (for example, `<script src=\"app.js\" integrity=\"sha384-…\">`)\n*   a JavaScript string literal assigned to the attribute\n*   a runtime DOM property assignment (for example, [`webpack-subresource-integrity`](https://www.npmjs.com/package/webpack-subresource-integrity)'s `script.integrity = sriHashes[chunkId]`)\n\n`removeSRIAttributes` is the first-party counterpart to [`experimentalModifyObstructiveThirdPartyCode`](/llm/markdown/app/guides/cross-origin-testing.md#Modifying-Obstructive-Third-Party-Code), which removes SRI only for third-party resources. Enable both options to strip SRI across first- and third-party resources.\n\nThis option defaults to `false`, so existing behavior is unchanged. Enable it only if your application uses SRI and you see first-party resources blocked under test. Because removing SRI disables a check that protects against tampered resources, enable it only for applications under test.\n\n### setupNodeEvents\n\nThe `setupNodeEvents` function allows you to tap into, modify, or extend the internal behavior of Cypress using the [`on`](/llm/markdown/api/node-events/overview.md#on) and [`config`](/llm/markdown/api/node-events/overview.md#config) arguments, and is valid as an [`e2e`](#e2e) or [`component`](#component) testing specific option.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    setupNodeEvents(on, config) {\n      // e2e testing node events setup code\n    },\n  },\n  component: {\n    setupNodeEvents(on, config) {\n      // component testing node events setup code\n    },\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    setupNodeEvents(on, config) {\n      // e2e testing node events setup code\n    },\n  },\n  component: {\n    setupNodeEvents(on, config) {\n      // component testing node events setup code\n    },\n  },\n})\n```\n\nSee the [plugins guide](/llm/markdown/app/plugins/plugins-guide.md) for more information.\n\n### trashAssetsBeforeRuns\n\nWhen `trashAssetsBeforeRuns` is `true` (the default), Cypress clears out old assets before each `cypress run` so that the results you collect only come from the current run. This **only** happens during `cypress run`. Assets are never trashed when using `cypress open`.\n\nCypress trashes the following three folders:\n\n*   [`downloadsFolder`](#Downloads) (`cypress/downloads` by default)\n*   [`screenshotsFolder`](#Screenshots) (`cypress/screenshots` by default)\n*   [`videosFolder`](#Videos) (`cypress/videos` by default)\n\nFor each of these folders, Cypress removes the **entire contents** of the folder, every file and every nested subfolder. The folder itself is preserved; only its contents are cleared.\n\nHow the contents are removed depends on the operating system:\n\n*   On **macOS** and **Windows**, each item is moved to the system trash / Recycle Bin, so it can be recovered if needed.\n*   On **Linux**, the folders are emptied directly and the contents are **permanently deleted**.\n\n### Test files not found when using `spec` parameter\n\nWhen using the `--spec <path or mask>` argument, make it relative to the project's folder.\n\nThe `--spec` argument only runs specs that **also match the configured [`specPattern`](#e2e)**. Cypress computes the intersection of the `--spec` value and `specPattern`, so any spec file outside the configured `specPattern` will not be found — even if you pass its exact path.\n\nFor example, the default `e2e.specPattern` is `cypress/e2e/**/*.cy.{js,jsx,ts,tsx}`. If your spec lives outside `cypress/e2e/`, passing its path via `--spec` will not run it until you also update `specPattern` in your Cypress config to include that location:\n\n```\n// cypress.config.js\nmodule.exports = defineConfig({\n  e2e: {\n    specPattern: [\n      'cypress/e2e/**/*.cy.{js,jsx,ts,tsx}',\n      'tests/**/*.cy.{js,jsx,ts,tsx}',\n    ],\n  },\n})\n```\n\nIf the specs are still missing after verifying the path and `specPattern`, run Cypress with [DEBUG logs](/llm/markdown/app/references/troubleshooting.md#Print-DEBUG-logs) with the following setting to see how Cypress is looking for spec files:\n\n```\nDEBUG=cypress:cli,cypress:data-context:sources:FileDataSource,cypress:data-context:sources:ProjectDataSource\n```\n",
      "section": "app",
      "anchors": [
        "notes"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 3048
    },
    {
      "id": "app/configure/configuration#blockhosts",
      "doc_id": "app/configure/configuration",
      "heading": "blockHosts",
      "heading_level": 3,
      "content_markdown": "### blockHosts\n\nBy passing a string or array of strings you can block requests made to one or more hosts.\n\nTo block a host:\n\n*   ✅ Pass only the host\n*   ✅ Use wildcard `*` patterns\n*   ✅ Include the port other than `80` and `443`\n*   ❌ Do **NOT** include protocol: `http://` or `https://`\n\nNot sure what a part of the URL a host is? [Use this guide as a reference.](https://nodejs.org/api/url.html#url_url_strings_and_url_objects)\n\nWhen blocking a host, we use [`minimatch`](/llm/markdown/api/utilities/minimatch.md) to check the host. When in doubt you can test whether something matches yourself.\n\nGiven the following URLs:\n\n```\nhttps://www.google-analytics.com/ga.js\n\nhttp://localhost:1234/some/user.json\n```\n\nThis would match the following blocked hosts:\n\n```\nwww.google-analytics.com\n*.google-analytics.com\n*google-analytics.com\n\nlocalhost:1234\n```\n\nBecause `localhost:1234` uses a port other than `80` and `443` it **must be included**.\n\n**Subdomains**\n\nBe cautious for URL's which have no subdomain.\n\nFor instance given a URL: `https://google.com/search?q=cypress`\n\n*   ✅ Matches `google.com`\n*   ✅ Matches `*google.com`\n*   ❌ Does NOT match `*.google.com`\n\nWhen Cypress blocks a request made to a matching host, it will automatically send a `503` status code. As a convenience it also sets a `x-cypress-matched-blocked-host` header so you can see which rule it matched.\n",
      "section": "app",
      "anchors": [
        "blockhosts"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 256
    },
    {
      "id": "app/configure/configuration#hosts",
      "doc_id": "app/configure/configuration",
      "heading": "hosts",
      "heading_level": 3,
      "content_markdown": "### hosts\n\nBy passing an object with hostname patterns as keys and IP addresses as values, you can resolve custom hostnames to specific IP addresses within Cypress. This is the equivalent of adding entries to your machine's `/etc/hosts` file, but scoped to Cypress — no changes to your OS are required.\n\nTo map a hostname:\n\n*   ✅ Pass an exact hostname\n*   ✅ Use wildcard `*` patterns (e.g., `*.example.com`)\n*   ❌ Do **NOT** include protocol: `http://` or `https://`\n\nWildcard patterns use the same glob syntax supported by [`minimatch`](/llm/markdown/api/utilities/minimatch.md). When in doubt you can test whether a pattern matches yourself.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  hosts: {\n    'not.public.host.com': '191.1.191.111',\n    '*.loc': '127.0.0.1',\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  hosts: {\n    'not.public.host.com': '191.1.191.111',\n    '*.loc': '127.0.0.1',\n  },\n})\n```\n\nThis is useful when testing against hostnames that have no public DNS entries, or when you need multiple domain names to resolve to local test servers without editing your system hosts file.\n",
      "section": "app",
      "anchors": [
        "hosts"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 231
    },
    {
      "id": "app/configure/configuration#devserver",
      "doc_id": "app/configure/configuration",
      "heading": "devServer",
      "heading_level": 3,
      "content_markdown": "### devServer\n\nThe `devServer` option is required for [`component`](#component) testing, and allows you to register a component testing dev server.\n\nTypically, you will specify a `framework` and `bundler` options in `devServer` for your framework and UI library like so:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  component: {\n    devServer: {\n      framework: 'create-react-app',\n      bundler: 'webpack',\n    },\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  component: {\n    devServer: {\n      framework: 'create-react-app',\n      bundler: 'webpack',\n    },\n  },\n})\n```\n\nSee [Framework Configuration](/llm/markdown/app/component-testing/component-framework-configuration.md) guide for more info on all the available `framework` and `bundler` options, as well as additional configuration options.\n\n#### Custom Dev Server\n\nIt is possible to customize the devServer and provide your own function for custom or advanced setups.\n\nThe devServer function receives a `cypressConfig` argument:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  component: {\n    devServer(cypressConfig) {\n      // return dev server instance or a promise that resolves to\n      // a dev server instance here\n    },\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  component: {\n    devServer(cypressConfig) {\n      // return dev server instance or a promise that resolves to\n      // a dev server instance here\n    },\n  },\n})\n```\n\nSee the [Custom Dev Server](/llm/markdown/app/component-testing/component-framework-configuration.md) guide for more info.\n",
      "section": "app",
      "anchors": [
        "devserver"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 292
    },
    {
      "id": "app/configure/configuration#custom-dev-server",
      "doc_id": "app/configure/configuration",
      "heading": "Custom Dev Server",
      "heading_level": 4,
      "content_markdown": "#### Custom Dev Server\n\nIt is possible to customize the devServer and provide your own function for custom or advanced setups.\n\nThe devServer function receives a `cypressConfig` argument:\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  component: {\n    devServer(cypressConfig) {\n      // return dev server instance or a promise that resolves to\n      // a dev server instance here\n    },\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  component: {\n    devServer(cypressConfig) {\n      // return dev server instance or a promise that resolves to\n      // a dev server instance here\n    },\n  },\n})\n```\n\nSee the [Custom Dev Server](/llm/markdown/app/component-testing/component-framework-configuration.md) guide for more info.\n",
      "section": "app",
      "anchors": [
        "custom-dev-server"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 148
    },
    {
      "id": "app/configure/configuration#excludespecpattern",
      "doc_id": "app/configure/configuration",
      "heading": "excludeSpecPattern",
      "heading_level": 3,
      "content_markdown": "### excludeSpecPattern\n\nCypress uses `minimatch` with the options: `{dot: true, matchBase: true}`. We suggest using [https://globster.xyz](https://globster.xyz) to test what files would match.\n\nThe `**/node_modules/**` pattern is automatically added to `excludeSpecPattern`, and does not need to be specified (and can't be overridden). See [`e2e`](#e2e) or [`component`](#component) testing-specific options.\n",
      "section": "app",
      "anchors": [
        "excludespecpattern"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 63
    },
    {
      "id": "app/configure/configuration#forcehttp1",
      "doc_id": "app/configure/configuration",
      "heading": "forceHttp1",
      "heading_level": 3,
      "content_markdown": "### forceHttp1\n\nThis option is deprecated, and will be removed in a future version of Cypress.\n\nAs of [Cypress 16](/llm/markdown/app/references/changelog.md#16-0-0), Cypress intercepts network traffic inside Chrome, Chromium, and Edge on the native browser network. Your application connects to your server directly and negotiates whatever protocol the server supports (HTTP/1.1, HTTP/2, or HTTP/3), the same way it does in production, so requests are no longer always downgraded to HTTP/1.1.\n\n| Browser | `forceHttp1: false` (default) | `forceHttp1: true` |\n| --- | --- | --- |\n| Chrome, Chromium, Edge | Native browser network | Legacy network path |\n| Firefox, WebKit | Legacy network path | Legacy network path |\n| Electron | Legacy network path | Legacy network path |\n\nFirefox and WebKit continue to use the legacy network path because Cypress has not implemented a native browser network path for them yet. Electron also uses the legacy network path; see [Electron is deprecated as a test browser](/llm/markdown/app/references/migration-guide.md#Electron-browser-deprecated).\n\nSet `forceHttp1` to `true` to route every browser through the legacy network path, the way Cypress worked before version 16. See [Native network interception](/llm/markdown/app/guides/native-network-interception.md) for the full list of differences and how to update tests that rely on them. If undocumented behavior is what makes your suite pass, [open an issue](https://github.com/cypress-io/cypress/issues/new/choose). Setting it to `true` restarts the Cypress server when changed, and cannot be set per test or per suite.\n\n[`forceHttp1`](/llm/markdown/app/references/configuration.md#forceHttp1) is both introduced and deprecated in Cypress 16. It exists only to give suites time to migrate, or as a temporary escape hatch while an issue you have filed is fixed, and it will be removed once the native browser network is supported long term. Do not set it to `true` only to avoid updating tests for the native browser network, such as skipping `Cypress.isBrowser()` gates. Treat it as a temporary aid, not a permanent setting.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  forceHttp1: true,\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  forceHttp1: true,\n})\n```\n",
      "section": "app",
      "anchors": [
        "forcehttp1"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 451
    },
    {
      "id": "app/configure/configuration#injectdocumentdomain",
      "doc_id": "app/configure/configuration",
      "heading": "injectDocumentDomain",
      "heading_level": 3,
      "content_markdown": "### injectDocumentDomain\n\nThis option is deprecated, and will be removed in a future version of Cypress.\n\nSet this configuration option to `true` to instruct Cypress to [inject document.domain](/llm/markdown/app/guides/cross-origin-testing.md#What-Cypress-does-under-the-hood) into your test application. This can reduce the need for [`cy.origin()`](/llm/markdown/api/commands/origin.md) when [navigating between subdomains](/llm/markdown/app/guides/cross-origin-testing.md), but comes with compatibility caveats for some sites.\n\nThis configuration option is provided to ease the transition between [`cy.origin()`](/llm/markdown/api/commands/origin.md)'s behavior in Cypress 13 and the default behavior in Cypress 14. [Read the Cypress 14 migration guide](/llm/markdown/app/references/migration-guide.md#Migrating-to-Cypress-140) to understand how to update your tests to remove the need to set this flag.\n\nThis configuration value _must_ be set to true if you are running tests with experimental WebKit support, as [`cy.origin()`](/llm/markdown/api/commands/origin.md) is not yet supported in WebKit.\n\n#### Known Incompatibilities\n\nSetting this configuration value to `true` can cause the application you are testing to behave in unexpected ways. This is especially true if a site your tests visit sets the [`Origin-Agent-Cluster`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin-Agent-Cluster) header.\n\nAt this point in time, we are aware of the following sites that cannot be tested properly if this option is set to `true`:\n\n*   Azure AD B2C authentication workflows\n*   Salesforce\n*   Google\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    injectDocumentDomain: true,\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    injectDocumentDomain: true,\n  },\n})\n```\n",
      "section": "app",
      "anchors": [
        "injectdocumentdomain"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 301
    },
    {
      "id": "app/configure/configuration#known-incompatibilities",
      "doc_id": "app/configure/configuration",
      "heading": "Known Incompatibilities",
      "heading_level": 4,
      "content_markdown": "#### Known Incompatibilities\n\nSetting this configuration value to `true` can cause the application you are testing to behave in unexpected ways. This is especially true if a site your tests visit sets the [`Origin-Agent-Cluster`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin-Agent-Cluster) header.\n\nAt this point in time, we are aware of the following sites that cannot be tested properly if this option is set to `true`:\n\n*   Azure AD B2C authentication workflows\n*   Salesforce\n*   Google\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    injectDocumentDomain: true,\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    injectDocumentDomain: true,\n  },\n})\n```\n",
      "section": "app",
      "anchors": [
        "known-incompatibilities"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 143
    },
    {
      "id": "app/configure/configuration#isinteractive",
      "doc_id": "app/configure/configuration",
      "heading": "isInteractive",
      "heading_level": 3,
      "content_markdown": "### isInteractive\n\nYou can open Cypress in the interactive mode via the `cypress open` command, and in run mode via the `cypress run` command. To detect the mode from your test code you can query the `isInteractive` property on [Cypress.config](/llm/markdown/api/cypress-api/config.md).\n\n```\nif (Cypress.config('isInteractive')) {\n  // interactive \"cypress open\" mode!\n} else {\n  // \"cypress run\" mode\n}\n```\n",
      "section": "app",
      "anchors": [
        "isinteractive"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 77
    },
    {
      "id": "app/configure/configuration#managebrowsermemory",
      "doc_id": "app/configure/configuration",
      "heading": "manageBrowserMemory",
      "heading_level": 3,
      "content_markdown": "### manageBrowserMemory\n\nIn a long-running Cypress test suite, the browser accumulates memory across tests. References to DOM nodes, event listeners, and application state from earlier tests can linger in the browser's heap even after Cypress clears the page. As memory pressure builds, the browser can slow down and in severe cases crash mid-run.\n\nAs of Cypress 16, [`manageBrowserMemory`](/llm/markdown/app/references/configuration.md#Global) defaults to `true`, so this is handled for you without any configuration. Cypress samples the browser's memory usage on an interval while your tests run, and forces a garbage collection before the next test only when a sample has crossed a memory threshold.\n\n`manageBrowserMemory` only applies to Chromium-based browsers (Chrome, Edge). It has no effect in Firefox or WebKit.\n\nThis flag is not a blanket speed improvement. Clearing memory between tests takes time, paid on every test transition. If your suite is not under meaningful memory pressure, you can opt out to potentially save the overhead. You should measure the performance impact before and after disabling the flag.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  manageBrowserMemory: false,\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  manageBrowserMemory: false,\n})\n```\n",
      "section": "app",
      "anchors": [
        "managebrowsermemory"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 264
    },
    {
      "id": "app/configure/configuration#modifyobstructivecode",
      "doc_id": "app/configure/configuration",
      "heading": "modifyObstructiveCode",
      "heading_level": 3,
      "content_markdown": "### modifyObstructiveCode\n\nWith this option enabled - Cypress will search through the response streams coming from your server on `.html` and `.js` files and replace code that matches patterns commonly found in framebusting.\n\nThese script patterns are antiquated and deprecated security techniques to prevent clickjacking and framebusting. They are a relic of the past and are no longer necessary in modern browsers. However many sites and applications still implement them.\n\nThese techniques prevent Cypress from working, and they can be safely removed without altering any of your application's behavior.\n\nCypress modifies these scripts at the network level, and therefore there is a tiny performance cost to search the response streams for these patterns.\n\nYou can turn this option off if the application or site you're testing **does not** implement these security measures. Additionally it's possible that the patterns we search for may accidentally rewrite valid JS code. If that's the case, please disable this option.\n\nDetails for `experimentalModifyObstructiveThirdPartyCode` can be found [here](/llm/markdown/app/guides/cross-origin-testing.md#Modifying-Obstructive-Third-Party-Code).\n\nBecause rewriting these scripts changes their bytes, any pinned [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) hash on the resource will no longer match and the browser will block it. If your application uses SRI, enable [`removeSRIAttributes`](#removeSRIAttributes) so the rewritten resources are not blocked.\n",
      "section": "app",
      "anchors": [
        "modifyobstructivecode"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 269
    },
    {
      "id": "app/configure/configuration#removesriattributes",
      "doc_id": "app/configure/configuration",
      "heading": "removeSRIAttributes",
      "heading_level": 3,
      "content_markdown": "### removeSRIAttributes\n\nWhen this option is enabled, Cypress removes [Subresource Integrity (SRI)](https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity) `integrity` attributes from `<script>` and `<link>` elements as they are served to the browser.\n\nCypress rewrites obstructive JS and HTML (see [`modifyObstructiveCode`](#modifyObstructiveCode)) before it reaches the browser. Rewriting changes the resource's bytes, which invalidates any pinned SRI hash, so the browser refuses to execute or apply the resource and reports an error such as:\n\n```\nFailed to find a valid digest in the 'integrity' attribute for resource '…' …\nThe resource has been blocked.\n```\n\nEnabling `removeSRIAttributes` strips the `integrity` attribute so these resources load normally under test. It applies to **first-party** resources, and covers `integrity` defined in any of the following ways:\n\n*   a static HTML attribute (for example, `<script src=\"app.js\" integrity=\"sha384-…\">`)\n*   a JavaScript string literal assigned to the attribute\n*   a runtime DOM property assignment (for example, [`webpack-subresource-integrity`](https://www.npmjs.com/package/webpack-subresource-integrity)'s `script.integrity = sriHashes[chunkId]`)\n\n`removeSRIAttributes` is the first-party counterpart to [`experimentalModifyObstructiveThirdPartyCode`](/llm/markdown/app/guides/cross-origin-testing.md#Modifying-Obstructive-Third-Party-Code), which removes SRI only for third-party resources. Enable both options to strip SRI across first- and third-party resources.\n\nThis option defaults to `false`, so existing behavior is unchanged. Enable it only if your application uses SRI and you see first-party resources blocked under test. Because removing SRI disables a check that protects against tampered resources, enable it only for applications under test.\n",
      "section": "app",
      "anchors": [
        "removesriattributes"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 287
    },
    {
      "id": "app/configure/configuration#setupnodeevents",
      "doc_id": "app/configure/configuration",
      "heading": "setupNodeEvents",
      "heading_level": 3,
      "content_markdown": "### setupNodeEvents\n\nThe `setupNodeEvents` function allows you to tap into, modify, or extend the internal behavior of Cypress using the [`on`](/llm/markdown/api/node-events/overview.md#on) and [`config`](/llm/markdown/api/node-events/overview.md#config) arguments, and is valid as an [`e2e`](#e2e) or [`component`](#component) testing specific option.\n\n*   cypress.config.js\n*   cypress.config.ts\n\n```\nconst { defineConfig } = require('cypress')\n\nmodule.exports = defineConfig({\n  e2e: {\n    setupNodeEvents(on, config) {\n      // e2e testing node events setup code\n    },\n  },\n  component: {\n    setupNodeEvents(on, config) {\n      // component testing node events setup code\n    },\n  },\n})\n```\n\n```\nimport { defineConfig } from 'cypress'\n\nexport default defineConfig({\n  e2e: {\n    setupNodeEvents(on, config) {\n      // e2e testing node events setup code\n    },\n  },\n  component: {\n    setupNodeEvents(on, config) {\n      // component testing node events setup code\n    },\n  },\n})\n```\n\nSee the [plugins guide](/llm/markdown/app/plugins/plugins-guide.md) for more information.\n",
      "section": "app",
      "anchors": [
        "setupnodeevents"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 168
    },
    {
      "id": "app/configure/configuration#trashassetsbeforeruns",
      "doc_id": "app/configure/configuration",
      "heading": "trashAssetsBeforeRuns",
      "heading_level": 3,
      "content_markdown": "### trashAssetsBeforeRuns\n\nWhen `trashAssetsBeforeRuns` is `true` (the default), Cypress clears out old assets before each `cypress run` so that the results you collect only come from the current run. This **only** happens during `cypress run`. Assets are never trashed when using `cypress open`.\n\nCypress trashes the following three folders:\n\n*   [`downloadsFolder`](#Downloads) (`cypress/downloads` by default)\n*   [`screenshotsFolder`](#Screenshots) (`cypress/screenshots` by default)\n*   [`videosFolder`](#Videos) (`cypress/videos` by default)\n\nFor each of these folders, Cypress removes the **entire contents** of the folder, every file and every nested subfolder. The folder itself is preserved; only its contents are cleared.\n\nHow the contents are removed depends on the operating system:\n\n*   On **macOS** and **Windows**, each item is moved to the system trash / Recycle Bin, so it can be recovered if needed.\n*   On **Linux**, the folders are emptied directly and the contents are **permanently deleted**.\n",
      "section": "app",
      "anchors": [
        "trashassetsbeforeruns"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 187
    },
    {
      "id": "app/configure/configuration#test-files-not-found-when-using-spec-parameter",
      "doc_id": "app/configure/configuration",
      "heading": "Test files not found when using spec parameter",
      "heading_level": 3,
      "content_markdown": "### Test files not found when using `spec` parameter\n\nWhen using the `--spec <path or mask>` argument, make it relative to the project's folder.\n\nThe `--spec` argument only runs specs that **also match the configured [`specPattern`](#e2e)**. Cypress computes the intersection of the `--spec` value and `specPattern`, so any spec file outside the configured `specPattern` will not be found — even if you pass its exact path.\n\nFor example, the default `e2e.specPattern` is `cypress/e2e/**/*.cy.{js,jsx,ts,tsx}`. If your spec lives outside `cypress/e2e/`, passing its path via `--spec` will not run it until you also update `specPattern` in your Cypress config to include that location:\n\n```\n// cypress.config.js\nmodule.exports = defineConfig({\n  e2e: {\n    specPattern: [\n      'cypress/e2e/**/*.cy.{js,jsx,ts,tsx}',\n      'tests/**/*.cy.{js,jsx,ts,tsx}',\n    ],\n  },\n})\n```\n\nIf the specs are still missing after verifying the path and `specPattern`, run Cypress with [DEBUG logs](/llm/markdown/app/references/troubleshooting.md#Print-DEBUG-logs) with the following setting to see how Cypress is looking for spec files:\n\n```\nDEBUG=cypress:cli,cypress:data-context:sources:FileDataSource,cypress:data-context:sources:ProjectDataSource\n```\n",
      "section": "app",
      "anchors": [
        "test-files-not-found-when-using-spec-parameter"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 200
    },
    {
      "id": "app/configure/configuration#history",
      "doc_id": "app/configure/configuration",
      "heading": "History",
      "heading_level": 2,
      "content_markdown": "## History\n\n| Version | Changes |\n| --- | --- |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | Added `forceHttp1` option. |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | Updated `blockHosts`, `viewportHeight`, and `viewportWidth` to no longer be settable with `Cypress.config()` during test execution. |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | Removed `allowCypressEnv` option. |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | Replaced the `experimentalMemoryManagement` option with `manageBrowserMemory`, which defaults to `true`. |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | Replaced the `experimentalFastVisibility` option with `visibilityStrategy`, which defaults to `'modern'`. |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | Removed `experimentalSourceRewriting` option. |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | `keystrokeDelay` resolved fallback changed from `10` to `0` when unset in configuration and [`Cypress.Keyboard.defaults()`](/llm/markdown/api/cypress-api/keyboard-api.md). |\n| [16.0.0](/llm/markdown/app/references/changelog.md#16-0-0) | Removed `execTimeout` option alongside `cy.exec()`. Use `taskTimeout` with [`cy.task()`](/llm/markdown/api/commands/task.md) instead. |\n| [15.21.0](/llm/markdown/app/references/changelog.md#15-21-0) | Deprecated `execTimeout` alongside `cy.exec()`. Use `taskTimeout` with [`cy.task()`](/llm/markdown/api/commands/task.md) instead. |\n| [15.20.0](/llm/markdown/app/references/changelog.md#15-20-0) | Added per-axis `{ block, inline }` values and the `'start'` and `'end'` alignments to `scrollBehavior`, and restored `'top'` and `'bottom'` to aligning the vertical axis only. |\n| [15.18.0](/llm/markdown/app/references/changelog.md#15-18-0) | Added `removeSRIAttributes` option. |\n| [15.17.0](/llm/markdown/app/references/changelog.md#15-17-0) | Cypress config and plugin files now load as ESM or CommonJS using Node.js module semantics (file extension and nearest `package.json` `\"type\"`), with no cross-format fallback. |\n| [15.17.0](/llm/markdown/app/references/changelog.md#15-17-0) | Added support for overriding [`Cypress.expose()`](/llm/markdown/api/cypress-api/expose.md) values via test configuration. |\n| [15.10.0](/llm/markdown/app/references/changelog.md#15-10-0) | Added `allowCypressEnv` option. |\n| [15.10.0](/llm/markdown/app/references/changelog.md#15-10-0) | Updated `env` to no longer be settable via test configuration. |\n| [15.10.0](/llm/markdown/app/references/changelog.md#15-10-0) | Added `expose` option for exposing public configuration values. |\n| [14.0.0](/llm/markdown/app/references/changelog.md#14-0-0) | Added support for re-enabling superdomain navigation with the `injectDocumentDomain` configuration option |\n| [13.16.0](/llm/markdown/app/references/changelog.md#13-16-0) | Added `defaultBrowser` option. |\n| [13.4.0](/llm/markdown/app/references/changelog.md#13-4-0) | Added support for configuring the Experimental Flake Detection strategy via `retries.experimentalStrategy` and `retries.experimentalOptions`. |\n| [13.0.0](/llm/markdown/app/references/changelog.md#13-0-0) | Removed `nodeVersion` option. |\n| [13.0.0](/llm/markdown/app/references/changelog.md#13-0-0) | Removed `videoUploadOnPasses` option. |\n| [11.0.0](/llm/markdown/app/references/changelog.md#11-0-0) | Removed `e2e.experimentalSessionAndOrigin` option. |\n| [10.4.0](/llm/markdown/app/references/changelog.md#10-4-0) | Added `e2e.testIsolation` option. |\n| [10.0.0](/llm/markdown/app/references/changelog.md#10-0-0) | Reworked page to support new `cypress.config.js` and deprecated `cypress.json` files. |\n| [8.7.0](/llm/markdown/app/references/changelog.md#8-7-0) | Added `slowTestThreshold` option. |\n| [8.0.0](/llm/markdown/app/references/changelog.md#8-0-0) | Added `clientCertificates` option and removed `firefoxGcInterval` configuration. |\n| [7.0.0](/llm/markdown/app/references/changelog.md#7-0-0) | Added `e2e` and `component` options. |\n| [7.0.0](/llm/markdown/app/references/changelog.md#7-0-0) | Added `redirectionLimit` option. |\n| [6.1.0](/llm/markdown/app/references/changelog.md#6-1-0) | Added `scrollBehavior` option. |\n| [5.2.0](/llm/markdown/app/references/changelog.md#5-2-0) | Added `includeShadowDom` option. |\n| [5.0.0](/llm/markdown/app/references/changelog.md#5-0-0) | Added `retries` configuration. |\n| [5.0.0](/llm/markdown/app/references/changelog.md#5-0-0) | Renamed `blacklistHosts` configuration to `blockHosts`. |\n| [4.1.0](/llm/markdown/app/references/changelog.md#4-12-0) | Added `screenshotOnRunFailure` configuration. |\n| [4.0.0](/llm/markdown/app/references/changelog.md#4-0-0) | Added `firefoxGcInterval` configuration. |\n| [3.5.0](/llm/markdown/app/references/changelog.md#3-5-0) | Added `nodeVersion` configuration. |\n",
      "section": "app",
      "anchors": [
        "history"
      ],
      "path": "/llm/json/chunked/app/configure/configuration.json",
      "token_estimate": 537
    }
  ]
}