cypress-io/cypress
43.5
Weak · 28 September 2026
222.4k
lines of production code
TypeScript
with JavaScript
3
measurements over time
What this system is
This system is the core infrastructure and application layer for the Cypress end-to-end and component testing framework. It provides a monorepo-based development environment with standardized tooling, CI optimization, and automated release processes. The codebase encompasses the CLI for test execution and session management, framework-specific adapters for React, Vue, Angular, and Svelte, and a unified Vue-based UI for the test runner and cloud integration.
How it got here
2014–2021 — Monorepo modernization and Vue 3 migration
105 changes.
This period focused on restructuring the Cypress codebase into a standardized monorepo with unified tooling, while migrating core packages from JavaScript and CoffeeScript to TypeScript. The frontend UI was rebuilt using Vue 3, Vite, and Tailwind CSS, replacing the previous React-based architecture. Additionally, the project modernized its build infrastructure, testing frameworks, and component testing adapters for React and Vue to align with current web standards.
2022 — V8 snapshot optimization and cross-origin testing
89 changes.
This period focused on significantly improving Electron startup performance by introducing a V8 snapshot pipeline and runtime loader, alongside a major architectural shift to support cross-origin testing via the new cy.origin() command. The work also involved consolidating component testing scaffolding for modern frameworks like Angular, Vue, and Svelte, while extensively expanding test coverage across the driver, config, and app packages to ensure stability.
2023–2026 — CLI tap interface and TypeScript migration
65 changes.
This period focused on introducing the 'cypress tap' CLI to enable programmatic control and inspection of live test sessions, alongside a comprehensive migration of the CLI and core packages to TypeScript. The work also included significant architectural improvements to network interception, telemetry, and build tooling, supported by extensive test coverage and accessibility enhancements.
Features
Add Angular Signals component test harness demo project
The system-tests/projects/angular-signals directory now contains a demo application and corresponding component tests that exercise the Angular Signals testing harness. This includes components for required and optional input/model signals, complex signal mutations, and Angular's new control-flow syntax, verifying that cy.mount correctly handles signal-based properties and output spies.
system-tests/projects/angular-signals · high confidence
Add Cypress Component Testing support for Vue
This change introduces the necessary support files to enable Cypress Component Testing for the Vue application. It adds a custom \mount\ command in \commands.js\ that wraps \@cypress/vue\'s mount function, provides a \component-index.html\ with a \data-cy-root\ container for component rendering, and registers these in \component.js\. This allows developers to write and run unit-style component tests using Cypress.
npm/vue/cypress/support · high confidence
Add Cypress support files for the Vite dev-server e2e tests
The Vite dev-server now includes Cypress support files (\commands.ts\ and \e2e.ts\) to enable end-to-end testing. The \commands.ts\ file registers a custom \waitForSpecToFinish\ command, which waits for test loading and completion indicators in the Studio UI, while \e2e.ts\ imports these commands and shared frontend support to configure the test environment.
npm/vite-dev-server/cypress/support · high confidence
Add ESLint configuration and AI agent guidance to the scripts directory
The \scripts\ directory now includes an \.eslintrc\ configuration file that applies the \@cypress/dev\ general and test linting rules, along with \AGENTS.md\ and \CLAUDE.md\ files that document the build tooling, release automation, and CI utilities for AI coding assistants. This change standardizes linting for the internal scripts and provides context for automated code generation and review within the monorepo's build infrastructure.
scripts · high confidence
Add GraphQL schema definitions for cloud app messaging and browser info
The \packages/data-context/schemas\ directory now includes generated GraphQL schema files (\cloud.graphql\ and \schema.graphql\) that define the data structures for the new cloud-driven in-app messaging banner system (including \CloudAppMessage\, analytics, CTAs, and dismissal scopes) and detailed browser/OS information types (\CloudBrowserInfo\, \CloudOperatingSystem\). These schemas provide the contract for the cloud app messaging feature and browser metadata reporting.
packages/data-context/schemas · high confidence
Add component-based spec generation for React and Vue projects
Users can now generate Cypress specs directly from existing React or Vue components. This location introduces the UI components and generator configurations that allow users to select a component file, view its exported components, and scaffold a corresponding spec file, with the appropriate generator (React or Vue) selected based on the project's \codeGenFramework\ setting.
packages/app/src/specs/generators/component · high confidence
Add scaffold generator UI for importing E2E examples
The app now includes a new scaffold generator that allows users to import existing E2E example specs. This change adds the necessary UI components (a card and a step-one view) and the generator registration to fetch available E2E examples via GraphQL and display them in a collapsible tree for selection.
packages/app/src/specs/generators/scaffold · high confidence
Added Pizza Shop component testing example for Vue Router
A new Pizza Shop example has been added to the Cypress component testing suite to demonstrate Vue Router usage. This includes a Home page with navigation links for various pizza presets (veggie, vegan, meatlover, hawaiian, and cheese-only), an Order page that allows users to select toppings and displays a live overview, and the associated router configuration and topping data definitions. This change provides a concrete, testable example of routing, dynamic parameters, and component interaction within the Vue ecosystem.
npm/vue/cypress/component/router-example/PizzaShop · high confidence
Added TypeScript definitions for Cypress Log Group configuration
The \packages/driver/types/cy/logGroup.d.ts\ file was added, introducing TypeScript type declarations for the Cypress Log Group feature. This includes the \LogGroup.Config\ interface, which defines configuration options such as \log\, \name\, \displayName\, \message\, \timeout\, \consoleProps\, \type\, and \defaultCollapsedState\, enabling proper type checking and IntelliSense support for users creating log groups in their tests.
packages/driver/types/cy · high confidence
Added advanced React component testing examples
The Cypress Component Testing suite now includes a comprehensive set of advanced examples demonstrating testing patterns for React applications. These new specs cover testing React Context, lazy-loaded components with Suspense, portals, React Router v6 (both in-memory and browser-based), custom commands, and mocking strategies for fetch and Axios. The examples also illustrate testing hooks (useState, useEffect), renderless components, timers with clock mocking, test retries, and integration with @testing-library/cypress, providing users with reference implementations for complex component behaviors.
npm/react/cypress/component/advanced, npm/vue/cypress/component/advanced · high confidence
Added build scripts for GraphQL schema generation
New build scripts have been added to the data-context package to automate the generation of GraphQL artifacts. The \build.js\ script reads the local GraphQL schema and generates a minified URQL introspection file, while \nexus-build.ts\ triggers the Nexus type generation. These changes streamline the build process for the data-context package.
packages/data-context/scripts · high confidence
Added code generation templates for component tests and blank specs
The codegen system now includes new EJS templates for scaffolding component tests for React and Vue components, as well as a blank E2E spec template. These templates generate Cypress test files that mount the respective components or visit a placeholder URL, allowing users to quickly create test structures for their projects.
packages/data-context/src/codegen/templates · high confidence
Added promo component suite with slideshow and event tracking
Introduced a new set of Vue components (\Promo\, \PromoCard\, \PromoHeader\, \PromoAction\) in the \packages/app/src/components/promo\ directory to display promotional content as a navigable slideshow. The \Promo\ component manages the slideshow state and automatically records a \PromoSeen\ event via GraphQL mutation upon initial render for a given project context. The suite includes visual components for headers and cards with responsive grid layouts, and action buttons for navigation (next/reset). Comprehensive Cypress component tests were added to verify rendering across viewports and interaction flows.
packages/app/src/components/promo · high confidence
Automated merging of testing types into Cypress config files
The \packages/config/src/ast-utils\ module now provides utilities to automatically inject E2E and component testing configurations into existing \cypress.config.js\ or \cypress.config.ts\ files. By parsing the config file's Abstract Syntax Tree (AST), the system intelligently detects common export patterns (such as \defineConfig\, \export default\, or \module.exports\) and merges new testing type definitions without overwriting user settings. This enables seamless addition of testing types to projects, handling edge cases like empty files or missing \defineConfig\ availability, and ensures the resulting code is formatted with Prettier.
packages/config/src/ast-utils · high confidence
CLI can now drive running Cypress sessions via a new tap interface
The CLI now includes a new \cypress-sessions\ module that allows it to discover, verify, and interact with currently running Cypress test sessions. This feature introduces a 'tap' mechanism where the CLI probes active session records to confirm they are live and have an attached browser, then selects the appropriate session to drive. Additionally, a new \agent-info\ package has been added to detect whether the Cypress process is being invoked by an AI coding agent (such as Claude, Cursor, or Gemini) by inspecting environment variables, ensuring that agent-invoked runs are correctly identified.
cli/lib/cypress-sessions, packages/agent-info · high confidence
CLI rewritten in TypeScript with new run options and TAP protocol support
The CLI execution logic in \cli/lib/exec\ has been converted from JavaScript to TypeScript, introducing several user-facing capabilities and behavioral changes. The \cypress run\ command now supports the \--pass-with-no-tests\ flag to exit successfully when no tests are found, and the \--posix-exit-codes\ flag to align exit codes with POSIX standards. A new \cypress tap\ command has been added, allowing users to drive a running Cypress session via a structured protocol. Additionally, the \cypress open\ command now supports a \--detach\ mode for background execution, and the \cypress info\ command has been updated to display version and system details.
cli/lib/exec · high confidence
Cypress schematic now supports component testing alongside e2e
The Angular Cypress schematic has been updated to generate a new \cypress.config.ts\ template that conditionally includes a \component\ block (using webpack and Angular framework) when component testing is enabled, in addition to the existing \e2e\ configuration. This change also introduces new template files for component test specs (\\*.cy.ts\), fixtures, and support files, allowing users to set up component-based UI tests directly from the schematic.
npm/cypress-schematic/src/schematics/ng-add/files-core · high confidence
Debug page empty states and onboarding guides
The Debug page now displays specific empty states for scenarios such as no project, no runs, not logged in, and Git repository errors, each accompanied by contextual onboarding guides or tutorials. New components like DebugEmptyView, DebugGuide, and DebugTour render these states with promotional cards and CTAs, while loading states use skeleton UI to indicate activity. Comprehensive component tests verify the rendering and interaction of these empty states and their associated slideshows.
packages/app/src/debug/empty · high confidence
Debug page utility functions and data mapping
New utility modules were added to support the debug page interface: DebugMapping.ts provides functions to map and structure debug spec data from GraphQL fragments; constants.ts defines UI labels and campaign identifiers for the debug tab; debugArtifacts.ts generates the list of actionable artifacts (replay, terminal logs, screenshots, video) with proper UTM tracking; and formatTime.ts handles duration and timestamp formatting for display.
packages/app/src/debug/utils · high confidence
Expanded React Component Testing examples with rerender and network mocking
The \npm/react/cypress/component/basic\ directory has been populated with a comprehensive suite of new Cypress Component Testing examples. These additions demonstrate core React testing patterns, including state management via class components and hooks, CSS styling with both standard CSS and CSS modules, and error boundary handling. The suite now includes specific tests for the new \rerender\ functionality, verifying that components update correctly and that lifecycle effects behave as expected during re-renders versus unmounts. Additionally, new network-related examples illustrate how to intercept and mock XHR and Fetch requests using \cy.intercept\, covering scenarios such as inspecting real responses, stubbing data, and handling network delays.
npm/react/cypress/component/basic · high confidence
Expose Vue Test Utils API in Cypress component tests
The Cypress component testing environment for Vue now exposes the underlying Vue Test Utils library, allowing tests to access the mounted component instance and wrapper directly. This enables assertions on component props, internal data, and the wrapper DOM, as demonstrated by the new test suite that verifies access to these objects.
npm/vue/cypress/component/test-utils-api · high confidence
Initial TypeScript type definitions for the Cypress CLI package
This change introduces the foundational TypeScript declaration files for the \@cypress/cli\ package, establishing the type system for the NPM module API and the global Cypress runtime. The \cli/types\ directory now contains \index.d.ts\ and supporting files that define the \CypressCommandLine\ namespace for programmatic execution (e.g., \cypress.run\, \cypress.open\), global variables (\cy\, \Cypress\), and shims for third-party libraries like Bluebird, Chai, and Minimatch. This provides static type checking and IntelliSense support for users interacting with Cypress via its Node.js API.
cli/types · high confidence
Initial scaffolding of the @packages/data-context package
The @packages/data-context package has been introduced as a new centralized GraphQL data layer for the Cypress application, providing the single source of truth for application state (project configuration, Cloud data, file system events, browser list, and user actions) consumed by the app and launchpad via urql. This change adds the foundational structure for the package, including configuration files for TypeScript (tsconfig.json), ESLint (.eslintignore), and Jest (jest.config.ts), along with documentation (AGENTS.md, CLAUDE.md, README.md) that outlines the architecture of data sources, actions, and GraphQL schema generation. The package is designed to manage core data through a DataContext class, with specific directories for actions, sources, and code generation, and relies on Jest for testing due to GraphQL loading constraints.
packages/data-context · high confidence
Introduce @cypress/puppeteer plugin for multi-tab browser automation
The new @cypress/puppeteer plugin allows Cypress tests to execute Puppeteer code directly, enabling multi-tab and multi-window testing that Cypress cannot handle natively. Users register named message handlers in \setupNodeEvents\ using the \setup()\ function, then invoke them from specs via \cy.puppeteer()\. Each handler receives a Puppeteer \Browser\ instance connected to the Cypress-launched browser, runs in Node.js, and yields its return value to the Cypress command chain. The plugin automatically reconnects and disconnects the Puppeteer browser for every call to ensure clean state. It includes a \retry\ helper for handling asynchronous page loads and automatically reactivates the main Cypress tab in headed Chromium browsers after each handler execution. The plugin is compatible with Chromium-family browsers (including Electron) and requires Cypress 13.6.0 or later.
npm/puppeteer · high confidence
Introduce Cypress builder for Angular with component testing support
This change introduces the \@cypress/schematic\ builder for Angular, allowing users to run Cypress tests directly via the Angular CLI. The builder supports both end-to-end (e2e) and component testing modes, configurable via the \testingType\, \e2e\, and \component\ options. It automatically manages the dev server lifecycle (with an exception for SSR dev servers) and passes configuration such as \baseUrl\, \browser\, \reporter\, and environment variables to the Cypress runner. Users can now generate e2e spec files and run tests in headed or headless modes, with support for parallel execution and test recording.
npm/cypress-schematic/src/builders/cypress · high confidence
Introduce Data Context Actions for Application State Management
The application now uses a dedicated set of action classes within the data context to manage core state and operations. This includes \AppActions\ for handling app data directories and browser status, \AuthActions\ for managing login, signup, and cloud authentication lifecycles, \BrowserActions\ for controlling browser instances and focus, and \ProjectActions\ for project initialization, configuration, and spec management. Additional actions like \CodegenActions\ for spec generation, \NotificationActions\ for in-app run notifications, and \DataEmitterActions\ for broadcasting state changes provide a centralized, structured approach to handling user-facing features and internal data flow.
packages/data-context/src/actions · high confidence
Introduce \`cypress tap\` CLI for driving live Cypress sessions
Adds the experimental \cypress tap\ subcommand suite, enabling programmatic control and inspection of a running Cypress session from the command line. The CLI exposes commands to list active sessions (\sessions\), check run status (\status\), list project specs (\specs\), trigger spec execution (\run\), and inspect the application-under-test (AUT) via \dom\, \aria\, and \inspect\ commands. These AUT commands leverage Chrome DevTools Protocol (CDP) to query the live DOM and accessibility tree within the AUT frame, handling selector ambiguity and enforcing timeouts to ensure stable interaction with the running browser.
cli/lib/tap · high confidence
Introduce \`cypress-sessions\` package for CLI session discovery and TAP protocol contracts
This change extracts the cross-process contract for Cypress sessions into a new, dependency-free TypeScript package. It defines the shared schema, on-disk layout, and liveness-probe routes that allow the \cypress\ CLI to discover and attach to a running \cypress open\ session via CDP. Additionally, it establishes the type contracts and command metadata for the new \cypress tap\ CLI, enabling programmatic interaction with the test runner's reporter, command log, and DOM snapshots.
packages/cypress-sessions · high confidence
Introduce centralized web build configuration package
Added a new internal \@packages/web-config\ package that centralizes web-related build settings for the Cypress monorepo. This package provides a shared base webpack configuration (\webpack.config.base.ts\) and utilities to ensure consistent and DRY build settings across browser-targeting packages like the reporter and runner. It includes TypeScript configuration, standard loaders for Sass/SCSS, CSS, fonts, and images, and polyfills for Node.js globals, serving as the foundational build layer for other web packages.
packages/web-config · high confidence
Introduce cy.intercept as the unified network stubbing API
The \cy.intercept\ command is now the standard interface for network stubbing, replacing the legacy \cy.route\ and \cy.route2\ commands. This change consolidates network interception into a single, consistent API that supports static responses, dynamic handlers, and request aliasing. The implementation includes robust validation for route matchers and static responses, ensuring that options like \statusCode\, \body\, \fixture\, \delay\, and \throttleKbps\ are correctly processed and logged. Users can now rely on \cy.intercept\ for all network mocking needs, with improved error handling and clearer logging in the Command Log.
packages/driver/src/cy/net-stubbing · high confidence
Introduce default app layout with sidebar, header, and error handling
The application now uses a new default layout component that structures the main interface with a sidebar navigation and a header bar. This layout conditionally renders the header based on route metadata and displays a notification banner for enabling desktop notifications (excluding Windows). It also integrates a global error handling mechanism that displays a BaseError component or a spinner when the application encounters a base error or is loading configuration/node events, ensuring users are informed of critical state issues.
packages/app/src/layouts · high confidence
Introduce experimental cy.prompt command with remote bundle support
Added a new experimental \cy.prompt()\ command that loads a remote UI bundle via Module Federation to provide interactive prompts during test execution. The implementation in \packages/driver/src/cy/commands/prompt\ handles downloading the bundle, manages timeouts for the download process, and facilitates communication between the driver and the remote prompt interface, including support for cross-origin spec bridges and source map details.
packages/driver/src/cy/commands/prompt · high confidence
Introduce new Studio UI components and error handling
The Studio panel now uses a new set of Vue components to manage its lifecycle and user feedback. A new \StudioButton\ allows users to toggle the panel open and closed, while \LoadingStudioPanel\ displays a spinner and message during initialization. If the studio fails to load or encounters a certificate error, \StudioErrorPanel\ is shown with a customizable message, a 'Learn more' link, and a 'Retry' button. These components are orchestrated by \StudioPanelContainer\ and \StudioPanel\, which also handle the integration with the React-based studio bundle via Module Federation.
packages/app/src/studio · high confidence
Introduce packherd bundling tooling
This change introduces the core implementation of the packherd bundler in the \tooling/packherd\ directory. It adds a new \packherd\ function that acts as a thin layer around esbuild, automatically generating an entry script to flatten dependencies and producing a bundled output buffer along with optional source maps and metadata. The implementation includes helper modules for creating bundles (\create-bundle\), generating entry scripts (\generate-entry\), extracting esbuild metadata (\get-metadata\), and managing temporary file paths (\utils\), effectively establishing the foundational bundling capability for this tooling area.
tooling/packherd · high confidence
Introduce unified Vue 3 app package with Vite build and Tailwind styling
A new \@packages/app\ package has been added to serve as the main Vue 3 front-end for the Cypress browser-side UI, rendering the specs list, runner toolbar, Studio panel, and settings screens. This package replaces the previous build setup by adopting Vite for asset compilation and Tailwind CSS for styling, while maintaining integration with the existing runner and reporter bundles via the \window.UnifiedRunner\ namespace. The package includes its own configuration for ESLint, TypeScript, and PostCSS, and supports both component testing and end-to-end testing through a dedicated \cypress.config.ts\ file.
packages/app · high confidence
Introduce unified Vue-based app shell with routing and GraphQL integration
The application now uses a new Vue 3 entry point (packages/app/src) that initializes the UI with Vue Router, Pinia state management, and a urql GraphQL client. This shell renders dynamic components via router-view and conditionally displays Cloud and login modals outside of run mode, while also establishing WebSocket connections for telemetry and handling platform-specific path normalization.
packages/app/src · high confidence
Introduce utility helpers for JSON manipulation and NPM registry queries
The schematic now includes new utility modules to manage project configuration and dependencies more robustly. A JSONFile class has been added to parse, read, modify, and remove entries in JSON files (such as package.json and angular.json) while preserving formatting and comments. Additionally, a dependencies utility provides a standardized way to add or update package dependencies in package.json, and a new function queries the NPM registry over HTTPS to retrieve the latest version of a package. These utilities support the schematic's ability to automatically configure project dependencies and generate component test specs.
npm/cypress-schematic/src/schematics/utils · high confidence
Introduction of new application pages and routing structure
This change introduces the core page components for the application, including Debug, Runs, Settings, and Specs, along with a catch-all 404 error page. The Debug page now displays run details and handles online/offline states, while the Runs page lists project runs with skeleton loading states and re-execution capabilities. The Settings page fetches and displays configuration data, and the Specs page acts as a router view for spec-related content. A new 404 page provides navigation links for lost users.
packages/app/src/pages · high confidence
New @packages/network package for Node.js networking utilities
A new \@packages/network\ package has been introduced to centralize Node.js-only networking utilities used across the Cypress server-side stack. This package provides a proxy-aware HTTP/HTTPS agent (supporting keepalive, upstream-proxy CONNECT tunnelling, and per-URL client certificates), CA certificate management, connection helpers with DNS resolution and retry logic, and utilities for blocked hosts. It is consumed by \@packages/server\, \@packages/proxy\, \@packages/net-stubbing\, \@packages/https-proxy\, and \@packages/data-context\ for all Node.js HTTP networking, and its tests have been migrated to \vitest\.
packages/network · high confidence
New @packages/resolve-dist package centralizes asset path resolution
A new \@packages/resolve-dist\ package has been introduced to centralize the logic for resolving file-system paths to compiled and static assets, specifically for use in server-side Node.js code. This change consolidates scattered path resolution logic into a single location, providing helpers like \resolveFromPackages\ and \getPathToDist\ to locate bundled frontend assets (such as runner injection scripts and the launchpad index) at runtime. The package is configured to build both CommonJS and ESM outputs, though only the CommonJS build is currently used in production to minimize binary size.
packages/resolve-dist · high confidence
New @packages/root package bundles root package.json for installable access
A new \@packages/root\ package has been added to the monorepo, bundling the root \package.json\ into installable CJS (\index.js\) and ESM (\index.mjs\) bundles via Rollup. This allows any package within the monorepo or installed in \node\_modules\ to import the root package metadata without relying on absolute paths. The build process uses a \0.0.0-development\ sentinel version that is dynamically replaced with the actual next release version during development builds, ensuring consumers like the Cloud API headers always identify with the correct version.
packages/root · high confidence
New Debug page UI components and tests
The Debug page now features a redesigned UI with new Vue components for displaying run details, including a header with commit info and run status, navigation between runs, and specific states for passed, failed, errored, cancelled, and over-limit scenarios. Artifact links (logs, screenshots, video, replay) are now rendered with tooltips and UTM parameters. Comprehensive Cypress component tests have been added for these new components to ensure correct rendering and interaction.
packages/app/src/debug · high confidence
New ESLint rules to enforce arrow-body brace style and require explanations for skipped tests
The development linting plugin now includes two new custom rules. The \arrow-body-multiline-braces\ rule modifies the standard \arrow-body-style\ behavior to prevent reporting errors on multiline arrow functions that are preceded by a comment, allowing developers to keep multiline bodies without triggering lint failures when comments are present. The \skip-comment\ rule enforces that any skipped test (using \.skip\ on \it\, \describe\, or \context\) must be preceded by a comment starting with specific tokens (defaulting to NOTE:, TODO:, FIXME:), ensuring that skipped tests are explicitly documented with a reason.
npm/eslint-plugin-dev/lib/custom-rules · high confidence
New UI components for spec pattern management and file matching
This change introduces a suite of new Vue components in the app interface to support spec pattern configuration and file search. The SpecPatternModal and SpecPatterns components allow users to view and manage spec patterns, displaying match counts and providing a direct link to open the configuration file in an IDE. Supporting this are the FileMatch components (FileMatch, FileMatchButton, FileMatchInput, FileMatchIndicator), which provide a collapsible UI for searching files by name and extension, complete with match indicators. Additionally, the Blank component renders the default blank page and visit failure states, while the Slideshow component provides the underlying transition logic for tutorial slideshows.
packages/app/src/components · high confidence
New \`cypress tap\` CLI binding for inspecting and controlling live Cypress runs
The \packages/app/src/tap\ directory introduces the runner-side implementation of the \cypress tap\ binding, exposing a JSON-only interface via \window.\_\_CYPRESS\_TAP\BINDING\\_\ that allows an external CLI to inspect and control a live Cypress session over CDP. This binding provides a registry of subcommands—including \reporter\ for test and command details, \command\ for specific command logs and snapshots, \pin\ for pinning DOM snapshots, \run-state\ for overall spec status, and \resolve-selector\ for deriving unique CSS selectors—along with the necessary type contracts, command definitions, and comprehensive end-to-end tests to ensure the binding remains synchronized with internal Cypress runner APIs.
packages/app/src/tap · high confidence
New codegen utility for scaffolding spec files from components
A new code generation utility has been added to the data-context package to scaffold spec files from existing components. The \code-generator\ module handles file creation from EJS templates, supporting both text and binary files, and allows for custom file naming via front-matter. The \SpecOptions\ class provides logic to generate spec files for React and Vue components, handling framework-specific extensions and custom spec patterns. This enables users to create new test specs directly from their component files, with the system automatically determining the correct file paths and naming conventions based on the project's configuration.
packages/data-context/src/codegen · high confidence
New collapsible settings card components with deep-linking support
The settings interface now uses new \SettingsCard\ and \SettingsContainer\ components to organize settings into collapsible sections (Project, Device, and Cloud). These cards are collapsed by default to reduce visual clutter, but can be expanded to reveal specific configuration options. A key behavioral change is the addition of deep-linking support: users can now navigate directly to a specific settings section and anchor via URL query parameters (e.g., \/settings?section=device&anchor=notifications\), which automatically opens the relevant card and scrolls to the target element. This facilitates direct navigation from other parts of the app, such as enabling desktop notifications from the Specs page.
packages/app/src/settings · high confidence
New composables for cloud data synchronization, testing type management, and UI preferences
The app introduces several new composables in the \composables\ directory to enhance functionality and state management. \useCloudSpecData\ automatically refetches cloud spec data when the project is disconnected, offline, or when displayed specs change, ensuring data freshness. \useTestingType\ manages the switching between E2E and Component testing modes, handling configuration checks and triggering relaunches when necessary. \useSpecFilter\ persists user-defined spec filters to the backend via GraphQL mutations. \usePreferences\ provides a unified way to update and sync UI preferences. Additionally, \useDurationFormat\ standardizes the display of run durations, and \useRelevantRun\ subscribes to real-time updates for relevant runs in the sidebar and debug views.
packages/app/src/composables · high confidence
New cross-origin serialization explainer and implementation for postMessage compatibility
The driver now includes a dedicated serialization module (index.ts, log.ts) and documentation (README.md) to handle data transmission between origins via postMessage. This implementation preprocesses complex objects, errors, and DOM elements into serializable literals to bypass structured clone limitations, ensuring that snapshots, console properties, and log messages are correctly preserved and reified in the primary Cypress instance during cross-origin testing.
packages/driver/src/util/serialization · high confidence
New cy.origin() command for cross-origin testing
A new \cy.origin()\ command has been introduced in the driver package, allowing tests to execute commands within a different origin (domain, protocol, or port). The implementation includes a validator to ensure correct usage, a mechanism to handle unserializable subjects via proxies to prevent errors in the command log, and utilities for serializing runnable context. This enables users to interact with and assert against content on cross-origin sites, which was previously restricted.
packages/driver/src/cy/commands/origin · high confidence
New device settings for external editors, notifications, proxy, and testing preferences
The app now includes dedicated settings pages for configuring device-specific preferences. Users can select a preferred external editor (including custom binary paths), manage desktop notification triggers (run starts, failures, completions), view auto-detected proxy server and bypass list settings, and toggle auto-scrolling during test runs. These new Vue components and their corresponding Cypress component tests provide the UI and validation for these local settings.
packages/app/src/settings/device · high confidence
New framework-specific webpack configuration handlers for Angular and Next.js
The \@cypress/webpack-dev-server\ package now includes dedicated helper modules (\angularHandler.ts\ and \nextHandler.ts\) to manage framework-specific webpack configurations for Component Testing. The Angular handler resolves project settings from \angular.json\, generates isolated temporary \tsconfig.json\ files to prevent conflicts, and correctly sources Angular CLI webpack modules. The Next.js handler dynamically loads the Next.js webpack configuration, handles version-specific API changes (such as \installBindings\ for Next.js 16.0.3+ and \jsConfig\ for Next.js 13.2+), and ensures global styles and entry points are handled correctly. These helpers work with a new module sourcing utility that overrides Node's module resolution to ensure the correct versions of webpack and framework dependencies are used from the user's project root.
npm/webpack-dev-server/src/helpers · high confidence
New internal tooling workspace for V8 snapshot pipeline
The repository now includes a dedicated \tooling/\ workspace containing private build packages (\@tooling/electron-mksnapshot\, \@tooling/packherd\, \@tooling/v8-snapshot\) and their associated documentation (\AGENTS.md\, \CLAUDE.md\). This workspace supports the Cypress Electron application's startup optimization by handling dependency bundling, V8 snapshot generation, and platform-specific binary management, with specific test coverage added for the mksnapshot and packherd components.
tooling · high confidence
New keyboard shortcuts modal and testing type switcher in sidebar
The sidebar now includes a keyboard shortcuts modal (KeyboardBindingsModal) that displays platform-specific shortcuts (e.g., ⌘+S on macOS, Ctrl+S on Windows/Linux) and a testing type switcher modal (SwitchTestingTypeModal) accessible via the sidebar header, allowing users to switch between E2E and Component Testing modes.
packages/app/src/navigation · high confidence
New monorepo configuration and developer tooling scaffolding
This change introduces the foundational configuration files for the Cypress monorepo, establishing the environment and tooling standards for contributors. It sets the Node.js version to 24.15.0 via \.node-version\ and \.nvmrc\, configures Yarn 1 as the package manager in \.npmrc\, and defines the ESLint rules in \.eslintrc.js\ (including GraphQL validation and TypeScript import consistency). It also adds \.prettierignore\, \.yarnclean\, \.gitattributes\, and \.releaserc.js\ to manage formatting, dependency cleaning, merge strategies, and automated semantic releases.
(repo-wide) · high confidence
New ng-add schematic initializes Cypress with E2E and component testing support
The \ng-add\ schematic in \@cypress/schematic\ has been rewritten to automatically scaffold a new Angular project with Cypress. By default, it installs the Cypress package, adds standard E2E test files (specs, support files, and configuration), and registers necessary npm scripts (\ng e2e\, \cypress:open\, \cypress:run\). When the \--component\ flag is passed, it additionally sets up the file structure and support files required for Cypress component testing. The schematic also updates \angular.json\ to include \@cypress/schematic\ in the \schematicCollections\ array without overwriting existing collections.
npm/cypress-schematic/src/schematics/ng-add · high confidence
New schematics for generating Cypress Component Testing specs
The \@cypress/schematic\ package now includes new Angular schematics (\component\, \specs-ct\, and \spec\ with \component\ flag) that automatically generate Cypress Component Testing (CT) spec files (\.cy.ts\) alongside standard Angular components. When using the \component\ schematic, it creates the Angular component and its corresponding CT spec in the same directory, while the \specs-ct\ schematic can generate CT specs for existing components. This allows developers to easily integrate component-level testing into their Angular projects using the Cypress framework.
npm/cypress-schematic/src/schematics/ng-generate · high confidence
New shared frontend package for Vue 3 components and utilities
A new \@packages/frontend-shared\ package has been introduced to house Vue 3 components, TailwindCSS configuration, composables, GraphQL fragments, and i18n strings that are consumed by both the \app\ (browser-side UI) and \launchpad\ (Electron-rendered UI). This package serves as a shared design system, allowing developers to build and test components in isolation using Cypress Component Tests before integrating them into the consuming applications.
packages/frontend-shared · high confidence
New stderr-filtering package to redirect third-party error logs to debug streams
The new \@packages/stderr-filtering\ package introduces a standardized error logging mechanism that wraps error messages with special tags, allowing third-party stderr output from Node.js child processes to be intercepted and redirected to debug streams rather than polluting Cypress's own stderr. This is achieved through a \logError()\ function for tagging and stream filters (\FilterTaggedContent\, \FilterPrefixedContent\) that route tagged or prefixed content to a debug sink, keeping the main error output clean while preserving detailed logs for debugging.
packages/stderr-filtering · high confidence
New type definitions for Cypress internal log configuration
The driver now exposes comprehensive TypeScript type declarations for Cypress logs, including the \Cypress.log\ API, the \Log\ interface, and detailed internal configuration options like \InternalLogConfig\. This enables better type safety and IntelliSense support for developers interacting with the command log system and its internal properties.
packages/driver/types/cypress · high confidence
New utility functions for the data-context package
The data-context package now includes a suite of new utility modules to support configuration management, debugging, and data handling. The \config-file-updater\ module enables programmatic modification of Cypress configuration files by parsing and rewriting the AST, while \shouldLoadConfigAsEsm\ ensures config files are loaded with the correct Node.js module semantics (ESM vs. CommonJS) based on file extensions and package.json types. Debugging capabilities are enhanced with \autoBindDebug\, which automatically logs method calls and property setters for classes. Data handling improvements include \DocumentNodeBuilder\ for generating GraphQL fragments for client-side caching, \urqlCacheKeys\ for defining cache key strategies, and \weightedChoice\ for probabilistic selection. Additional utilities support file path normalization, TypeScript detection, test counting, and server plugin handler registration.
packages/data-context/src/util · high confidence
Packherd require module loader and TypeScript transpilation
The \@packages/packherd-require\ package is introduced to handle runtime module loading for bundles produced by \@tooling/packherd\ and to provide on-demand TypeScript transpilation during development. It installs a custom \require\ hook that intercepts module resolution, allowing modules to be loaded from pre-bundled exports or definitions (such as V8 snapshots) rather than the file system. Additionally, it hooks into Node.js to transpile TypeScript files on the fly using esbuild, caching the results in memory or on disk, and installs source-map support so that error stack traces correctly reference the original TypeScript sources. This package serves as the runtime loader for \@packages/ts\ in the monorepo.
packages/packherd-require · high confidence
Standardized TypeScript development environment with on-the-fly transpilation
The \@packages/ts\ package now provides a standardized setup for the monorepo's TypeScript configuration and development workflow. It introduces a \ts-node\ registration mechanism (\register.js\ and \registerDir.js\) that enables on-the-fly transpilation of TypeScript files during development without requiring a pre-build step, while remaining a no-op in production builds. A shared base \tsconfig.json\ is provided to ensure consistent compilation settings across packages, and ambient type definitions for internal dependencies like \@cypress/get-windows-proxy\ and \@cypress/request-promise\ are included to support type checking.
packages/ts · high confidence
Unified Specs and Runner pages for Open and Run modes
The Specs page now serves as the central entry point for managing test files, featuring a list view, a dedicated 'no specs' state, and a modal for creating new specs. The Runner page has been unified to support both Open Mode (full UI with GraphQL-driven live updates and config change subscriptions) and Run Mode (minimal UI using pre-injected window data for performance). This change consolidates the navigation and rendering logic for spec execution and management into a single, cohesive interface.
packages/app/src/pages/Specs · high confidence
Unified runner UI components and prompt modal integration
The spec runner interface now uses a new set of Vue components for layout and controls, including ResizablePanels for the spec list, reporter, and AUT, along with SnapshotControls, ScriptError, and SpecRunnerHeader for open and run modes. Additionally, the app now supports the experimental cy.prompt command by dynamically loading and rendering React-based GetCode and MoreInfoNeeded modals via Module Federation, complete with error handling and type definitions.
packages/app/src/runner · high confidence
V8 snapshot require package introduced to accelerate Electron startup
The new \@packages/v8-snapshot-require\ package loads V8 snapshots created by \@tooling/v8-snapshot\ into Electron applications, allowing modules to be resolved from an embedded snapshot rather than the file system. This change hooks into \@packages/packherd-require\ to serve pre-initialized module exports and definitions, significantly reducing startup time. The package includes a dependency map for fast module key resolution, caching logic to handle module reloads, and diagnostic logging via \DEBUG=cypress:snap\*\ to monitor hit rates.
packages/v8-snapshot-require · high confidence
Security
Upgrade tar dependency to address [CVE redacted]
The \tar\ package in the server package has been upgraded to version 7.5.21 to resolve a security vulnerability ([CVE redacted]). This update ensures that the server's dependency on \tar\ is patched against the identified security risk.
packages/server · high confidence
Architecture
Bootstrap @cypress/webpack-dev-server with modern tooling and configuration scaffolding
The @cypress/webpack-dev-server package is now bootstrapped with a standardized development environment, including a new TypeScript configuration targeting ES2022, a vitest setup for unit tests, and a Cypress-in-Cypress configuration for integration testing. The package also introduces an ESLint ignore file to exclude generated and test artifacts, a Percy configuration to defer snapshot uploads until test runs complete, and a release configuration that inherits from the monorepo root. These changes establish the infrastructure for consistent linting, testing, and release processes within the package.
npm/webpack-dev-server · high confidence
CLI refactored to TypeScript and built with Rollup
The \cypress/cli\ package has been converted from JavaScript to TypeScript and its build process has been switched to use Rollup. This change improves type safety and code maintainability for the CLI package without altering the user-facing commands or behavior.
cli · high confidence
Consolidated shared TypeScript types into an independent ESM/CJS package
The \@packages/types\ package has been restructured to provide a standalone bundle of shared TypeScript definitions (covering browsers, configuration, protocol, and automation) that builds both ESM and CJS distributions without requiring ts-node. This change centralizes type sources in the \src/\ directory and updates the build process to ensure compatibility with older CommonJS bundling styles while keeping the types as source-only for consumers.
packages/types · high confidence
Cypress driver commands refactored into modular TypeScript files
The command implementations in the Cypress driver have been reorganized from a monolithic structure into distinct, modular TypeScript files (e.g., \agents.ts\, \aliasing.ts\, \cookies.ts\, \files.ts\). This change improves code maintainability and type safety by separating concerns for specific command groups like aliasing, file operations, and cookie management, while preserving the existing public API and behavior for users.
packages/driver/src/cy/commands · high confidence
Driver package modernized with TypeScript, Vite, and new configuration files
The \packages/driver\ package has been refactored to use TypeScript, replacing the previous build setup with Vite and Vitest. This change introduces new configuration files (\tsconfig.json\, \vite.config.mjs\, \vitest.config.mjs\) and updates the entry points (\index.ts\, \index.d.ts\) to support the new module system. Additionally, new documentation files (\AGENTS.md\, \CLAUDE.md\, \README.md\, \cross-origin-testing.md\) have been added to explain the driver's architecture, cross-origin testing capabilities, and development workflow.
packages/driver · high confidence
GraphQL layer consolidated into data-context package
The GraphQL implementation has been moved into the \@packages/data-context\ package to resolve a circular dependency with the data context itself. This change introduces a new \corsOriginDelegate\ that restricts CORS access to localhost or specific Cloud origins, and adds a suite of Nexus plugins to the schema for debugging, error handling, and deferred remote field resolution. Additionally, a \graphql-codegen.yml\ configuration is provided to generate TypeScript types for the Launchpad, App, and Cypress sessions.
packages/data-context/graphql · high confidence
Introduce centralized data context and action architecture
The application now uses a unified \DataContext\ to manage state and side effects, replacing the previous scattered approach. This change introduces a \DataActions\ namespace that consolidates all mutations, file writes, and API calls (such as auth, project, and browser interactions) into a single entry point, while \DataContext\ itself orchestrates various data sources (like GraphQL, file, and cloud data) and exposes them via getters. A global pub/sub system (\GlobalPubSub\) is added to handle cross-module events like context resets, and lifecycle management is centralized to ensure proper cleanup of resources when the application exits or switches modes.
packages/data-context/src · high confidence
Introduce centralized data sources and polling infrastructure in the data context
The \packages/data-context/src/sources\ directory has been restructured to use a new set of dedicated data source classes (including \BrowserDataSource\, \CloudDataSource\, \FileDataSource\, \GitDataSource\, \GraphQLDataSource\, \HtmlDataSource\, \ProjectDataSource\, \RelevantRunSpecsDataSource\, and \RelevantRunsDataSource\) alongside a new \Poller\ utility in \packages/data-context/src/polling\. This change centralizes how the application fetches and manages state for browsers, cloud data, file systems, git repositories, and GraphQL queries, replacing previous ad-hoc implementations with a consistent, cache-aware architecture that supports real-time updates and batched execution.
packages/data-context/src/sources · high confidence
Introduce data-context package for centralized project lifecycle and configuration management
This change introduces the \data-context\ package, establishing a new architecture for managing project state, configuration loading, and lifecycle events. It adds \ProjectLifecycleManager\ to orchestrate the project's state (including testing type and config readiness), \ProjectConfigManager\ to handle config file loading and validation, and \ProjectConfigIpc\ to manage communication with child processes for plugin execution and config loading. Supporting classes include \CypressEnv\ for environment file handling, \EventRegistrar\ for plugin event management, and \coreDataShape\ to define the central data store structure. This refactors the application to use a centralized data context for configuration and lifecycle state.
packages/data-context/src/data · high confidence
Network interception logic is decoupled from the MITM proxy into a transport-agnostic core
The \@packages/network-interception\ package now serves as the central, transport-agnostic engine for \cy.intercept\, replacing the previous inline logic in the proxy. This change introduces a hexagonal architecture where route matching, handler merging, and policy enforcement (e.g., \blockHosts\) are handled by \NetworkInterceptionCore\, while transport-specific I/O (MITM proxy vs. CDP Fetch) is isolated behind adapter interfaces. Users benefit from consistent interception behavior across both the legacy HTTP/1 proxy path and the new browser-native CDP Fetch path, with the core logic ensuring that route matching and handler results are applied uniformly regardless of the underlying transport.
packages/network-interception · high confidence
Plugin child process modules converted to TypeScript
The plugin child process modules in \packages/server/lib/plugins/child\ have been converted from JavaScript to TypeScript. This change introduces new \.ts\ files for handling browser launching, cross-origin callbacks, dev-server interactions, preprocessor logic, and asynchronous configuration loading, along with a dedicated types file to define IPC interfaces and event structures. The conversion ensures type safety for the plugin lifecycle and event handling within the child process.
packages/server/lib/plugins/child · high confidence
Refactor DOM element utilities into modular files
The monolithic \elements.ts\ file in the driver has been broken apart into separate modules by concern (e.g., \complexElements.ts\, \find.ts\, \shadow.ts\, \detached.ts\, \input.ts\, \nativeProps.ts\, \utils.ts\, \types.ts\). This refactoring removes circular dependencies and improves code organization, making the element-related logic easier to maintain and test without changing the external API.
packages/driver/src/dom/elements · high confidence
Refactor project configuration logic into dedicated package module
The project configuration setup and merging logic has been moved from \server/lib/config.ts\ into a new \@packages/config/src/project\ module. This change introduces \setupFullConfigWithDefaults\ and \updateWithPluginValues\ functions to handle config initialization and plugin-driven updates, including specific behaviors for preserving original browser arrays and forcing \numTestsKeptInMemory\ to 0 in run mode. The refactoring also includes new utility functions for environment variable parsing and validation, alongside updated TypeScript types for the configuration structure.
packages/config/src/project · high confidence
Refactor querying commands into modular files
The querying commands (cy.focused, cy.root, cy.within, and the core querying logic) have been extracted from a monolithic file into separate, dedicated TypeScript modules. This structural change improves code maintainability and organization without altering the user-facing behavior of these commands.
packages/driver/src/cy/commands/querying · high confidence
Refactored configuration package into a standalone, type-safe module
The \@packages/config\ package has been restructured into a self-contained, independent bundle with separate ESM and CJS distributions, removing the need for \ts-node\ registration. This refactor introduces strict TypeScript typing for configuration options, validation rules, and breaking-change handling, while also cleaning up legacy v10-era config logic and dead code. Users benefit from more robust configuration validation and clearer error messages when using deprecated or removed config options.
packages/config/src · high confidence
Refactored proxy into a middleware pipeline with adapter layer
The proxy package has been restructured to use a generic middleware pattern, introducing a new adapter layer that bridges the legacy proxy logic to the new \NetworkInterceptionCore\ system. This change adds a collection of adapter classes (such as \ProxyRequestInterceptionAdapter\, \ProxyCookieStateAdapter\, and \ProxyDocumentPreparationAdapter\) that delegate to existing middleware functions, effectively wrapping the current request/response interception, cookie handling, and document preparation logic into the new architecture without altering the external behavior.
packages/proxy · high confidence
Behavioural changes
@cypress/grep v7.0.0 removes deprecated Cypress.env() support
The @cypress/grep package has been updated to version 7.0.0, which removes support for the deprecated \Cypress.env()\ API, the \env\ testConfig override, and the \allowCypressEnv\ configuration option. Users must now use \Cypress.expose()\ to pass values to the browser or \cy.env()\ to read server-side environment variables. This change aligns the plugin with Cypress's broader deprecation of \Cypress.env()\ and requires a peer dependency on Cypress 15.10.0 or higher for full compatibility with \Cypress.expose()\.
npm/grep · high confidence
Add automation disconnected and missing extension states
The runner now displays specific warning alerts when the Cypress browser extension is disconnected or missing. Users see a 'disconnected' state with a 'Reload the browser' button to restore the connection, and a 'missing' state that allows them to select a different browser from a dropdown. These changes improve feedback and recovery options when automation dependencies are not met.
packages/app/src/runner/automation · high confidence
Add e2e support file for Cypress configuration
A new support file (support/e2e.js) has been added to the Cypress configuration, which imports the local commands file to provide global configuration and behavior modifications before test files are loaded.
npm/webpack-preprocessor/cypress · high confidence
Added runs utility constants and configured dayjs instance
The runs utility module now includes a constants file defining specific labels for the Runs Tab and various empty state promo campaigns (Login, Connect Project, Record Run). Additionally, a centralized dayjs configuration has been introduced, extending the library with relative time, duration, custom parse format, and UTC plugins to ensure consistent date handling across the runs feature.
packages/app/src/runs/utils · high confidence
Angular component testing adapter now requires Angular 21+ and zoneless change detection
The @cypress/angular adapter has been updated to support Angular 21 and later versions, specifically targeting Angular's zoneless change detection mode. This change removes support for Angular versions 18, 19, and 20, and merges the previous @cypress/angular-zoneless functionality directly into the main package. Users must now ensure their projects use Angular 21+ and that the testing environment is configured for zoneless change detection to use the mount function correctly.
npm/angular · high confidence
App router initialization with layout support and navigation guards
The application now initializes its Vue router using a new configuration file that integrates auto-generated routes and layouts. This setup includes a default route redirection and a dedicated '/redirect' path that allows navigating to specific pages by passing parameters via URL query strings. Additionally, a navigation guard is installed to warn users about unsaved changes when they attempt to leave the studio interface.
packages/app/src/router · high confidence
Automated CircleCI config validation on pre-commit
The pre-commit hook now automatically validates CircleCI configuration changes. When files within the .circleci/src directory are staged for commit, the hook runs the 'yarn pack-ci --validate' command to ensure the CI pipeline configuration is correct before allowing the commit, in addition to the existing lint-staged checks.
.husky · high confidence
CLI binary entry point restructured for Rollup bundling
The CLI executable entry point has been moved to a new dedicated file (cli/lib/bin/cypress.ts) to support the migration to Rollup for building the CLI package. This change ensures the binary remains accessible relative to the distribution directory, maintaining compatibility for consumers while enabling the new build process.
cli/lib/bin · high confidence
CLI binary extraction now uses yauzl with symlink and path-traversal protections
The CLI has replaced the previous \extract-zip\ library with a custom \yauzl\-based extractor (\cli/lib/tasks/extract-with-yauzl.ts\). This change improves the reliability of unzipping the Cypress binary by correctly preserving Unix file modes and symlinks, which the previous tool did not handle well. It also adds security safeguards by refusing to extract entries that would escape the installation directory and limiting symlink target lengths to 4096 bytes to prevent resource exhaustion. The \unzip\ task now attempts native OS tools (\ditto\ on macOS, \unzip\ on Linux) first, falling back to this new Node.js extractor if those tools fail or are unavailable.
cli/lib/tasks · high confidence
CLI entry point updated to use TypeScript build output
The CLI entry point script (cli/bin/cypress) has been updated to require the compiled TypeScript output from the dist folder (../dist/cli) instead of the previous source structure. This change reflects the migration of the CLI implementation to TypeScript and ensures the binary correctly initializes the application from the built distribution files.
cli/bin · high confidence
CLI refactored to TypeScript with new configuration and exit-code options
The CLI implementation in cli/lib has been converted from JavaScript to TypeScript, introducing new command-line flags including --posix-exit-codes for standardized error handling, --pass-with-no-tests to allow runs with no test files, and --expose for setting public configuration variables. The refactoring also includes the addition of a new 'tap' command for driving running Cypress sessions, updates to help content, and the removal of internal --dev/--inspect flags from public help output.
cli/lib · high confidence
Component Testing framework detection and scaffolding logic is consolidated into the scaffold-config package
The \@packages/scaffold-config\ package now contains the core logic for detecting installed frameworks (React, Vue, Angular, Svelte, Next.js) and bundlers (Vite, Webpack) and scaffolding the initial \cypress.config.js\ and support files for Component Testing. This includes updated dependency definitions that require Vite 8+, Webpack 5+, React 18/19, Vue 3, Angular 21/22, and Svelte 5, as well as support for detecting third-party Component Testing framework plugins. The package also provides the HTML template for the component index and handles language detection for TypeScript vs JavaScript projects.
packages/scaffold-config · high confidence
Component mounting now uses data-cy-root attribute instead of id selector
The root element selector for component mounting has changed from the ID-based \\#\_\_cy\_root\ to the attribute-based \\[data-cy-root\]\. This requires users to update their \component-index.html\ file to use \data-cy-root\ on the mount container element. Additionally, the package's build target has been updated from ES2015 to ES2022.
npm/mount-utils · high confidence
Cypress ESM plugin now requires ESM-only module format
The \@cypress/vite-plugin-cypress-esm\ package has been updated to version 2.0.0, which is now an ESM-only module. This change requires users to ensure their projects and configurations support ESM, and it is compatible with Cypress version 16 or higher. The plugin continues to intercept and rewrite ES module imports in Cypress component tests, wrapping them in a Proxy to allow mocking libraries like Sinon to replace module members.
npm/vite-plugin-cypress-esm · high confidence
Cypress React adapter restructured with new build tooling and React 18+ support
The @cypress/react package has been restructured to use Rollup for bundling and Vite for the development server, replacing previous tooling. The adapter now exclusively supports React 18 and 19, dropping support for React 16 and 17, and uses the React 18 \createRoot\ API for mounting components. The package is now bundled with the Cypress binary and ships multiple formats (CJS, ESM, UMD). Configuration files for ESLint, Babel, and TypeScript have been added to standardize the development environment.
npm/react · high confidence
Cypress Svelte adapter now requires Svelte 5 and targets ES2022
The @cypress/svelte package has been updated to support Svelte 5+ and drop support for Svelte 3 and 4. This change aligns with the Svelte 5 migration, where components are no longer classes, and updates the build target from ES6 to ES2022. Users must upgrade their Svelte version to 5 to use this adapter, and the mount function now defaults logging to false for Svelte 5 components due to name discovery changes.
npm/svelte · high confidence
Cypress component testing now requires Vite 8
The @cypress/vite-dev-server package has been updated to require Vite 8 or newer for component testing, dropping support for Vite 5, 6, and 7. If your project uses an older version of Vite, the dev server will now throw a ViteVersionNotSupportedError. This change also includes upgrading Vitest from v2 to v3 and converting the package to an ESM-only module.
npm/vite-dev-server · high confidence
Driver DOM module migrated to TypeScript with new visibility and screenshot capabilities
The \packages/driver/src/dom\ module has been converted from JavaScript to TypeScript, introducing strict typing for core DOM utilities. This change implements a modern visibility strategy that leverages the browser's native \checkVisibility()\ API to more accurately determine if elements are hidden, while also adding support for screenshot blackouts to obscure specific elements during captures. Additionally, the module now includes logic to pause CSS animations during screenshots to ensure consistent visual results.
packages/driver/src/dom · high confidence
Driver codebase converted to TypeScript
The driver source files in \packages/driver/src/cypress\ have been converted from JavaScript to TypeScript, introducing static type checking and improved type safety for the core test execution engine.
packages/driver/src/cypress · high confidence
Driver config initializes Bluebird, jQuery, and Lodash with Cypress-specific settings
The driver's configuration module now explicitly initializes key dependencies to ensure consistent behavior. Bluebird promises are configured with cancellation enabled. jQuery is extended with the scrollTo plugin and custom pseudo-selectors (visible, hidden, focus, focused) that delegate to Cypress's DOM utilities, while also registering these selectors via the canonical $.expr.pseudos interface for compatibility with jQuery 4. Lodash is augmented with utility functions from underscore.string (clean, count, isBlank, toBoolean) to maintain existing helper availability.
packages/driver/src/config · high confidence
Driver module converted to TypeScript
The Cypress driver module at packages/driver/src/cy has been converted from JavaScript to TypeScript. This change introduces strict type definitions and compilation checks for core driver components including actionability, aliases, assertions, keyboard input, mouse events, and navigation, ensuring better type safety and maintainability for the underlying test execution engine.
packages/driver/src/cy · high confidence
Driver package converted to ESM and initialized with telemetry
The driver source files (cypress.ts, main.ts) have been converted to ES modules. The entry point (main.ts) now explicitly initializes the telemetry client by calling telemetry.attach() to link the driver's telemetry instance with the one already initialized in the app package, ensuring performance monitoring data is correctly captured from the driver context.
packages/driver/src · high confidence
Driver patches applied to Sinon, jQuery, Mocha, and fake-timers
The driver now applies four patches to its dependencies to improve stability and compatibility. Sinon is patched to prevent errors when accessing properties on objects that throw during enumeration. jQuery is patched to handle the \:focus\ selector more safely and to fix a syntax error when using the \:cy-contains\ selector. Mocha is patched to remove its changelog file, and @sinonjs/fake-timers is patched to correctly expose the \cancelIdleCallback\ property.
packages/driver/patches · high confidence
Driver-side network stubbing now parses JSON bodies and logs interceptions
The driver now automatically parses JSON request and response bodies when the content-type indicates JSON, making them available as objects in user handlers instead of raw strings. Additionally, a new command-log adapter is introduced to ensure that intercepted network requests and responses are properly recorded in the Cypress Command Log UI.
packages/driver/src/cy/net-stubbing/events · high confidence
ESLint configuration migrated to v9 flat config with new linting rules
The @packages/eslint-config package has been rewritten to use ESLint v9's flat config format, replacing the legacy eslintrc setup. This change introduces several new linting behaviors: arrow function bodies spanning multiple lines must now use block statements (enforced via a custom rule), skipped test blocks (e.g., \it.skip\) require an explanatory comment (e.g., \// TODO:\), and the use of \process.geteuid()\ is restricted due to Windows compatibility issues. Additionally, synchronous file system calls are warned against, and the \prefer-spread\ rule is enforced as an error. The configuration also centralizes build output ignores and removes TypeScript compiler guardrails previously handled by tsconfig, moving them to ESLint rules.
packages/eslint-config · high confidence
Establish dedicated component testing support infrastructure
The component testing environment now includes a dedicated support file that initializes the Vue application state (Pinia and Vue Router) for every test, ensuring consistent setup. It also provides utility functions to create stubbed instances of the EventManager and AutIframe, allowing component tests to run without requiring the full Cypress driver or WebSocket connections. Additionally, global error handling has been added to suppress known noise from Vue DevTools and ResizeObserver issues during component testing.
packages/app/cypress/component · high confidence
Extension now supports Chrome Manifest V3 alongside Firefox Manifest V2
The \@packages/extension\ package has been migrated to TypeScript and now builds two distinct browser extension bundles: a Manifest V2 version for Firefox and a Manifest V3 version for Chrome. The Firefox bundle (V2) maintains its existing role of connecting to the Cypress server via Socket.IO to handle cookie changes, downloads, and browser state resets. The new Chrome bundle (V3) uses a service worker and a content script to track the main Cypress tab's URL and re-activate it, replacing the previous behavior where Chrome relied on CDP for tab management. This change ensures compatibility with Chrome's extension architecture while preserving Firefox-specific automation capabilities.
packages/extension · high confidence
Guarded path normalization against null values
The \toPosix\ utility, now isolated in its own module, includes a null check to prevent errors when processing undefined or null file paths on Windows. This ensures that path normalization remains stable even when input values are missing, addressing a potential crash scenario in the driver's file handling logic.
packages/driver/src/cypress/util · high confidence
HTTPS proxy package refactored to TypeScript with Vitest
The \@packages/https-proxy\ package has been migrated from CoffeeScript to TypeScript, introducing a new modular structure under \lib/\ (including \ca.ts\, \proxy.ts\, \server.ts\, and \util/parse.ts\) and replacing the Mocha test suite with Vitest. This change updates the build configuration to produce both CommonJS (\cjs/\) and ESM (\esm/\) outputs and adds specific test helpers and certificate fixtures to support the new testing environment.
packages/https-proxy · high confidence
Icons package converted to compiled TypeScript with ESM/CJS support
The @packages/icons package has been refactored from a static asset library into a compiled TypeScript package. It now builds both CommonJS (index.js) and ES Module (index.mjs) entry points, allowing consumers to import icon path helpers (getPathToFavicon, getPathToIcon, getPathToLogo) in either module style. The build process (scripts/build.ts) now compiles the TypeScript sources and copies assets to the dist/ directory, while tests have been migrated to Vitest to verify the path resolution logic for both module formats.
packages/icons · high confidence
Improved object inspection for Chrome 99+ compatibility
The Chai assertion library's object inspection logic has been updated to correctly handle DOM elements, ShadowRoots, and Documents in Chrome 99 and later. Previously, strict \instanceof\ checks failed for these types in newer Chrome versions, leading to incorrect or incomplete output in test logs. The new implementation uses heuristic checks (such as verifying \nodeType\ and \shadowRoot\ relationships) to accurately serialize these objects, ensuring that stack traces and command logs display meaningful content rather than generic object representations.
packages/driver/src/cy/chai · high confidence
Initial release of @cypress/schematic v6.0.0 with Angular 22 support and zoneless integration
The @cypress/schematic package has been updated to version 6.0.0, introducing support for Angular 22 and Cypress 16. This release merges the @cypress/angular-zoneless functionality upstream into the main @cypress/angular package, removing the need for a separate zoneless mount handler. As a result, support for Angular versions 18, 19, and 20 has been dropped, with the minimum supported Angular version now being 17.2.0 (though the README indicates a requirement for Angular \>=21.0.0 for this specific version). The package also updates its build target from es2018 to es2022 and removes the dependency on @angular/platform-browser-dynamic in favor of @angular/platform-browser. Users upgrading to this version must ensure their Angular projects are on a supported version and that they are using Cypress 16.
npm/cypress-schematic · high confidence
Introduce internal TypeScript type definitions for the driver
The driver package now includes a new set of internal TypeScript declaration files (internal-types-lite.d.ts, internal-types.d.ts, remote-state.d.ts, spec-types.d.ts, and window.d.ts) to provide type safety for internal APIs. These definitions expose internal interfaces such as Actions, Backend, and RemoteState, and define internal methods on the cy and Cypress objects (e.g., command, isStopped, originLoadUtils) that are not part of the public API but are required for driver development and internal spec testing.
packages/driver/types · high confidence
Isomorphic network utilities package with Brotli support and WHATWG URL migration
The \@packages/network-tools\ package now provides isomorphic (browser and Node.js) low-level networking utilities, including CORS helpers, URI parsing, and \document.domain\ injection logic. This change introduces native Brotli compression support by filtering the Accept-Encoding header to include 'br' alongside gzip, and migrates URL parsing from the legacy Node.js API to the WHATWG URL standard for better browser/CDP compatibility. It also replaces the external \parse-domain\ dependency with the \tldts\ library for public-suffix-aware hostname parsing and moves the \RemoteStates\ management logic into this package to resolve circular dependencies.
packages/network-tools · high confidence
Launcher package restructured with TypeScript and new browser support
The launcher package has been rewritten in TypeScript and reorganized into a modular structure (lib/detect, lib/browsers, and OS-specific helpers for darwin, linux, and windows). This change introduces support for Chrome for Testing and Edge Dev channels, adds a validator to block Firefox versions below 140 due to incomplete WebDriver BiDi support, and improves browser launching on macOS arm64 by explicitly preferring the arm64 architecture. Browser detection now runs in series to prevent log message mangling, and the package includes comprehensive unit tests using Vitest.
packages/launcher · high confidence
Migrate @packages/electron to TypeScript and add comprehensive test coverage
The \@packages/electron\ package has been converted from CoffeeScript to TypeScript, introducing a new build system that compiles to both CommonJS and ES Modules. This migration includes a complete rewrite of the source files (electron.ts, install.ts, open.ts, paths.ts) and the addition of a full suite of unit tests using Vitest for the install, open, and path-resolution logic. The package now ships with dedicated ESLint and TypeScript configuration files, and the public API remains consistent, exposing the same \install\, \open\, and \cli\ entry points for the Cypress build pipeline.
packages/electron · high confidence
Migrate Assertions menu to Vue
The Assertions menu in the Studio runner has been rewritten in Vue, replacing the previous implementation with new components (AssertionsMenu, AssertionType, AssertionOptions) and a dedicated mounter. This change updates the UI for selecting assertions on elements, including support for dropdown options, improved keyboard navigation, and proper popper-based positioning, while maintaining the same core functionality of adding assertions to the test.
packages/app/src/runner/studio · high confidence
Migrate runner state management to Pinia
The application's state management in the runner UI has been migrated from MobX to Pinia. This introduces a new store architecture in \packages/app/src/store\ featuring dedicated stores for the Application Under Test (AUT) dimensions and status, runner UI preferences (such as pane widths and code editor settings), spec filtering, selector playground interactions, screenshot states, and Studio-specific recording logic. A legacy MobX runner store remains for compatibility, but the primary reactive state for the unified runner is now handled by these new Pinia modules.
packages/app/src/store · high confidence
New ESLint plugin with strict code style rules
The \npm/eslint-plugin-dev\ package now exports a new ESLint plugin that enforces a strict set of code style and best-practice rules for the project. This includes specific configurations for indentation, brace styles, comma handling, and spacing, as well as rules to prevent common errors like unused variables, duplicate imports, and console statements. Developers will see new linting errors if their code does not adhere to these standardized formatting and quality guidelines.
npm/eslint-plugin-dev/lib · high confidence
New V8 snapshot tooling for improved startup performance
The \tooling/electron-mksnapshot\ package has been rewritten in TypeScript to generate V8 snapshots, which improves application startup performance. This new implementation includes robust download logic that handles architecture-specific binaries (including ARM fallbacks on non-Darwin platforms) and automatically retries spawns to mitigate non-deterministic crashes on Windows CI. It also filters out unsupported arguments like \--turbo-profiling-input\ to ensure snapshot generation succeeds with redistributed Electron binaries.
tooling/electron-mksnapshot · high confidence
New Vite 8-compatible plugins for Cypress component testing
The Vite development server now includes dedicated plugins (\cypress.ts\ and \sourcemap.ts\) to support Vite 8 for component testing. The \cypress\ plugin handles HTML transformation to inject the Cypress test loader and manages Hot Module Replacement (HMR) to trigger test re-runs when spec or support files change. The \sourcemap\ plugin ensures JavaScript files have correct inline source maps, specifically addressing compatibility issues with Babel-based plugins by manually appending source map data URLs when necessary.
npm/vite-dev-server/src/plugins · high confidence
New build scripts for CLI packaging and type bundling
The CLI build process now includes a new set of TypeScript scripts in \cli/scripts\ to handle the preparation of the NPM package. These scripts manage the creation of the build directory, copy necessary framework mount utilities (React, Vue, Angular, Svelte, mount-utils), and bundle third-party TypeScript definitions (such as Chai, jQuery, Mocha, and Sinon) into the \types\ folder. This ensures that users installing the Cypress package receive the necessary type definitions without needing to install separate \@types/\ packages, while also cleaning up internal dependencies and preparing the \package.json\ for release.
cli/scripts · high confidence
New component test support infrastructure and fixtures
The component test support area now includes a dedicated \component-index.html\ file that mounts components into a \div\ with the \data-cy-root\ attribute, replacing the previous \\#\_\_cy\_root\ ID selector. Additionally, a new \fixtures.ts\ file provides reusable test helpers, including an \autSnapshot\ object for DOM snapshot testing and a \createRun\ factory for generating cloud run status data.
packages/app/cypress/support · high confidence
New cross-origin event handlers for spec bridges
The driver now includes a new set of event handlers in \packages/driver/src/cross-origin/events\ to manage communication between spec bridges and the primary origin. These handlers cover cookies (syncing them via automation after page load), errors (logging and failing commands in the primary origin), logs (forwarding log events), miscellaneous state changes (viewport, URL, stability, pause/resume), screenshots, backend/automation requests (via a socket-like mechanism), and test lifecycle events. This ensures that cross-origin interactions are properly synchronized and reported back to the main test runner.
packages/driver/src/cross-origin/events · high confidence
New cross-origin spec bridge implementation
The cross-origin driver now uses a new spec bridge architecture that communicates via postMessage instead of web sockets, enabling \cy.origin()\ to support bundling dependencies at runtime and allowing \cy.visit\ to navigate to cross-origin sites. This change introduces new files in the driver to handle primary and secondary origin communication, log/snapshot serialization, and patches for fetch and XHR to track resource types and credentials within the origin context, while explicitly disabling unsupported APIs like \cy.intercept\ and \cy.session\ inside the origin callback.
packages/driver/src/cross-origin · high confidence
New event handlers for protocol capture, cross-origin pausing, and telemetry
The runner now includes dedicated modules to handle advanced event scenarios: \capture-protocol.ts\ synchronizes the protocol manager by attaching snapshots and forwarding log, viewport, URL, and test lifecycle events to the backend; \pausing.ts\ ensures pause/resume listeners are correctly managed and removed, specifically supporting cross-origin \cy.pause()\ scenarios via the primary origin communicator; and \telemetry.ts\ integrates OpenTelemetry by creating and ending spans for tests and individual commands, capturing timing and error details for performance monitoring.
packages/app/src/runner/events · high confidence
New example package scaffolding and build infrastructure
The \packages/example\ directory has been restructured to serve as the dedicated build and deployment hub for the Cypress example site and test scaffolding. It now includes a \build.js\ script that copies e2e specs and app content from the \cypress-example-kitchensink\ npm package, a \convert.js\ script that adapts URLs and removes eslint comments for the production site, and a \gulpfile.js\ for asset revisioning. Supporting files like \cypress.config.js\, \AGENTS.md\, \CLAUDE.md\, and \README.md\ document the architecture and usage, while \.gitignore\ ensures generated directories are not committed directly. This change establishes the mechanism for keeping the example site and scaffolded tests in sync with the upstream kitchensink repository.
packages/example · high confidence
Optimize CI workflow with path-based conditional job execution
The CI pipeline now uses a new script to generate pipeline parameters based on changed files, enabling path-based job filtering on PR branches and genuine webhook pushes to the develop branch. This optimization ensures that only relevant test suites are triggered based on the specific files modified, reducing CI run times and resource usage. The script handles various scenarios, including release branches, manual triggers, and develop pushes, to ensure comprehensive testing when necessary.
.circleci/scripts · high confidence
Patches applied to TypeScript type definitions and linting tools
The CLI now includes local patches for several \@types\ packages (\chai\, \jquery\, \mocha\, \sinon\) and \dtslint\ to resolve type-resolution and linting issues. Specifically, the \@types/chai\ patch disables the global \Object.should\ assertion to prevent conflicts with Cypress; the \@types/sinon\ patch adjusts the \FakeTimers\ import path to use the bundled \@types/sinonjs\_\_fake-timers\ and corrects the \calledWith\ argument signature; and the \dtslint\ patch prevents duplicate testing of the latest TypeScript version. These changes ensure stable type-checking and linting behavior for the CLI's internal tooling and test suites.
cli/patches · high confidence
Patches applied to multiple dependencies to fix runtime crashes and improve stability
This update applies patches to several node\_modules dependencies to resolve specific runtime issues. Bytenode is patched to support ES modules, enabling it to function correctly in modern Node.js environments. Node-fetch is patched to explicitly set default ports (443 for HTTPS, 80 for HTTP) to ensure correct request handling. Simple-git is patched to replace static class fields with a compatible initialization pattern, fixing crashes in older Node.js versions. Snap-shot-it and snap-shot-core are patched to cache the current working directory globally, preventing snapshot path errors when tests change directories. Other patches include fixing a regex error in find-process, correcting the host header in http-proxy, resolving a crash in evil-dns, fixing a TypeScript 7 compatibility issue in @definitelytyped/typescript-versions, addressing a pagination bug in @urql/exchange-graphcache, fixing a mocha-junit-reporter issue for Mocha \<6, and updating type definitions for @types/jquery.scrollto and return-deep-diff.
patches · high confidence
Redesigned project settings page with new configuration and cloud sections
The project settings area has been rebuilt with new Vue components to improve clarity and usability. The configuration view now displays settings in a code-like format, sorted alphabetically, with color-coded badges indicating the source of each value (default, config file, environment variable, CLI, or plugin) and tooltips on hover. Cloud-related settings now conditionally display the Project ID and Record Key sections only when a project is connected to Cypress Cloud, showing a 'Connect' button otherwise. Record Keys are presented in a confidential mode by default, requiring a click to reveal the value. Additionally, a new Experiments section lists available experimental features with their status, and Spec Patterns are displayed with a file match indicator.
packages/app/src/settings/project · high confidence
Refactor driver utilities and introduce cross-origin config synchronization
The driver's utility layer has been refactored into distinct TypeScript modules, introducing new capabilities for cross-origin communication and command execution. A new \commandAUTCommunication\ utility detects when the test runner cannot communicate with the Application Under Test due to cross-origin restrictions. The \config\ module now includes logic to synchronize configuration and exposed state between different origins (spec bridges), ensuring settings like viewport dimensions are handled correctly without throwing errors during sync. Additionally, a \privileged\_channel\ utility enables the execution of privileged backend commands from the spec frame, while a new \Queue\ class manages the asynchronous execution of these commands with proper cancellation support. Other utilities include \LimitedMap\ for bounded storage, \escape\ functions for string sanitization, and \trackTopUrl\ to notify browser extensions of URL changes.
packages/driver/src/util · high confidence
Refactor net-stubbing to use network-interception middleware
The server-side network stubbing logic has been refactored to integrate with the new \@packages/network-interception\ architecture. This change introduces a middleware-based approach for request and response interception, replacing the previous direct proxy pipeline. It adds adapter classes (such as \DriverInterceptRegistrationAdapter\) to bridge driver events to the new core, and updates the \InterceptedRequest\ lifecycle to use the new subscription planning and handler merging system. Additionally, the package tests have been migrated from Mocha to Vitest.
packages/net-stubbing · high confidence
Refactor of action commands to TypeScript
The action commands in the driver (check, click, focus, hover, mount, press, scroll, select, selectFile, submit, trigger, and type) have been converted from JavaScript to TypeScript. This change introduces strict typing for command options, subjects, and internal logic, improving code reliability and developer experience without altering the user-facing behavior of these commands.
packages/driver/src/cy/commands/actions · high confidence
Refactored cy.session implementation with dedicated session management logic
The \cy.session\ command implementation has been restructured into a modular architecture within the driver, introducing a \SessionsManager\ class to handle session lifecycle, storage, and persistence. This change separates concerns by extracting storage operations (cookies, localStorage, sessionStorage) and origin mapping into dedicated modules (\storage.ts\, \origins.ts\), enabling more robust handling of cross-origin storage access via postMessage and iframes. The refactoring ensures that session data is correctly cleared between tests when \testIsolation\ is enabled, persists registered sessions across specs when \cacheAcrossSpecs\ is true, and improves error handling during session setup and validation phases.
packages/driver/src/cy/commands/sessions · high confidence
Rewrite of webpack-dev-server to support webpack-dev-server v5 and introduce JIT compilation
The \@cypress/webpack-dev-server\ package has been rewritten to drop support for webpack-dev-server v3 and v4, defaulting to v5. This update introduces a new Just-In-Time (JIT) compilation mode that disables file watching in run mode and updates spec entries dynamically, improving performance for large component testing suites. The new implementation includes a dedicated \CypressCTWebpackPlugin\ to manage spec loading and compilation hooks, supports custom \indexHtmlFile\ configurations, and integrates \webpack-bundle-analyzer\ by default. Framework-specific handling has been refined, with explicit support for Angular (including base path and script loading fixes) and Next.js (removing unsafeCache and watchOptions conflicts).
npm/webpack-dev-server/src · high confidence
Runner package restructured with new injection scripts and cross-origin support
The \packages/runner\ package has been reorganized to support multi-origin testing and improved code injection. New \injection/\ scripts (\main.js\ and \cross-origin.js\) are now bundled to patch the Application Under Test (AUT) with timer controls, fetch/XHR interception, and cookie handling. A new \cross-origin.ts\ entry point and associated patches (\cookies.ts\, \fetch.ts\, \xmlHttpRequest.ts\) enable proper communication and state synchronization between the Cypress runner and AUTs on different origins. The package also includes updated documentation (\AGENTS.md\, \CLAUDE.md\, \README.md\) reflecting its deprecated status and new responsibilities, alongside ESLint and TypeScript configuration updates.
packages/runner · high confidence
Runs page redesigned with new card layout and connection flows
The Runs page in the app has been completely redesigned to feature a new card-based layout for displaying test runs. This update introduces a new \RunCard\ component that presents run status, duration, commit information, and tags in a modernized visual style. The page now includes dedicated components for handling user states: \CloudConnectButton\ and \RunsConnect\ guide users to connect their project to Cypress Cloud, while \RunsConnectSuccessAlert\ confirms successful connections. Additionally, \RunsErrorRenderer\ and \RunsEmpty\ provide clear feedback for connection failures, missing runs, or unconnected projects, ensuring a consistent and informative experience across all states.
packages/app/src/runs · high confidence
Selector Playground re-implemented in Vue with enhanced interaction features
The Selector Playground component has been rewritten from React to Vue, introducing a refined user interface for selector testing. Users can now switch between \cy.get\ and \cy.contains\ methods via a dropdown menu, with the playground automatically enabling highlighting upon opening. The interface includes dedicated buttons to copy the generated command to the clipboard or print it to the console, providing immediate feedback via tooltips. Additionally, the playground intelligently closes the Studio assertions menu when opened to prevent UI conflicts, and displays real-time match counts or validity status for the entered selector.
packages/app/src/runner/selector-playground · high confidence
Socket.IO transport now uses CDP bindings for Chromium and WebKit
The \@packages/socket\ library now supports a Chrome DevTools Protocol (CDP) transport for browser-side communication in Chromium and WebKit browsers, in addition to the existing HTTP/WebSocket transport. This change introduces \CDPBrowserSocket\ and \CDPSocketServer\ classes that bridge socket events via \Runtime.evaluate\ and \Runtime.addBinding\ instead of standard network sockets. To support this, the socket.io-parser has been patched to handle circular object references and binary data across execution contexts, and a custom parser (\cypressParser\) is used to lift the attachment limit for trusted local payloads. Tests have been added to verify the new CDP socket behavior and the updated encoding/decoding logic.
packages/socket · high confidence
Standardized error messaging and formatting system
The \@packages/errors\ package has been refactored to provide a centralized, standardized system for all Cypress error definitions and formatting. It introduces a new \errTemplate\ tagged-template system that constructs structured, ANSI-colored error messages for the terminal and Markdown for documentation, ensuring consistent styling and clarity across the entire Cypress codebase.
packages/errors · high confidence
Telemetry package refactored with CI detectors and new span exporters
The telemetry package has been restructured to include dedicated detectors for CircleCI and GitHub Actions, allowing telemetry resources to be automatically attributed to the CI environment. New span exporters have been added to support sending telemetry data via IPC (from child processes) and WebSocket (from the browser), alongside the existing HTTP-based cloud exporter. The package now ships a browser-specific bundle built via Rollup, and tests have been migrated from Mocha to Vitest to cover these new components and the updated initialization flow.
packages/telemetry · high confidence
UI adjustments during screenshot capture
The runner now automatically adjusts its layout and visibility when a screenshot is being taken to ensure clean output. New Vue components in the runner's screenshot module handle this by expanding the runner's width to 100% and hiding specific UI elements (like the navbar) during the capture process, while a helper pixel component ensures proper rendering context.
packages/app/src/runner/screenshot · high confidence
Update React component testing setup to use data-cy-root
The React component testing support files have been updated to use a new HTML template that mounts components into a div with the data-cy-root attribute instead of the previous id selector. The component mounting command is now explicitly registered via Cypress.Commands.add using the mount function from @cypress/react, ensuring consistent component rendering in tests.
npm/react/cypress/support · high confidence
Updated Angular test fixture to use modern Angular APIs and zoneless support
The Angular system-test fixture has been updated to support Angular 21 and zoneless mode. The application component now uses modern Angular features such as \signal\ for state management and \input\ for properties, replacing legacy decorator patterns. The fixture includes new test components for signals, standalone components, and legacy module-based components to ensure compatibility across different Angular architectures. Additionally, the test suite has been expanded to cover component mounting, lifecycle hooks, content projection, and error handling in a zoneless environment.
system-tests/project-fixtures/angular · high confidence
Updated Vue 3 system-test projects to use modern component patterns
The Vue 3 system-test projects (including webpack-ts-configured, webpack-ts-unconfigured, and the base vue3 project) have been updated to use Vue 3 Single File Component conventions, specifically the \\<script setup\>\ syntax for components like HelloWorld and App. The test suites have been adjusted to reflect current Cypress Component Testing APIs, such as using \cy.mount\ in the base project and \mount\ from \cypress/vue\ in the TypeScript projects, while also adding specific error-handling tests to verify behavior during synchronous and asynchronous component errors.
system-tests/projects/vue3, system-tests/projects/vue3-webpack-ts-configured, system-tests/projects/vue3-webpack-ts-unconfigured · high confidence
V8 snapshot generation tooling rewritten in TypeScript with parallel processing and strict verification
The V8 snapshot generation tooling in \tooling/v8-snapshot\ has been significantly refactored and rewritten in TypeScript. This change introduces a new 'snapshot doctor' system that uses parallel worker processes to verify module health and detect circular imports, ensuring more robust snapshot creation. It also implements strict verifiers for global objects (like \Error\, \Promise\, and \Array\) during the doctor phase to catch issues early, and adds a custom \require\ implementation within the snapshot blueprint to optimize module resolution. These improvements aim to stabilize the snapshot generation process and improve startup performance by ensuring the bundled code is compatible with V8 snapshotting.
tooling/v8-snapshot · high confidence
Vite dev server now requires Vite 8+ and pre-warms the module graph
The Vite dev server has been updated to require Vite version 8 or higher, dropping support for earlier versions. To improve reliability and prevent "Failed to fetch dynamically imported module" errors during test execution, the server now pre-warms the module graph by resolving the support file and, in run mode, all spec files before signaling that it is ready. Additionally, the server excludes component test specs from Vite 8's JSX refresh to prevent duplicate test registration issues.
npm/vite-dev-server/src · high confidence
Vue 3 component testing adapter restructured with modern tooling and ES2022 target
The @cypress/vue package has been restructured to align with modern development standards: the build target is now ES2022 (up from ES5), ESLint has been migrated to the flat config format, and the package now includes dedicated configuration files for Vite and webpack to support component testing. The mount adapter's return type has been updated to include both the wrapper and the component instance, and the internal root element selector has changed from \#\_\_cy\_root to data-cy-root. Additionally, the package is now bundled with the Cypress binary and no longer requires separate installation for standard use cases.
npm/vue · high confidence
Webpack preprocessor now supports TypeScript 7 and removes built-in CoffeeScript
The @cypress/webpack-batteries-included-preprocessor has been updated to support TypeScript 7 for spec preprocessing; because TypeScript 7 no longer includes a JavaScript compiler API, the preprocessor now uses Babel (with preset-typescript) to transpile TypeScript files instead of ts-loader. Additionally, built-in CoffeeScript support has been removed, meaning .coffee files will no longer compile by default and users must configure their own webpack setup if they need CoffeeScript.
npm/webpack-batteries-included-preprocessor · high confidence
Webpack preprocessor v8 removes built-in CoffeeScript support
The @cypress/webpack-preprocessor package has dropped its built-in support for CoffeeScript. Users who previously relied on automatic compilation of .coffee spec or support files will now see those files treated as raw text. To continue using CoffeeScript, you must switch to the standalone @cypress/webpack-preprocessor and manually configure a webpack rule with coffee-loader and the coffeescript package in your own webpack configuration.
npm/webpack-preprocessor · high confidence
Fixes
Add TypeScript source file to simple\_passing fixture
The system test fixture at system-tests/project-fixtures/simple\_passing now includes a TypeScript source file (src/foo.ts) that exports a constant. This change supports the fixture's role in validating ESM projects using TypeScript with ts-node/esm by providing the necessary source code for the test scenario.
_system-tests/project-fixtures/simple\passing · medium confidence
Added Vite + React component test project for Electron run mode
A new system-test project located at system-tests/projects/vite-simple has been added to validate component testing with Vite and React in Electron run mode. The project includes a simple React application and two identical component test files (one.cy.jsx and two.cy.jsx) that mount the App component and verify the 'Hello World' heading renders correctly. This addition supports the fix for an issue where component tests in Electron run mode were not exiting properly.
system-tests/projects/vite-simple · high confidence
Fix scaffolded React and Vue 3 Vite starter projects
The system-test scaffolds for the unconfigured React and Vue 3 Vite templates now include the correct source files (such as App components, entry points, styles, and type declarations) required for the projects to build and run properly, resolving previous issues where these files were missing or incorrect.
system-tests/projects/react-vite-ts-unconfigured, system-tests/projects/vue3-vite-ts-unconfigured · high confidence
Fixes TypeScript types and distribution for @cypress/puppeteer support
This change resolves type resolution and distribution issues for the @cypress/puppeteer support package. It introduces a new TypeScript declaration file (index.d.ts) that extends the Cypress Chainable interface to include a 'puppeteer' method, ensuring proper type checking for users. Additionally, the JavaScript entry point (index.js) is updated to correctly require the support module from the distribution directory, ensuring the functionality is properly exported and accessible.
npm/puppeteer/support · high confidence
Updated Next.js test fixtures for version 16.0.3+ compatibility
The Next.js test fixtures in the configured and unconfigured system-test projects have been updated to align with Next.js 16.0.3+. This includes adding the \installBindings\ call to ensure compatibility with the newer framework version, and refreshing the default page components (\\_app.js\, \\_document.js\, \index.js\) and styles to reflect the current Next.js template structure.
system-tests/projects/nextjs-configured, system-tests/projects/nextjs-unconfigured · high confidence
Test coverage
Add Cypress support files for webpack-dev-server e2e tests; Add WebKit-specific Cypress e2e tests; Add test fixture for Babel compatibility with modern React syntax; Added Cypress component test fixtures for system testing; Added Cypress component tests for Vue Alert and Button components; Added Cypress component tests for the HelloWorld setup component; Added GraphQL test stubs for Cloud types; Added TypeScript type tests for Cypress CLI API and runtime commands; Added TypeScript type-definition tests for Cypress Vue Test Utils; Added V8 snapshot system tests; Added Vitest snapshot tests for CLI behavior and utilities; Added Vue component and code-coverage test examples; Added accessibility interaction tests for buttons, links, inputs, and sliders; Added accessibility test fixtures for interactive components; Added authentication test fixtures for multi-domain and cross-origin scenarios; Added client-side test initialization logic for Vite dev server; Added component testing specs for uncaught exceptions and stack trace handling; Added component tests for ESM import handling and stubbing; Added component tests for Vue Router navigation in the Pizza Shop example; Added component tests for spec generation UI components; Added component tests for the AjaxList Vue component; Added component tests for the Specs List UI; Added component tests for the Testing Type Switcher; Added component tests for the new Specs page banner system; Added component tests for viewport configuration and resizing; Added e2e tests for @cypress/grep v6.0.0; Added e2e tests for DOM coordinates, element attachment, jQuery conflicts, and visibility strategies; Added e2e tests for Vite 8 React component testing and dev-server configuration; Added e2e tests for driver internal modules; Added e2e tests for driver utility modules; Added e2e tests for runner UI, error reporting, and experimental retries; Added e2e tests for the Cypress-in-Cypress app environment; Added e2e tests for webpack preprocessor using Vitest; Added e2e tests for webpack-batteries-included-preprocessor features; Added end-to-end tests for Angular, Next.js, and React component testing with webpack-dev-server; Added end-to-end tests for subscription-based UI updates; Added smoke test for Vue component mounting; Added smoke test for webpack-react-nested-config project; Added snapshot tests for release artifact and utility scripts; Added source files for spec tree UI logic; Added support file loading tests for Vite Component Test projects; Added system tests for Cypress-in-Cypress component rendering; Added system tests for Just-In-Time Compile with Vite and Webpack; Added test coverage for the Cypress Tap CLI; Added test fixtures and TypeScript configuration for CLI tests; Added test fixtures for Cypress config merging logic; Added test fixtures for TypeScript ESM, decorators, and path resolution; Added test fixtures for V8 snapshot deferred and no-rewrite scenarios; Added test fixtures for XHR redirect and font path resolution; Added test fixtures for browser detection; Added test fixtures for code generation output; Added test fixtures for driver behavior verification; Added test fixtures for webpack-dev-server; Added test helper for scaffolding system test projects; Added test helpers for module matrix simulation and project scaffolding; Added test utilities for Git repository setup and Mocha event snapshotting; Added tests for Angular 21 and 22 schematic integration; Added tests for Angular and Next.js webpack-dev-server handlers; Added tests for GraphQL CORS origin enforcement; Added tests for config AST utilities; Added tests for config package validation and utilities; Added tests for cy.prompt error handling and environment constraints; Added tests for eslint-plugin-dev rules using Vitest; Added tests for static response utility logic; Added tests for the Vite dev server sourcemap plugin; Added tests for the new session management infrastructure; Added unit tests for CLI exec commands and migrated to Vitest; Added unit tests for CLI library modules; Added unit tests for code generation and spec options; Added unit tests for config file updater and test helpers; Added unit tests for data-context actions; Added unit tests for data-context project configuration and lifecycle management; Added unit tests for data-context sources and polling; Added unit tests for data-context utility functions; Added unit tests for driver commands and cross-origin communication; Added unit tests for grep parsing utilities; Added unit tests for server plugin child process modules; Added unit tests for the @cypress/puppeteer plugin; Added unit tests for the Vite dev server integration; Added unit tests for webpack preprocessor configuration and error handling; Assertion e2e tests reorganized into focused spec files; CLI task tests migrated to Vitest with updated snapshots; Driver e2e specs converted to TypeScript; Driver e2e specs converted to TypeScript and updated for React 19; Driver test infrastructure converted to TypeScript with new plugin and support files; Expanded e2e test coverage for cy.origin cross-origin capabilities; Expanded end-to-end test coverage for cy.origin commands; Expanded visibility test fixtures for modern CSS behaviors; Launchpad test infrastructure and configuration scaffolding; Migrate config package tests to Vitest; Migrate mochaEvents integration tests to the app package; Migrate webpack-dev-server tests to Vitest; New Cypress E2E support utilities for testing and reporting; New e2e test suites for driver commands; New end-to-end tests for Cypress Studio functionality; New end-to-end tests for driver action commands; Reporter tests migrated to component testing; Snapshot test for data-context initialization; System tests now include dedicated ESLint configuration and documentation.
Dependencies
Massive dependency update across 317 manifests
This release updates dependencies across 317 manifests, including upgrades to Electron, TypeScript, and various security patches for packages like tar, undici, and express.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 38 → 44 (+5.3)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.16) — scores are not directly comparable.
Lenses
- Code Health 71 → 81 (+9.5)
- Architecture 58 (new)
- Maturity 61 → 71 (+10.4)
- Readiness 22 → 33 (+11.4)
- Security 46 → 65 (+18.8)
- Accessibility 42 (new)
- Performance 60 (new)
Resolved (114)
- Boundary-crossing change coupling: SpecRunnerOpenMode.vue ↔ StudioPanel.vue (packages/app/src/runner/SpecRunnerOpenMode.vue)
- Boundary-crossing change coupling: SpecRunnerOpenMode.vue ↔ index.ts (packages/app/src/runner/SpecRunnerOpenMode.vue)
- Boundary-crossing change coupling: StudioPanel.vue ↔ index.ts (packages/app/src/studio/StudioPanel.vue)
- Boundary-crossing change coupling: errors.ts ↔ upload_artifacts.ts (packages/errors/src/errors.ts)
- Boundary-crossing change coupling: firefox.ts ↔ pluginUtils.js (packages/server/lib/browsers/firefox.ts)
- Boundary-crossing change coupling: key_press.ts ↔ bidi_automation.ts (packages/server/lib/automation/commands/key_press.ts)
- Boundary-crossing change coupling: privileged_channel.ts ↔ privileged-commands-manager.ts (packages/driver/src/util/privileged_channel.ts)
- Change coupling: ask.js ↔ index.js (scripts/binary/ask.js)
- Change coupling: cloud_request.ts ↔ index.ts (packages/server/lib/cloud/api/cloud_request.ts)
- Critical CVE: [GHSA redacted] (system-tests/projects/angular-18/yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (system-tests/projects/angular-21/yarn.lock)
- Critical CVE: [GHSA redacted] (system-tests/projects/plugin-code-coverage/yarn.lock)
- Critical CVE: [GHSA redacted] (system-tests/projects/webpack4_wds4-react/yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- Critical CVE: [GHSA redacted] (system-tests/projects/plugin-code-coverage/yarn.lock)
- Critical CVE: [GHSA redacted] (system-tests/projects/qwik-app/yarn.lock)
- Critical CVE: [GHSA redacted] (system-tests/projects/plugin-code-coverage/yarn.lock)
- Critical CVE: [GHSA redacted] (system-tests/projects/config-cjs-and-esm/config-with-ts-module-no-tsconfig/yarn.lock)
- Critical CVE: [GHSA redacted] (yarn.lock)
- …and 94 more
New (3429)
- $Cypress.action (cognitive 35) (packages/driver/src/cypress.ts)
- $Cypress.action (cyclomatic 85) (packages/driver/src/cypress.ts)
- (anonymous) (cognitive 26) (packages/server/lib/privileged-commands/privileged-channel.js)
- (anonymous) (cyclomatic 28) (packages/server/lib/privileged-commands/privileged-channel.js)
- Assertions commented out: can target new element after mouseup sequence (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- Assertions commented out: click when mouseup el is child of mousedown el (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- Assertions commented out: events when element moved on click (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- Assertions commented out: events when element moved on mousedown (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- Assertions commented out: events when element moved on mouseup (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- Assertions commented out: no click when mouseUpPhase targetEl is detached (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- Assertions commented out: no click when new element at coords is not ancestor (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- Assertions commented out: responds to changes in move handlers (packages/driver/cypress/e2e/commands/actions/click.cy.ts)
- AutIframe.highlightEl (cognitive 31) (packages/app/src/runner/aut-iframe.ts)
- AutIframe.highlightEl (cyclomatic 18) (packages/app/src/runner/aut-iframe.ts)
- Boundary-crossing change coupling: AuthActions.ts ↔ auth.ts (packages/data-context/src/actions/AuthActions.ts)
- Boundary-crossing change coupling: BrowserDataSource.ts ↔ OpenBrowserList.vue (packages/data-context/src/sources/BrowserDataSource.ts)
- Boundary-crossing change coupling: event-manager.ts ↔ events.ts (packages/app/src/runner/event-manager.ts)
- Boundary-crossing change coupling: remote-states.ts ↔ response-middleware.ts (packages/network-tools/lib/remote-states.ts)
- Boundary-crossing change coupling: selectFile.ts ↔ privileged-commands-manager.ts (packages/driver/src/cy/commands/actions/selectFile.ts)
- Boundary-crossing change coupling: studio-app-types.ts ↔ studio-server-types.ts (packages/app/src/studio/studio-app-types.ts)
- …and 3409 more
Changes since last survey
- 300 commits — 272 feature/other, 28 fixes
By area
- (repo) — 51 commits
- packages/driver — 47 commits
- packages/server — 43 commits
- (root) — 21 commits
- tooling/v8-snapshot — 19 commits
- .circleci/src — 13 commits
- cli/CHANGELOG.md — 8 commits
- cli/types — 6 commits
- packages/app — 6 commits
- system-tests/projects — 6 commits
- packages/data-context — 5 commits
- packages/proxy — 5 commits
- packages/electron — 4 commits
- packages/errors — 4 commits
- packages/launchpad — 4 commits
- cli/lib — 3 commits
- cli/test — 3 commits
- npm/puppeteer — 3 commits
- packages/config — 3 commits
- .circleci/config.yml — 2 commits
Notable commits
- fix: chore: consolidate AI guidance into guides/ and fix two changelog validation bugs (#34833)
- fix: chore: fix flaky test isolation system tests by dropping 20s timeout (#34698)
- fix: chore: fix verify-release-readiness OOM after the v16 merge (#34695)
- fix: fix changelog incorrect merge
- fix: fix(puppeteer): always disconnect, report falsy rejections, and fix retry timeout (#34907)
- fix: fix: apply blockHosts test config overrides at runtime (#34200)
- fix: fix: bound the teardown work that waits on another process (#34699)
- fix: fix: describe cy.contains() subject by its content in assertions (#34588)
- fix: fix: do not offer to translate the application under test (#34664)
- fix: fix: don't mutate the DOM when have.attr/css/prop is given an object (#34544)
- fix: fix: enforce blockHosts on the browser network path in Chrome (#34788)
- fix: fix: fake cancelIdleCallback alongside requestIdleCallback in cy.clock() (#34926)
- fix: fix: fire after:run when a project is closed in global open mode (#34700)
- fix: fix: have tap run acknowledge a running spec instead of dumping it (#34777)
- fix: fix: honor a zero weight in weightedChoice and deflake its distribution test (#34815)
- fix: fix: keep app service workers off the Cypress runner document (#34762)
- fix: fix: keep the run's exit code when graceful-exit teardown fails (#34686)
- fix: fix: label the cy.env() console output (#34615)
- fix: fix: merge user --disable-features args instead of letting them clobber (#34787)
- fix: fix: never hand a Cypress internal route to the site under test (#34801)
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
cypress-io/cypress was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 28 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 08ec143f851da73c533204141ac4ba33315cdd32 — the exact code this score is about.
- Scored under rubric-2026.09.16 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-eb9197011364.