โ ๏ธ Breaking Change
Impact Score: 7/10
Vitest v4.0.0 โ Release Notes & Engineering Impact
Source available โ automated, not human-reviewed
Component: vitest ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-01.
Breaking-change evidence from the source
๐จ Breaking Changes - Remove `'basic'` reporter - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/7884 [<samp>(82fcf)</samp>](https://github.com/vitest-dev/vitest/commit/82fcf5d53)
โก Executive Summary (TL;DR)
Vitest v4.0.0. Source highlight: To stay updated, read our blog post and check the migration guide.
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
โ ๏ธ Breaking Changes & Deprecations (1)
- ๐จ Breaking Changes - Remove `'basic'` reporter - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/7884 [<samp>(82fcf)</samp>](https://github.com/vitest-dev/vitest/commit/82fcf5d53)
โจ New Features & Capabilities (6)
- Verbose reporter prints tests in a list, introduce `tree` reporter - by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8500 <samp>(25fd3)</samp>
- Provide entity to onConsoleLog - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8159 <samp>(437d4)</samp>
- Add `onUnhandledError` callback - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8162 <samp>(924cb)</samp>
- Add spy option to vi.mockObject - by @rChaoz in https://github.com/vitest-dev/vitest/issues/8285 <samp>(81d76)</samp>
- Don't use vite-node in coverage packages - by @sheremet-va <samp>(ffdb4)</samp>
- Clickable dashboard numbers - by @shairez in https://github.com/vitest-dev/vitest/issues/7406 <samp>(2344c)</samp>
โก Performance & Enhancements (6)
- Avoid spawning extra workers if no tests will run there - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8446 <samp>(3fb3e)</samp>
- Don't set `process.title` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8453 <samp>(0a766)</samp>
- Remove chai as a direct dependency, keep it in `@vitest/expect` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8461 <samp>(cc98c)</samp>
- Reduce the amount of dynamic imports - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8465 <samp>(db6cd)</samp>
- Delay populating node-globals - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8506 <samp>(41cbc)</samp>
- Get `workerId` from a global object - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8507 <samp>(46b13)</samp>
๐ง Bug Fixes & Patches (6)
- Allow overriding globals in types - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8215 <samp>(2248b)</samp>
- Remove unused dependencies - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8184 <samp>(feadc)</samp>
- Distribute test files to shards more evenly - by @Shinyaigeek and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8288 <samp>(7b489)</samp>
- Use suite's timeout when `test.extend` - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8278 <samp>(43977)</samp>
- Support snapshot with no object key sorting - by @hi-ogawa and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8136 <samp>(e85e3)</samp>
- Annotation location always points to the test file - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8315 <samp>(88071)</samp>
๐ View Raw Release Notes (Original Developer Log)
Vitest 4.0 is out!
To stay updated, read our [blog post](https://vitest.dev/blog/vitest-4) and check the [migration guide](https://vitest.dev/guide/migration).
### ๐จ Breaking Changes
- Remove `'basic'` reporter - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/7884 [<samp>(82fcf)</samp>](https://github.com/vitest-dev/vitest/commit/82fcf5d53)
- Simplify default exclude pattern - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/6287 [<samp>(14c50)</samp>](https://github.com/vitest-dev/vitest/commit/14c507200)
- Remove deprecated getSourceMap - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8194 [<samp>(ff934)</samp>](https://github.com/vitest-dev/vitest/commit/ff93444f8)
- Replace deprecated ErrorWithDiff with TestError - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8195 [<samp>(da59e)</samp>](https://github.com/vitest-dev/vitest/commit/da59eb887)
- Remove UserConfig type in favor of ViteUserConfig - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8196 [<samp>(22f7f)</samp>](https://github.com/vitest-dev/vitest/commit/22f7f2db5)
- Remove deprecated coverage options in favor of `vitest/node` exports - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8197 [<samp>(dc848)</samp>](https://github.com/vitest-dev/vitest/commit/dc8486d22)
- Remove deprecated internal helpers and environment exports - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8198 [<samp>(4703c)</samp>](https://github.com/vitest-dev/vitest/commit/4703cf850)
- Remove deprecated typecheck and runner types - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8199 [<samp>(89a1c)</samp>](https://github.com/vitest-dev/vitest/commit/89a1cb626)
- Remove Node types from the main entry point, use `vitest/node` instead - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8200 [<samp>(1e60c)</samp>](https://github.com/vitest-dev/vitest/commit/1e60c4f44)
- Remove support for Vite 5 - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8202 [<samp>(cb8b0)</samp>](https://github.com/vitest-dev/vitest/commit/cb8b03bac)
- Remove deprecated types - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8203 [<samp>(66bee)</samp>](https://github.com/vitest-dev/vitest/commit/66bee836f)
- Remove deprecated environmentMatchGlobs and poolMatchGlobs - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8205 [<samp>(be11d)</samp>](https://github.com/vitest-dev/vitest/commit/be11d374c)
- Remove deprecated `workspace` option in favor of `projects` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8218 [<samp>(76fb7)</samp>](https://github.com/vitest-dev/vitest/commit/76fb75d42)
- Ignore `--standalone` when CLI filename filter is used - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8262 [<samp>(013bf)</samp>](https://github.com/vitest-dev/vitest/commit/013bf2cb2)
- Use module-runner instead of vite-node - by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8208 [<samp>(9be01)</samp>](https://github.com/vitest-dev/vitest/commit/9be01ba59)
- Rewrite spying implementation to make module mocking more intuitive - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8363 [<samp>(9e412)</samp>](https://github.com/vitest-dev/vitest/commit/9e412de35)
- Remove deprecated APIs - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8428 [<samp>(a1cb9)</samp>](https://github.com/vitest-dev/vitest/commit/a1cb9719a)
- Remove `minWorkers` and set it automatically to 0 in non watch mode - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8454 [<samp>(2c2d1)</samp>](https://github.com/vitest-dev/vitest/commit/2c2d1d4ce)
- Verbose reporter prints tests in a list, introduce `tree` reporter - by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8500 [<samp>(25fd3)</samp>](https://github.com/vitest-dev/vitest/commit/25fd32bf0)
- Include shadow root contents in pretty-format output - by @wkillerud in https://github.com/vitest-dev/vitest/issues/8545 [<samp>(9e722)</samp>](https://github.com/vitest-dev/vitest/commit/9e722834a)
- Remove deprecated order from test() API - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8594 [<samp>(4d419)</samp>](https://github.com/vitest-dev/vitest/commit/4d41928c6)
- Rewrite pools without `tinypool` - by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8705 [<samp>(4822d)</samp>](https://github.com/vitest-dev/vitest/commit/4822d047a)
- **browser**: Require a provider factory instead of a string - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8445 [<samp>(606cb)</samp>](https://github.com/vitest-dev/vitest/commit/606cb9e3e)
- **expect**: Pass current equality testers to asymmetric matcher - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/6825 [<samp>(965ce)</samp>](https://github.com/vitest-dev/vitest/commit/965cefc19)
- **projects**: Allow only files that have "vitest.config" or "vite.config" in the name - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8542 [<samp>(304bc)</samp>](https://github.com/vitest-dev/vitest/commit/304bc20f0)
- **reporter**: Remove deprecated APIs - by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8223 [<samp>(149f8)</samp>](https://github.com/vitest-dev/vitest/commit/149f8e509)
- **runner**: Set mode to `todo` if no function is passed down to `test` or `describe` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8346 [<samp>(1a81c)</samp>](https://github.com/vitest-dev/vitest/commit/1a81c21d2)
- **snapshot**: Fail test with obsolete snapshot on CI - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/7963 [<samp>(4d84f)</samp>](https://github.com/vitest-dev/vitest/commit/4d84f0ac6)
- **spy**: Support spying on classes - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/6160 [<samp>(abc0d)</samp>](https://github.com/vitest-dev/vitest/commit/abc0d8273)
### ๐ Features
- Provide entity to onConsoleLog - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8159 [<samp>(437d4)</samp>](https://github.com/vitest-dev/vitest/commit/437d461aa)
- Add `onUnhandledError` callback - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8162 [<samp>(924cb)</samp>](https://github.com/vitest-dev/vitest/commit/924cb6961)
- Add spy option to vi.mockObject - by @rChaoz in https://github.com/vitest-dev/vitest/issues/8285 [<samp>(81d76)</samp>](https://github.com/vitest-dev/vitest/commit/81d7601e4)
- Don't use vite-node in coverage packages - by @sheremet-va [<samp>(ffdb4)</samp>](https://github.com/vitest-dev/vitest/commit/ffdb4d5fd)
- Clickable dashboard numbers - by @shairez in https://github.com/vitest-dev/vitest/issues/7406 [<samp>(2344c)</samp>](https://github.com/vitest-dev/vitest/commit/2344c1f6e)
- Display test "path" when filtering - by @userquin in https://github.com/vitest-dev/vitest/issues/8547 [<samp>(2e491)</samp>](https://github.com/vitest-dev/vitest/commit/2e4918954)
- Introduce separate packages for browser mode providers - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8629 [<samp>(0dc93)</samp>](https://github.com/vitest-dev/vitest/commit/0dc93ea98)
- Add hooks with type-safe extra context to TestAPI - by @ysfaran in https://github.com/vitest-dev/vitest/issues/8623 [<samp>(6b21c)</samp>](https://github.com/vitest-dev/vitest/commit/6b21cfe55)
- Support `expect.assert` for type narrowing - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8695 [<samp>(fe589)</samp>](https://github.com/vitest-dev/vitest/commit/fe5895d2b)
- Add `displayAnnotations` option to `github-options` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8706 [<samp>(4a66d)</samp>](https://github.com/vitest-dev/vitest/commit/4a66df625)
- Add schema validation matchers - by @zirkelc in https://github.com/vitest-dev/vitest/issues/8527 [<samp>(c0b25)</samp>](https://github.com/vitest-dev/vitest/commit/c0b250e5c)
- Add a way to dump transformed content - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8711 [<samp>(931c0)</samp>](https://github.com/vitest-dev/vitest/commit/931c0ee63)
- **api**:
- Expose `experimental_parseSpecifications` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8408 [<samp>(fdeb2)</samp>](https://github.com/vitest-dev/vitest/commit/fdeb2f482)
- Expose Vitest watcher - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8413 [<samp>(aaa6e)</samp>](https://github.com/vitest-dev/vitest/commit/aaa6e6512)
- Add `enableCoverage` and `disableCoverage` methods - by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8412 [<samp>(61eb7)</samp>](https://github.com/vitest-dev/vitest/commit/61eb7dd9c)
- Add `getGlobalTestNamePattern` method - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8438 [<samp>(bdb70)</samp>](https://github.com/vitest-dev/vitest/commit/bdb7067f1)
- Add `relativeModuleId` to `TestModule` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8505 [<samp>(3be09)</samp>](https://github.com/vitest-dev/vitest/commit/3be0986aa)
- Add `getSeed` method - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8592 [<samp>(438c4)</samp>](https://github.com/vitest-dev/vitest/commit/438c44e7f)
- **browser**:
- Support `toBeInViewport` utility method to assert element is in viewport or not - by @Shinyaigeek in https://github.com/vitest-dev/vitest/issues/8234 [<samp>(ceed5)</samp>](https://github.com/vitest-dev/vitest/commit/ceed5b622)
- Add qwik to the `vitest init` cli command - by @thejackshelton in https://github.com/vitest-dev/vitest/issues/8330 [<samp>(1638b)</samp>](https://github.com/vitest-dev/vitest/commit/1638b44e8)
- Introduce `toMatchScreenshot` for Visual Regression Testing - by @macarie in https://github.com/vitest-dev/vitest/issues/8041 [<samp>(d45f9)</samp>](https://github.com/vitest-dev/vitest/commit/d45f964c1)
- Add `trackUnhandledErrors` option - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8386 [<samp>(c0ec0)</samp>](https://github.com/vitest-dev/vitest/commit/c0ec08a90)
- Support iframe locator with playwright provider - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8016 [<samp>(57b2c)</samp>](https://github.com/vitest-dev/vitest/commit/57b2cca2e)
- Add `length` property to locators, `toHaveLength` now accepts locators - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8512 [<samp>(2308c)</samp>](https://github.com/vitest-dev/vitest/commit/2308cbf13)
- Support playwright tracing - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8584 [<samp>(1aac5)</samp>](https://github.com/vitest-dev/vitest/commit/1aac59cd2)
- Expose `options` on `BrowserProviderOption` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8609 [<samp>(0d0e5)</samp>](https://github.com/vitest-dev/vitest/commit/0d0e5cdf6)
- Support `--inspect` option in webdriverio - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8613 [<samp>(38adc)</samp>](https://github.com/vitest-dev/vitest/commit/38adc86cf)
- Support custom screenshot comparison algorithms - by @macarie in https://github.com/vitest-dev/vitest/issues/8687 [<samp>(e63b1)</samp>](https://github.com/vitest-dev/vitest/commit/e63b17efc)
- **coverage**:
- `autoUpdate` to support percentage formatting - by @Battjmo and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8456 [<samp>(99e01)</samp>](https://github.com/vitest-dev/vitest/commit/99e016bec)
- **expect**:
- Support `toBeNullable` expect function to check provided value is nullish - by @Shinyaigeek and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8294 [<samp>(eeec5)</samp>](https://github.com/vitest-dev/vitest/commit/eeec501de)
- **mocker**:
- Add `automocker` entry - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8301 [<samp>(e9c92)</samp>](https://github.com/vitest-dev/vitest/commit/e9c928252)
### ๐ Bug Fixes
- Allow overriding globals in types - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8215 [<samp>(2248b)</samp>](https://github.com/vitest-dev/vitest/commit/2248b06d4)
- Remove unused dependencies - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8184 [<samp>(feadc)</samp>](https://github.com/vitest-dev/vitest/commit/feadc60af)
- Distribute test files to shards more evenly - by @Shinyaigeek and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8288 [<samp>(7b489)</samp>](https://github.com/vitest-dev/vitest/commit/7b489959a)
- Use suite's timeout when `test.extend` - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8278 [<samp>(43977)</samp>](https://github.com/vitest-dev/vitest/commit/43977c2b8)
- Support snapshot with no object key sorting - by @hi-ogawa and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8136 [<samp>(e85e3)</samp>](https://github.com/vitest-dev/vitest/commit/e85e396f0)
- Annotation location always points to the test file - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8315 [<samp>(88071)</samp>](https://github.com/vitest-dev/vitest/commit/88071a8f2)
- Add `--changed` flag support to `vitest list` command - by @haakonjackfloat in https://github.com/vitest-dev/vitest/issues/8270 and https://github.com/vitest-dev/vitest/issues/8272 [<samp>(e71a5)</samp>](https://github.com/vitest-dev/vitest/commit/e71a5d0ec)
- Prevent rpc timeout on slow thread blocking synchronous methods - by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8297 [<samp>(bea87)</samp>](https://github.com/vitest-dev/vitest/commit/bea874610)
- Forbid setting environment to `browser` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8334 [<samp>(0417a)</samp>](https://github.com/vitest-dev/vitest/commit/0417a2c1a)
- Invalidate modules in all module graphs when the file is changed - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8352 [<samp>(94ab3)</samp>](https://github.com/vitest-dev/vitest/commit/94ab392b3)
- Screenshot masks with Playwright provider - by @macarie in https://github.com/vitest-dev/vitest/issues/8357 [<samp>(459ef)</samp>](https://github.com/vitest-dev/vitest/commit/459efba6b)
- Configure `oxc` instead of `esbuild` on `rolldown-vite` - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8378 [<samp>(e922e)</samp>](https://github.com/vitest-dev/vitest/commit/e922e9266)
- Make sure test errors always have `stacks` property in Node.js context - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8392 [<samp>(b825e)</samp>](https://github.com/vitest-dev/vitest/commit/b825ef87c)
- Support `import.meta.resolve` on Vite 7 - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8493 [<samp>(549d3)</samp>](https://github.com/vitest-dev/vitest/commit/549d321e2)
- Show the assertion error first when `expect.poll` assertion fails - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8483 [<samp>(fb450)</samp>](https://github.com/vitest-dev/vitest/commit/fb4500bec)
- Override fake timers when `useFakeTimers` is called multiple times - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8504 [<samp>(ed7e3)</samp>](https://github.com/vitest-dev/vitest/commit/ed7e3ad5d)
- Custom expect messages for `expect.extend` matchers - by @lzl0304 in https://github.com/vitest-dev/vitest/issues/8520 [<samp>(96945)</samp>](https://github.com/vitest-dev/vitest/commit/969456b4a)
- Process sourcemaps for stack traces from `globalSetup` files - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8534 [<samp>(8978a)</samp>](https://github.com/vitest-dev/vitest/commit/8978a23b7)
- Resolve performance issue when throwing errors with stackTraceLimit = 0 - by @Copilot, **sheremet-va** and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8531 [<samp>(6d5b5)</samp>](https://github.com/vitest-dev/vitest/commit/6d5b5b1a5)
- Avoid recursively applying `$` and `%` formatting to `test.for/each` title - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8557 [<samp>(ea6d7)</samp>](https://github.com/vitest-dev/vitest/commit/ea6d7322e)
- Replace wildcard exports `"./*"` with specific files in vitest package - by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8560 [<samp>(ce746)</samp>](https://github.com/vitest-dev/vitest/commit/ce7466408)
- Don't publish unused d.ts files - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8562 [<samp>(42dfd)</samp>](https://github.com/vitest-dev/vitest/commit/42dfd1c43)
- Remove loupe dependencies from `optimizeDeps.include` for browser mode - by @jake-danton in https://github.com/vitest-dev/vitest/issues/8570 [<samp>(cdcf7)</samp>](https://github.com/vitest-dev/vitest/commit/cdcf7e854)
- Update `engines` field to drop Node 18 support - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8608 [<samp>(9a0bf)</samp>](https://github.com/vitest-dev/vitest/commit/9a0bf2254)
- Correctly inherit test options on extended tests - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8618 [<samp>(15c09)</samp>](https://github.com/vitest-dev/vitest/commit/15c091a99)
- Update @types/node peer deps - by @sheremet-va [<samp>(ee6b2)</samp>](https://github.com/vitest-dev/vitest/commit/ee6b27b5f)
- Re-export CDP Session directly from playwright - by @mrginglymus in https://github.com/vitest-dev/vitest/issues/8702 [<samp>(9553a)</samp>](https://github.com/vitest-dev/vitest/commit/9553ab923)
- Disable trackUnhandledErrors if inspector is enabled - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8732 [<samp>(acac7)</samp>](https://github.com/vitest-dev/vitest/commit/acac7104d)
- `base` option doesn't crash vitest - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8760 [<samp>(9f0ec)</samp>](https://github.com/vitest-dev/vitest/commit/9f0ecccb8)
- **browser**:
- Run in-source tests only when the file itsels is a test file - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8204 [<samp>(bdd2e)</samp>](https://github.com/vitest-dev/vitest/commit/bdd2e01c3)
- `locator.element()` returns `HTMLElement` or `SVGElement` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8440 [<samp>(c1ac1)</samp>](https://github.com/vitest-dev/vitest/commit/c1ac15c6b)
- Don't import from `vite` directly - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8541 [<samp>(d7fca)</samp>](https://github.com/vitest-dev/vitest/commit/d7fca0389)
- Update expect.element type to match the implementation - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8597 [<samp>(b2804)</samp>](https://github.com/vitest-dev/vitest/commit/b2804a1f9)
- Throw an error if iframe is not accessible anymore - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8601 [<samp>(6acdc)</samp>](https://github.com/vitest-dev/vitest/commit/6acdc3a5e)
- Stop creating unnecessary directories when taking screenshots - by @macarie in https://github.com/vitest-dev/vitest/issues/8605 [<samp>(b1c8f)</samp>](https://github.com/vitest-dev/vitest/commit/b1c8fdbe9)
- Always define commands - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8626 [<samp>(acbe0)</samp>](https://github.com/vitest-dev/vitest/commit/acbe0e973)
- Exclude deprecated context import from optimization - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8658 [<samp>(a96ea)</samp>](https://github.com/vitest-dev/vitest/commit/a96ea140e)
- Allow importing BrowserCommand if no browser package is installed - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8666 [<samp>(95c36)</samp>](https://github.com/vitest-dev/vitest/commit/95c367f5e)
- Define an export for browser/utils - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8678 [<samp>(529ab)</samp>](https://github.com/vitest-dev/vitest/commit/529ab46ac)
- Allow service workers to mock the network in chromium without breaking vi.mock - by @Georgegriff and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8668 [<samp>(87108)</samp>](https://github.com/vitest-dev/vitest/commit/87108db33)
- Support sync `not.toBeInTheDocument()` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8751 [<samp>(f5d06)</samp>](https://github.com/vitest-dev/vitest/commit/f5d06434f)
- **core**:
- Fix `objectContaining` expect utility to have more compatibility to jest's one - by @Shinyaigeek in https://github.com/vitest-dev/vitest/issues/8241 [<samp>(480be)</samp>](https://github.com/vitest-dev/vitest/commit/480be1a78)
- **coverage**:
- Include files based on `--project` filter - by @gtbuchanan in https://github.com/vitest-dev/vitest/issues/7885 [<samp>(761be)</samp>](https://github.com/vitest-dev/vitest/commit/761beeeea)
- Prevent encoding filenames of uncovered files - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8239 [<samp>(8a998)</samp>](https://github.com/vitest-dev/vitest/commit/8a9988043)
- Handle query param based transforms correctly - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8418 [<samp>(a400a)</samp>](https://github.com/vitest-dev/vitest/commit/a400a9d2a)
- Enforce order of `vitest:coverage-transform` plugin - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8477 [<samp>(ff517)</samp>](https://github.com/vitest-dev/vitest/commit/ff5170cff)
- V8 to ignore Vite's generated cjs import helpers - by @mrginglymus and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8718 [<samp>(35816)</samp>](https://github.com/vitest-dev/vitest/commit/35816fe8d)
- Keep only strings in `coverage.exclude` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8731 [<samp>(c9c30)</samp>](https://github.com/vitest-dev/vitest/commit/c9c303178)
- **deps**:
- Update all non-major dependencies - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8235 [<samp>(a1e57)</samp>](https://github.com/vitest-dev/vitest/commit/a1e576ae0)
- Update all non-major dependencies - in https://github.com/vitest-dev/vitest/issues/8328 [<samp>(aa79e)</samp>](https://github.com/vitest-dev/vitest/commit/aa79e2733)
- Update all non-major dependencies - in https://github.com/vitest-dev/vitest/issues/8348 [<samp>(13f94)</samp>](https://github.com/vitest-dev/vitest/commit/13f946229)
- Update all non-major dependencies - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8382 [<samp>(704eb)</samp>](https://github.com/vitest-dev/vitest/commit/704eba24b)
- Update all non-major dependencies - in https://github.com/vitest-dev/vitest/issues/8550 [<samp>(048f7)</samp>](https://github.com/vitest-dev/vitest/commit/048f7a1ca)
- **jsdom**:
- Override globals that Fetch API relies on - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8390 [<samp>(05b41)</samp>](https://github.com/vitest-dev/vitest/commit/05b4178e8)
- Support AbortSignal API - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8704 [<samp>(f6690)</samp>](https://github.com/vitest-dev/vitest/commit/f6690ed46)
- **mocker**:
- Fix `regexpHoistable` to allow whitespace before parentheses - by @cszhjh in https://github.com/vitest-dev/vitest/issues/8231 [<samp>(a0f9a)</samp>](https://github.com/vitest-dev/vitest/commit/a0f9ae3f0)
- **module-runner**:
- Resolve `resolvedSources` correctly - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8736 [<samp>(8fc52)</samp>](https://github.com/vitest-dev/vitest/commit/8fc52974f)
- Support getBuiltins - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8746 [<samp>(87bb8)</samp>](https://github.com/vitest-dev/vitest/commit/87bb8f49c)
- **pool**:
- Properly reuse the vm pool - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8758 [<samp>(08498)</samp>](https://github.com/vitest-dev/vitest/commit/08498f0e9)
- **reporter**:
- Invisible CLI menus when `vitest --standalone` - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8248 [<samp>(37cc2)</samp>](https://github.com/vitest-dev/vitest/commit/37cc26994)
- **rolldown-vite**:
- Properly disable minifier in the browser client - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8306 [<samp>(f55bb)</samp>](https://github.com/vitest-dev/vitest/commit/f55bb81e6)
- **runner**:
- Don't bundle runner with utils - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8496 [<samp>(2b4b0)</samp>](https://github.com/vitest-dev/vitest/commit/2b4b05823)
- **spy**:
- Fix spyOn types with optional method - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8499 [<samp>(d3afa)</samp>](https://github.com/vitest-dev/vitest/commit/d3afa601a)
- Can respy on an exported method - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8521 [<samp>(bf450)</samp>](https://github.com/vitest-dev/vitest/commit/bf450b433)
- Don't fail when spying on static getters - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8589 [<samp>(ac1d9)</samp>](https://github.com/vitest-dev/vitest/commit/ac1d92f14)
- **types**:
- Ensure Chai declaration merge works with TS-Go - by @LukeAbby in https://github.com/vitest-dev/vitest/issues/8188 [<samp>(5261d)</samp>](https://github.com/vitest-dev/vitest/commit/5261df0b9)
- Allow returning a promise from defineConfig - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8651 [<samp>(c3474)</samp>](https://github.com/vitest-dev/vitest/commit/c347487e6)
- **ui**:
- Keep the same tab open when clicking on different tests - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8599 [<samp>(3e535)</samp>](https://github.com/vitest-dev/vitest/commit/3e535f78b)
- **utils**:
- Remove ast export - by @bluwy in https://github.com/vitest-dev/vitest/issues/8435 [<samp>(21622)</samp>](https://github.com/vitest-dev/vitest/commit/21622b5ae)
- **vitest**:
- Override `config.include` option with `config.browser.instances[].include` option if it is specified - by @Shinyaigeek in https://github.com/vitest-dev/vitest/issues/8260 [<samp>(010fc)</samp>](https://github.com/vitest-dev/vitest/commit/010fc55b5)
- **watch**:
- Filename filter runs duplicate tests in workspaces - by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8250 [<samp>(932d8)</samp>](https://github.com/vitest-dev/vitest/commit/932d837c6)
- **wdio**:
- Wait for the driver to be properly closed - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8305 [<samp>(c16ab)</samp>](https://github.com/vitest-dev/vitest/commit/c16abe71e)
- Properly construct the shadow root selector if there are multiple elements - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8354 [<samp>(28765)</samp>](https://github.com/vitest-dev/vitest/commit/28765b4bb)
### ๐ Performance
- Avoid spawning extra workers if no tests will run there - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8446 [<samp>(3fb3e)</samp>](https://github.com/vitest-dev/vitest/commit/3fb3e8036)
- Don't set `process.title` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8453 [<samp>(0a766)</samp>](https://github.com/vitest-dev/vitest/commit/0a7666323)
- Remove chai as a direct dependency, keep it in `@vitest/expect` - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8461 [<samp>(cc98c)</samp>](https://github.com/vitest-dev/vitest/commit/cc98c611f)
- Reduce the amount of dynamic imports - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8465 [<samp>(db6cd)</samp>](https://github.com/vitest-dev/vitest/commit/db6cd73ba)
- Use ES2022 language features - by @TrevorBurnham in https://github.com/vitest-dev/vitest/issues/8492 [<samp>(bb34c)</samp>](https://github.com/vitest-dev/vitest/commit/bb34c64dc)
- Delay populating node-globals - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8506 [<samp>(41cbc)</samp>](https://github.com/vitest-dev/vitest/commit/41cbc5328)
- Get `workerId` from a global object - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8507 [<samp>(46b13)</samp>](https://github.com/vitest-dev/vitest/commit/46b13f669)
- Replace startsWith with strict equality - by @btea in https://github.com/vitest-dev/vitest/issues/8546 [<samp>(c42e6)</samp>](https://github.com/vitest-dev/vitest/commit/c42e64e62)
- Reduce the number of unused imports - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8508 [<samp>(9a79b)</samp>](https://github.com/vitest-dev/vitest/commit/9a79b90c9)
- Use experimental `meta.resolve` flag instead of a custom loader - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8567 [<samp>(2e063)</samp>](https://github.com/vitest-dev/vitest/commit/2e0630b76)
- Create only one fetcher per project - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8762 [<samp>(8e15b)</samp>](https://github.com/vitest-dev/vitest/commit/8e15bc8f9)
- **pool**: Resolve all environments first - by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8759 [<samp>(d3ef4)</samp>](https://github.com/vitest-dev/vitest/commit/d3ef4f29c)
##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v3.2.4...v4.0.0)