PackageTrack

npm ยท #3828

@vitest/browser

4.1.11vitest-dev/vitest โ†—

Browser running for Vitest

Release timeline

233 releases since 2022
2023202420252026

Releases

  1. 5.0.0-rc.217 Aug 2026pre-release
    Release notes

       ๐Ÿš€ Features

       ๐Ÿž Bug Fixes

        View changes on GitHub
    Open source โ†’
  2. 5.0.0-rc.111 Aug 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

       ๐Ÿš€ Features

       ๐Ÿž Bug Fixes

       ๐ŸŽ Performance

        View changes on GitHub
    Open source โ†’
  3. 5.0.0-beta.724 Jul 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

       ๐Ÿš€ Features

       ๐Ÿž Bug Fixes

       ๐ŸŽ Performance

        View changes on GitHub
    Open source โ†’
  4. 5.0.0-beta.66 Jul 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

       ๐Ÿš€ Features

       ๐Ÿž Bug Fixes

        View changes on GitHub
    Open source โ†’
  5. 5.0.0-beta.515 Jun 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

       ๐Ÿš€ Features

       ๐Ÿž Bug Fixes

        View changes on GitHub
    Open source โ†’
  6. 5.0.0-beta.41 Jun 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

       ๐Ÿš€ Features

    • browser: Show trace view steps in editor panel  -  by @hi-ogawa and Codex in #10404 (8c4b6)
    • reporter: Support html reporter single file output  -  by @hi-ogawa, Codex and Claude Opus 4.7 (1M context) in #10235 (f757e)

       ๐Ÿž Bug Fixes

       ๐ŸŽ Performance

        View changes on GitHub
    Open source โ†’
  7. 5.0.0-beta.319 May 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Require Node.js 22 and Vite 6.4  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10178 <samp>(38762)</samp>
    • Fail expect.poll when function didn't resolve in time  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10233 <samp>(4df04)</samp>

       ๐Ÿš€ Features

    • Support typescript build mode  -  by @lishaduck in https://github.com/vitest-dev/vitest/issues/9870 <samp>(106da)</samp>
    • api:
      • Expose logs recorded during the test  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10277 <samp>(cba20)</samp>
    • browser:
      • Show aria tree on locator element error  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10257 <samp>(04f04)</samp>
      • Support custom kind in page.mark  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10302 <samp>(053e8)</samp>
      • Live update trace view on watch UI  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10296 <samp>(78c11)</samp>
      • Add context.mark for custom command tracing  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10329 <samp>(aa514)</samp>

       ๐Ÿž Bug Fixes

    • Shell injection safety via github.ref_name in publish workflow  -  by @lloyd-c137 and lloyd-c137 in https://github.com/vitest-dev/vitest/issues/10327 <samp>(dd020)</samp>
    • Make attachmentsDir root only config  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10334 <samp>(fab1b)</samp>
    • Apply cjs interop for truthy __esModule  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10363 <samp>(2b135)</samp>
    • browser:
      • Simplify orchestrator otel carrier  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10283 <samp>(3514f)</samp>
      • Remove orphaned Playwright route when same module is mocked via multiple ids  -  by @Zelys-DFKH in https://github.com/vitest-dev/vitest/issues/9957 and https://github.com/vitest-dev/vitest/issues/10267 <samp>(41db6)</samp>
      • Skip wrapDynamicImport transform on ssr environment  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10355 <samp>(d3c96)</samp>
    • cli:
      • Respect FORCE_COLOR over agent detection  -  by @dokson in https://github.com/vitest-dev/vitest/issues/10272 <samp>(7e66b)</samp>
    • coverage:
      • exclude to not inherit negation globs from test.include  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10299 <samp>(28685)</samp>
    • deps:
      • Update fake-timers to 15.3.2. support toNotFake  -  by @BPScott, @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10043 <samp>(bbf2f)</samp>
    • expect:
      • Allow readonly arrays and sets in toBeOneOf  -  by @YBJ0000 in https://github.com/vitest-dev/vitest/issues/10264 and https://github.com/vitest-dev/vitest/issues/10374 <samp>(fed11)</samp>
    • junit:
      • Include unhandled errors in JUnit XML report  -  by @gbleu and Claude Sonnet 4.6 in https://github.com/vitest-dev/vitest/issues/10244 <samp>(6f74e)</samp>
    • reporter:
      • Guard against non-finite slowTestThreshold in summary reporter  -  by @OfekDanny, Ofek Danny, Claude Sonnet 4.6 and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10202 <samp>(f362f)</samp>
      • Fix non-existing import subpath module blob serialization  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10318 <samp>(29cb0)</samp>
    • reporters:
      • Fix blob file name with label  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10346 <samp>(c5e2e)</samp>
      • summary to intercept logger's streams even when they are not process.std* streams  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10340 <samp>(f79e7)</samp>
      • Fix missing testModules in onTestRunEnd when merging blobs from different root directory test runs  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10348 <samp>(745b3)</samp>
    • runner:
      • Remove AbortSignal listener leak in withCancel  -  by @tomohiro86 and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10265 <samp>(ab098)</samp>
    • ui:
      • Fix duplicate colored error message  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10258 <samp>(035e3)</samp>
      • Fix missing source code in html reporter metadata when merging blobs with different root directory test runs  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10338 <samp>(4f7c2)</samp>

       ๐ŸŽ Performance

    • Stringify diff objects only once  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10276 <samp>(d006a)</samp>
    • browser: Reduce matching screenshot overhead  -  by @kasperpeulen in https://github.com/vitest-dev/vitest/issues/10278 <samp>(511c0)</samp>
        View changes on GitHub
    Open source โ†’
  8. 5.0.0-beta.25 May 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Default attachmentsDir from .vitest-attachements/ to .vitest/attachments/  -  by @MdSadiqMd in https://github.com/vitest-dev/vitest/issues/10186 <samp>(1ba73)</samp>
    • Remove sequential test/suite options in favor of concurrent  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10198 <samp>(9229f)</samp>
    • Represent locator as an object instead of a string  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10212 <samp>(80f07)</samp>
    • Inline expect package  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10221 <samp>(ad162)</samp>
    • Remove deprecated entry points  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10222 <samp>(994c6)</samp>
    • mocker: Deserialize automock as automock  -  by @nami8824 in https://github.com/vitest-dev/vitest/issues/10192 <samp>(2f892)</samp>
    • reporters: blob reporter and --merge-reports default to .vitest/blob/  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10232 <samp>(d22b0)</samp>

       ๐Ÿš€ Features

    • Expose default reporters through configDefaults.reporters  -  by @hi-ogawa and Claude Sonnet 4.6 in https://github.com/vitest-dev/vitest/issues/10219 <samp>(083f6)</samp>
    • Support merge reports for non-sharded multi-environment runs (take 2)  -  by @hi-ogawa, Claude Sonnet 4.6, Codex and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10031 <samp>(e60b2)</samp>
    • Add logger.formatError  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10268 <samp>(2c5f3)</samp>
    • browser: Provide project reference in ToMatchScreenshotResolvePath  -  by @macarie and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10138 <samp>(16654)</samp>
    • coverage: V8 to track node:child_process and node:worker_threads contexts  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9976 <samp>(9baa5)</samp>
    • junit-reporter: Add jest-junit-compatible naming options  -  by @neumaennl, neumaennl, @neumann4soft and Copilot in https://github.com/vitest-dev/vitest/issues/10189 <samp>(27393)</samp>

       ๐Ÿž Bug Fixes

    • Global sequence.concurrent: true with top-level test(..., { concurrent: false }) + depreacte sequential test API and options  -  by @hi-ogawa, Codex and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10194 <samp>(9387f)</samp>
    • Test tags options should overwrite inherited suite options + inherit suite options in task API  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10216 <samp>(457db)</samp>
    • Udpate optimize deps config  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10223 <samp>(95dc6)</samp>
    • browser:
      • Fix trace highlight of shadow dom on webdriverio  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10227 <samp>(b01af)</samp>
    • deps:
      • Update ivya to fix empty aria tree snapshot  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10218 <samp>(f7822)</samp>
    • runner:
      • Propagate chainable flags in describe.for  -  by @DORI2001, Dor Alagem and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10187 <samp>(db678)</samp>
      • Limit concurrency per task branch in addition to per leaf callbacks  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10179 <samp>(3112a)</samp>
    • snapshot:
      • Treat empty string as valid snapshot  -  by @mayrang and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10188 <samp>(e145d)</samp>
    • spy:
      • Support private method spy types  -  by @cyphercodes in https://github.com/vitest-dev/vitest/issues/10172 and https://github.com/vitest-dev/vitest/issues/10213 <samp>(628ab)</samp>
        View changes on GitHub
    Open source โ†’
  9. 5.0.0-beta.123 Apr 2026pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Replace loupe.inspect with pretty-format  -  by @hi-ogawa, Claude Sonnet 4.6 and Codex in https://github.com/vitest-dev/vitest/issues/9609 <samp>(3f802)</samp>
    • Remove quotes from string values in test.for/each title $ variable (take 2)  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10170 <samp>(04d37)</samp>
    • browser: Iframe scale  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9745 <samp>(b6398)</samp>
    • coverage: include/exclude globs too eager  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9818 <samp>(edacb)</samp>
    • expect: Fix toThrow("") behavior by reverting #6710  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9643 and https://github.com/vitest-dev/vitest/issues/6710 <samp>(6c3e4)</samp>

       ๐Ÿš€ Features

    • Add createReport and .vitest report directory convention  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9993 <samp>(72a6d)</samp>
    • browser:
      • Export aria tree utils  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10171 <samp>(c3423)</samp>
      • Support dom snapshot trace view  -  by @hi-ogawa, Claude Sonnet 4.6 and Codex in https://github.com/vitest-dev/vitest/issues/10102 <samp>(7eddd)</samp>

       ๐Ÿž Bug Fixes

    • snapshot: Fail test when snapshot assertion is used with test.fails  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10090 <samp>(e1aa7)</samp>
        View changes on GitHub
    Open source โ†’
  10. 4.1.1118 Aug 2026
    Release notes

       ๐Ÿž Bug Fixes

        View changes on GitHub
    Open source โ†’
  11. 4.1.106 Jul 2026
    Release notes

       ๐Ÿž Bug Fixes

    • browser: Check fs access in builtin commands [backport to v4]  -  by @hi-ogawa, Hiroshi Ogawa and OpenCode (claude-opus-4-8) in #10680 (5c18d)
    • vm: Fix external module resolve error with deps optimizer query for encoded URI [backport to v4]  -  by @SveLil and @hi-ogawa in #10661 (bae52)
        View changes on GitHub
    Open source โ†’
  12. 4.1.915 Jun 2026
    Release notes

    ๐Ÿž Bug Fixes

    • Fix importOriginal with optimizer and query import [backport to v4] - by Hiroshi Ogawa, David Harris, Codexand Vladimir in #10546 (a5180)
    • browser:
      • Wait for orchestrator readiness before resolving browser sessions [backport to v4] - by Vladimir and Sรฉamus O'Connor in #10555 (7fb29)
      • Wait for iframe tester readiness before preparing [backport to v4] - by Vladimir and Sรฉamus O'Connor in #10497 and #10556 (fbc62)
    • mocker:
      • Hoist vi.mock() for vite-plus/test imports [backport to v4] - by Hiroshi Ogawa, LongYinan, Claude Opus 4.8 and Vladimir in #10548 (2c955)
    • pool:
      • Prevent test run hang on worker crash [backport to v4] - by Ari Perkkiรถ and Jattioui Ismail in #10543 and #10564 (934b0)
    View changes on GitHub
    Open source โ†’
  13. 4.1.81 Jun 2026
    Release notes

       ๐Ÿž Bug Fixes

    • browser:
      • Disable client cdp API when allowWrite/allowExec: false [backport to v4]  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10450 <samp>(e4067)</samp>
      • Remove orphaned Playwright route when same module is mocked via multiple ids [backport to v4]  -  by @toxik and @Zelys-DFKH in https://github.com/vitest-dev/vitest/issues/10474 <samp>(675b4)</samp>
        View changes on GitHub
    Open source โ†’
  14. 4.1.720 May 2026
    Release notes

       ๐Ÿž Bug Fixes

    • runner: Limit concurrency per task branch in addition to per leaf callbacks (backport)  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10384 <samp>(4f0f2)</samp>
        View changes on GitHub
    Open source โ†’
  15. 4.1.611 May 2026
    Release notes

       ๐Ÿž Bug Fixes

    • browser: Provide project reference in ToMatchScreenshotResolvePath  -  by @macarie and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10138 <samp>(31882)</samp>
    • Global sequence.concurrent: true with top-level test(..., { concurrent: false }) + depreacte sequential test API and options  -  by @hi-ogawa, Codex and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10196 <samp>(2847d)</samp>
    • browser: Simplify orchestrator otel carrier  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10285 <samp>(18af9)</samp>

       ๐ŸŽ Performance

    • Stringify diff objects only once  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10276 <samp>(9f7b1)</samp>
        View changes on GitHub
    Open source โ†’
  16. 4.1.521 Apr 2026
    Release notes

       ๐Ÿš€ Experimental Features

    • coverage: Istanbul to support instrumenter option  -  by @BartWaardenburg and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10119 <samp>(0e0ff)</samp>

       ๐Ÿž Bug Fixes

    • --project negation excludes browser instances  -  by @felamaslen in https://github.com/vitest-dev/vitest/issues/10131 <samp>(9423d)</samp>
    • Project color label on html reporter  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10142 <samp>(596f7)</samp>
    • Fix vi.defineHelper called as object method  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10163 <samp>(122c2)</samp>
    • Alias agent reporter to minimal  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10157 <samp>(663b9)</samp>
    • Respect diff config options in soft assertions  -  by @Copilot, sheremet-va and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8696 <samp>(9787d)</samp>
    • Respect diff config options in soft assertions "  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8696 <samp>(7dc6d)</samp>
    • ast-collect: Recognize _vi_import prefix in static test discovery  -  by @Yejneshwar in https://github.com/vitest-dev/vitest/issues/10129 <samp>(32546)</samp>
    • coverage: Descriptive error message when reports directory is removed during test run  -  by @DaveT1991 and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/10117 <samp>(14133)</samp>
    • snapshot: Increase default snapshot max output length  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10150 <samp>(21e66)</samp>
    • ui: Fix jsx/tsx syntax highlight  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10152 <samp>(f1b1f)</samp>
    • web-worker: Support MessagePort objects referenced inside postMessage data  -  by @whitphx and Claude Opus 4.6 (1M context) in https://github.com/vitest-dev/vitest/issues/9927 and https://github.com/vitest-dev/vitest/issues/10124 <samp>(7ad7d)</samp>
    • api: Make test-specification options writable  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10154 <samp>(6abd5)</samp>
        View changes on GitHub
    Open source โ†’
  17. 4.1.49 Apr 2026
    Release notes

       ๐Ÿš€ Experimental Features

    • coverage:
      • Default to text reporter skipFull if agent detected  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10018 <samp>(53757)</samp>
    • experimental:
      • Expose assertion as a public field  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10095 <samp>(a120e)</samp>
      • Support aria snapshot  -  by @hi-ogawa, Claude Opus 4.6 (1M context), @AriPerkkio, Codex and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9668 <samp>(d4fbb)</samp>
    • reporter:
      • Add filterMeta option to json reporter  -  by @nami8824 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/10078 <samp>(b77de)</samp>

       ๐Ÿž Bug Fixes

    • Use "black" foreground for labeled terminal message to ensure contrast  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10076 <samp>(203f0)</samp>
    • Make expect(..., message) consistent as error message prefix  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10068 <samp>(a1b5f)</samp>
    • Do not hoist imports whose names match class properties .  -  by @SunsetFi in https://github.com/vitest-dev/vitest/issues/10093 and https://github.com/vitest-dev/vitest/issues/10094 <samp>(0fc4b)</samp>
    • browser: Spread user server options into browser Vite server in project  -  by @GoldStrikeArch in https://github.com/vitest-dev/vitest/issues/10049 <samp>(65c9d)</samp>
        View changes on GitHub
    Open source โ†’
  18. 4.1.37 Apr 2026
    Release notes

       ๐Ÿš€ Experimental Features

    • Add experimental.preParse flag  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10070 <samp>(78273)</samp>
    • Support browser.locators.exact option  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10013 <samp>(48799)</samp>
    • Add TestAttachment.bodyEncoding  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9969 <samp>(89ca0)</samp>
    • Support custom snapshot matcher  -  by @hi-ogawa, Claude Sonnet 4.6 and Codex in https://github.com/vitest-dev/vitest/issues/9973 <samp>(59b0e)</samp>

       ๐Ÿž Bug Fixes

    • Advance fake timers with expect.poll interval  -  by @hi-ogawa and Claude Sonnet 4.6 in https://github.com/vitest-dev/vitest/issues/10022 <samp>(3f5bf)</samp>
    • Add @vitest/coverage-v8 and @vitest/coverage-istanbul as optional dependency  -  by @alan-agius4 in https://github.com/vitest-dev/vitest/issues/10025 <samp>(146d4)</samp>
    • Fix defineHelper for webkit async stack trace + update playwright 1.59.0  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/10036 <samp>(5a5fa)</samp>
    • Fix suite hook throwing errors for unused auto test-scoped fixture  -  by @hi-ogawa and Claude Sonnet 4.6 in https://github.com/vitest-dev/vitest/issues/10035 <samp>(39865)</samp>
    • expect:
      • Remove JestExtendError.context from verbose error reporting  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9983 <samp>(66751)</samp>
      • Don't leak "runner" types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10004 <samp>(ec204)</samp>
    • snapshot:
      • Fix flagging obsolete snapshots for snapshot properties mismatch  -  by @hi-ogawa and Claude Sonnet 4.6 in https://github.com/vitest-dev/vitest/issues/9986 <samp>(6b869)</samp>
      • Export custom snapshot matcher helper from vitest  -  by @hi-ogawa and Codex in https://github.com/vitest-dev/vitest/issues/10042 <samp>(691d3)</samp>
    • ui:
      • Don't leak vite types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/10005 <samp>(fdff1)</samp>
    • vm:
      • Fix external module resolve error with deps optimizer query  -  by @hi-ogawa and Claude Sonnet 4.6 in https://github.com/vitest-dev/vitest/issues/10024 <samp>(9dbf4)</samp>
        View changes on GitHub
    Open source โ†’
  19. 4.1.226 Mar 2026
    Release notes

    This release bumps Vitest's flatted version and removes version pinning to resolve flatted's CVE related issues (https://github.com/vitest-dev/vitest/issues/9975).

       ๐Ÿž Bug Fixes

    • Don't resolve setupFiles from parent directory  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9960 <samp>(7aa93)</samp>
    • Ensure sequential mock/unmock resolution  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9830 <samp>(7c065)</samp>
    • browser: Take failure screenshot if toMatchScreenshot can't capture a stable screenshot  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9847 <samp>(faace)</samp>
    • coverage: Correct coverageConfigDefaults values and types  -  by @Arthie in https://github.com/vitest-dev/vitest/issues/9940 <samp>(b3c99)</samp>
    • pretty-format: Fix output limit over counting  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9965 <samp>(d3b7a)</samp>
    • Disable colors if agent is detected  -  by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9851 <samp>(6f97b)</samp>
        View changes on GitHub
    Open source โ†’
  20. 4.1.123 Mar 2026
    Release notes

       ๐Ÿš€ Features

    • experimental:
      • Expose matchesTags to test if the current filter matches tags  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9913 <samp>(eec53)</samp>
      • Introduce experimental.vcsProvider  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9928 <samp>(56115)</samp>

       ๐Ÿž Bug Fixes

    • Mark TestProject.testFilesList internal properly  -  by @sapphi-red in https://github.com/vitest-dev/vitest/issues/9867 <samp>(54f26)</samp>
    • Detect fixture that returns without calling use  -  by @oilater in https://github.com/vitest-dev/vitest/issues/9831 and https://github.com/vitest-dev/vitest/issues/9861 <samp>(633ae)</samp>
    • Drop vite 8.beta support  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9862 <samp>(b78f5)</samp>
    • Type regression in vi.mocked() static class methods  -  by @purepear and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9857 <samp>(90926)</samp>
    • Properly re-evaluate actual modules of mocked external  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9898 <samp>(ae5ec)</samp>
    • Preserve coverage report when html reporter overlaps  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9889 <samp>(2d81a)</samp>
    • Provide vi.advanceTimers to the preview provider  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9891 <samp>(1bc3e)</samp>
    • Don't leak event listener in playwright provider  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9910 <samp>(d9355)</samp>
    • Open browser in --standalone mode without running tests  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9911 <samp>(e78ad)</samp>
    • Guard disposable and optional body  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9912 <samp>(6fdb2)</samp>
    • Resolve retry.condition RegExp serialization issue  -  by @nstepien and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9942 <samp>(7b605)</samp>
    • collect:
      • Don't treat extra props on test return as tests  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9871 <samp>(141e7)</samp>
    • coverage:
      • Simplify provider types  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9931 <samp>(aaf9f)</samp>
      • Load built-in provider without module runner  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9939 <samp>(bf892)</samp>
    • expect:
      • Soft assertions continue after .resolves/.rejects promise errors  -  by @mixelburg, Maks Pikov, Claude Opus 4.6 (1M context) and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9843 <samp>(6d74b)</samp>
      • Fix sinon-chai style API  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9943 <samp>(0f08d)</samp>
    • pretty-format:
      • Limit output for large object  -  by @hi-ogawa and Claude Opus 4.6 (1M context) in https://github.com/vitest-dev/vitest/issues/9949 <samp>(0d5f9)</samp>
        View changes on GitHub
    Open source โ†’
  21. 4.1.012 Mar 2026
    Release notes

    Vitest 4.1 is out!

    This release page lists all changes made to the project during the 4.1 beta. To get a review of all the new features, read our blog post.

       ๐Ÿš€ Features

    • Return a disposable from doMock()  -  by @kirkwaiblinger in https://github.com/vitest-dev/vitest/issues/9332 <samp>(e3e65)</samp>
    • Added chai style assertions  -  by @ronnakamoto and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8842 <samp>(841df)</samp>
    • Update to sinon/fake-timers v15 and add setTickMode to timer controls  -  by @atscott and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8726 <samp>(4b480)</samp>
    • Expose matcher types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9448 <samp>(3e4b9)</samp>
    • Add toTestSpecification to reported tasks  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9464 <samp>(1a470)</samp>
    • Show a warning if vi.mock or vi.hoisted are declared outside of top level of the module  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9387 <samp>(5db54)</samp>
    • Track and display expectedly failed tests (.fails) in UI and CLI  -  by @Copilot, sheremet-va and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9476 <samp>(77d75)</samp>
    • Support tags  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9478 <samp>(de7c8)</samp>
    • Implement aroundEach and aroundAll hooks  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9450 <samp>(2a8cb)</samp>
    • Stabilize experimental features  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9529 <samp>(b5fd2)</samp>
    • Accept new or all in --update flag  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9543 <samp>(a5acf)</samp>
    • Support meta in test options  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9535 <samp>(7d622)</samp>
    • Support type inference with a new test.extend syntax  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9550 <samp>(e5385)</samp>
    • Support vite 8 beta, fix type issues in the config with different vite versions  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9587 <samp>(99028)</samp>
    • Add assertion helper to hide internal stack traces  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9594 <samp>(eeb0a)</samp>
    • Store failure screenshots using artifacts API  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9588 <samp>(24603)</samp>
    • Allow vitest list to statically collect tests instead of running files to collect them  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9630 <samp>(7a8e7)</samp>
    • Add --detect-async-leaks  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9528 <samp>(c594d)</samp>
    • Implement mockThrow and mockThrowOnce  -  by @thor-juhasz and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9512 <samp>(61917)</samp>
    • Support update: "none" and add docs about snapshots behavior on CI  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9700 <samp>(05f18)</samp>
    • Support playwright launchOptions with connectOptions  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9702 <samp>(f0ff1)</samp>
    • Add page/locator.mark API to enhance playwright trace  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9652 <samp>(d0ee5)</samp>
    • api:
      • Support tests starting or ending with test in experimental_parseSpecification  -  by @jgillick and Jeremy Gillick in https://github.com/vitest-dev/vitest/issues/9235 <samp>(2f367)</samp>
      • Add filters to createSpecification  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9336 <samp>(c8e6c)</samp>
      • Expose runTestFiles as alternative to runTestSpecifications  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9443 <samp>(43d76)</samp>
      • Add allowWrite and allowExec options to api  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9350 <samp>(20e00)</samp>
      • Allow passing down test cases to toTestSpecification  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9627 <samp>(6f17d)</samp>
    • browser:
      • Add userEvent.wheel API  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9188 <samp>(66080)</samp>
      • Add filterNode option to prettyDOM for filtering browser assertion error output  -  by @Copilot, sheremet-va and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9475 <samp>(d3220)</samp>
      • Support playwright persistent context  -  by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9229 <samp>(f865d)</samp>
      • Added detailsPanelPosition option and button  -  by @shairez in https://github.com/vitest-dev/vitest/issues/9525 <samp>(c8a31)</samp>
      • Use BlazeDiff instead of pixelmatch  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9514 <samp>(30936)</samp>
      • Add findElement and enable strict mode in webdriverio and preview  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9677 <samp>(c3f37)</samp>
    • cli:
      • Add @bomb.sh/tab completions  -  by @AmirSa12 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8639 <samp>(200f3)</samp>
    • coverage:
      • Support ignore start/stop ignore hints  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9204 <samp>(e59c9)</samp>
      • Add coverage.changed option to report only changed files  -  by @kykim00 and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9521 <samp>(1d939)</samp>
    • experimental:
      • Add onModuleRunner hook to worker.init  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9286 <samp>(e977f)</samp>
      • Option to disable the module runner  -  by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9210 <samp>(9be61)</samp>
      • Add importDurations: { limit, print } options  -  by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9401 <samp>(7e10f)</samp>
      • Add print and fail thresholds for importDurations  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9533 <samp>(3f7a5)</samp>
    • fixtures:
      • Pass down file context to beforeAll/afterAll  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9572 <samp>(c8339)</samp>
    • reporters:
      • Add agent reporter to reduce ai agent token usage  -  by @cpojer in https://github.com/vitest-dev/vitest/issues/9779 <samp>(3e9e0)</samp>
    • runner:
      • Enhance retry options  -  by @MazenSamehR, Matan Shavit, @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9370 <samp>(9e4cf)</samp>
    • ui:
      • Allow run individual test/suites  -  by @userquin in https://github.com/vitest-dev/vitest/issues/9465 <samp>(73b10)</samp>
      • Add project filter/sort support  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8689 <samp>(0c7ea)</samp>
      • Add duration sorting to explorer  -  by @julianhahn and @cursoragent in https://github.com/vitest-dev/vitest/issues/9603 <samp>(209b1)</samp>
      • Implement filter for slow tests  -  by @DerYeger and @userquin in https://github.com/vitest-dev/vitest/issues/9705 <samp>(8880c)</samp>
    • vitest:
      • Add run summary in GitHub Actions Reporter  -  by @macarie and jhnance in https://github.com/vitest-dev/vitest/issues/9579 <samp>(96bfc)</samp>

       ๐Ÿž Bug Fixes

    • Deprecate several vitest/* entry points  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9347 <samp>(fd459)</samp>
    • Use meta.url in createRequire  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9441 <samp>(e3422)</samp>
    • Preact browser mode init example of render function not async  -  by @WuMingDao in https://github.com/vitest-dev/vitest/issues/9375 <samp>(2bea5)</samp>
    • Deprecate unused types in matcher context  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9449 <samp>(20f87)</samp>
    • Handle external/noExternal during configEnvironment hook  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9508 <samp>(59ea2)</samp>
    • Replace default ssr environment runner with Vitest server module runner  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9506 <samp>(cd5db)</samp>
    • Propagate experimental CLI options to child projects  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9531 <samp>(b624f)</samp>
    • Show a warning when browser.isolate is used  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9410 <samp>(3d48e)</samp>
    • Fix vi.mock({ spy: true }) node v8 coverage  -  by @hi-ogawa, hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9541 <samp>(687b6)</samp>
    • Don't show internal ssr handler in errors  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9547 <samp>(76c43)</samp>
    • Close vitest if it failed to start  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9573 <samp>(728ba)</samp>
    • Fix ssr environment runner in project  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9584 <samp>(09006)</samp>
    • Trim trailing white spaces in code block  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9591 <samp>(f78be)</samp>
    • Support inline snapshot inside test.for/each  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9590 <samp>(615fd)</samp>
    • Apply source maps for external module stack trace  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9152 <samp>(79e20)</samp>
    • Remove the .name from statically collected test  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9596 <samp>(b66ff)</samp>
    • Don't suppress warnings on pnp  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9602 <samp>(89cbd)</samp>
    • Support snapshot with expect.soft  -  by @iumehara, @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9231 <samp>(3eb2c)</samp>
    • Log seed when only sequence.shuffle.tests is enabled  -  by @kaigritun, Kai Gritun and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9576 <samp>(8182b)</samp>
    • Externalize expect/src/utils from vitest  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9616 <samp>(48739)</samp>
    • Ignore test.override during static collection  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9620 <samp>(09174)</samp>
    • Increase stacktrace limit for --detect-async-leaks  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9638 <samp>(9fd4c)</samp>
    • Hanging-reporter link in cli  -  by @flx-sta in https://github.com/vitest-dev/vitest/issues/9649 <samp>(7c103)</samp>
    • Fix teardown timeout of aroundEach/All when inner aroundEach/All throws  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9657 <samp>(4ec6c)</samp>
    • Fix ui mode / html reporter and coverage integration  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9626 <samp>(86fad)</samp>
    • Don't continue when aroundEach/All setup timed out  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9670 <samp>(bb013)</samp>
    • Align VitestRunnerConfig optional fields with SerializedConfig  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9661 <samp>(79520)</samp>
    • Handle Symbol values in format utility  -  by @nami8824 in https://github.com/vitest-dev/vitest/issues/9658 <samp>(0583f)</samp>
    • Deprecate toBe* spy assertions in favor of toHaveBeen* (and toThrowError)  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9665 <samp>(4d390)</samp>
    • Don't propagate nested aroundEach/All errors but aggregate them on runner  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9673 <samp>(b6365)</samp>
    • Show a better error if there is a pending dynamic import  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9676 <samp>(7ef5c)</samp>
    • Preserve stack trace of resolves/rejects chained assertion error  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9679 <samp>(c6151)</samp>
    • Handle module-sync condition in vmThreads/vmForks require  -  by @lesleh in https://github.com/vitest-dev/vitest/issues/9650 and https://github.com/vitest-dev/vitest/issues/9651 <samp>(bb203)</samp>
    • Hooks should respect maxConcurrency  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9653 <samp>(16d13)</samp>
    • Recursively autospy module object  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9687 <samp>(695a8)</samp>
    • Remove trailing spaces from diff error log  -  by @hi-ogawa and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9680 <samp>(395d1)</samp>
    • Respect project resolve.conditions for externals  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9717 <samp>(1d498)</samp>
    • Use object for WeakMap instead of a symbol to support webcontainers  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9731 <samp>(c5225)</samp>
    • Fix re-mocking virtual module  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9748 <samp>(3cbbb)</samp>
    • Cancelling should stop current test immediately  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9729 <samp>(0cb2f)</samp>
    • Make mockObject change backwards compatible  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9744 <samp>(84c69)</samp>
    • Fix URL.name on jsdom  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9767 <samp>(031f3)</samp>
    • Save and restore module graph in blob reporter  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9740 <samp>(84355)</samp>
    • Don't silence reporter errors from test runtime events handler in normal run and --merge-reports  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9727 <samp>(4072d)</samp>
    • Fix vi.importActual() for virtual modules  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9772 <samp>(1e89e)</samp>
    • Throw FixtureAccessError if suite hook accesses undefined fixture  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9786 <samp>(fc2ce)</samp>
    • Allow hyphens in project config file name pattern  -  by @Koutaro-Hanabusa and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9760 <samp>(33e96)</samp>
    • Manual and redirect mock shouldn't load or transform original module  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9774 <samp>(a8216)</samp>
    • hideSkippedTests should not hide test.todo  -  by @oilater in https://github.com/vitest-dev/vitest/issues/9562 and https://github.com/vitest-dev/vitest/issues/9781 <samp>(8181e)</samp>
    • Allow catch/finally for async assertion  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9827 <samp>(031f0)</samp>
    • Resolve fixture overrides from test's suite in beforeEach hooks  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9826 <samp>(99e52)</samp>
    • Use isAgent check, not just TTY, for watch mode  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9841 <samp>(c3cac)</samp>
    • Use performance.now to measure test timeout duration  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9795 <samp>(f48a6)</samp>
    • Correctly identify concurrent test during static analysis  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9846 <samp>(1de0a)</samp>
    • browser:
      • Avoid updating screenshots when toMatchScreenshot passes  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9289 <samp>(46aab)</samp>
      • Hide injected data-testid attributes  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9503 <samp>(c8d2c)</samp>
      • Throw an error if iframe was reloaded  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9516 <samp>(73a81)</samp>
      • Encode projectName in browser client URL  -  by @dkkim0122 in https://github.com/vitest-dev/vitest/issues/9523 <samp>(5b164)</samp>
      • Don't take failure screenshot if tests have artifacts created by toMatchScreenshot  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9552 <samp>(83ca0)</samp>
      • Remove --remote-debugging-address from chrome args  -  by @hi-ogawa and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9712 <samp>(f09bb)</samp>
      • Make sure userEvent actions support ensureAwaited  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9732 <samp>(97685)</samp>
      • Types of getCDPSession and cdp()  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9716 <samp>(689a2)</samp>
      • Skip esbuild.legalComments when using rolldown-vite  -  by @Copilot, hi-ogawa and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9803 <samp>(3505f)</samp>
    • chai:
      • Don't allow deepEqual in the config because it's not serializable  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9666 <samp>(9ee99)</samp>
    • coverage:
      • Infer transform mode for uncovered files  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9435 <samp>(f3967)</samp>
      • thresholds.autoUpdate to preserve ending whitespace  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9436 <samp>(7e534)</samp>
    • deps:
      • Update all non-major dependencies  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9192 <samp>(90c30)</samp>
      • Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/9485 <samp>(c0118)</samp>
      • Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/9567 <samp>(13c9e)</samp>
    • docs:
      • Fix old /config/#option hash links causing hydration errors  -  by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9610 <samp>(a603c)</samp>
    • expect:
      • toMatchObject(Map/Set) should expect Map/Set on left hand side  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9532 <samp>(381da)</samp>
      • Fix objectContaining with proxy  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9554 <samp>(7ce34)</samp>
      • Support arbitrary value equality for toThrow and make Error detection robust  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9570 <samp>(de215)</samp>
    • mock:
      • Inject helpers after hashbang if present  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9545 <samp>(65432)</samp>
    • mocker:
      • Update vite's peer dependency range  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9808 <samp>(36f9a)</samp>
    • reporter:
      • dot reporter leaves pending tests  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9684 <samp>(4d793)</samp>
    • runner:
      • Mark repeated tests as finished on last run  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9707 <samp>(cc735)</samp>
    • spy:
      • Support deep partial in vi.mocked  -  by @j2h30728 in https://github.com/vitest-dev/vitest/issues/8152 and https://github.com/vitest-dev/vitest/issues/9493 <samp>(71cb5)</samp>
      • Fallback to object accessor if descriptor's value is undefined  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9511 <samp>(6f181)</samp>
      • Throw correct errors when shorthand methods are used on a class  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9513 <samp>(5d0fd)</samp>
    • types:
      • bench.reporters no longer gives type errors when passing file name string paths  -  by @Bertie690 in https://github.com/vitest-dev/vitest/issues/9695 <samp>(093c8)</samp>
    • ui:
      • Process artifact attachments when generating HTML reporter  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9472 <samp>(96eb9)</samp>
      • Don't fail if --ui and --root are specified together  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9536 <samp>(d9305)</samp>

       ๐ŸŽ Performance

    • pretty-format: Combine DOMElement plugins  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9581 <samp>(da85a)</samp>
        View changes on GitHub
    Open source โ†’
  22. 4.1.0-beta.65 Mar 2026pre-release
    Release notes

       ๐Ÿš€ Features

    • Add page/locator.mark API to enhance playwright trace  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9652 <samp>(d0ee5)</samp>
    • vitest: Add run summary in GitHub Actions Reporter  -  by @macarie and jhnance in https://github.com/vitest-dev/vitest/issues/9579 <samp>(96bfc)</samp>

       ๐Ÿž Bug Fixes

    • Fix URL.name on jsdom  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9767 <samp>(031f3)</samp>
    • Save and restore module graph in blob reporter  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9740 <samp>(84355)</samp>
    • Don't silence reporter errors from test runtime events handler in normal run and --merge-reports  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9727 <samp>(4072d)</samp>
    • Fix vi.importActual() for virtual modules  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9772 <samp>(1e89e)</samp>
    • Throw FixtureAccessError if suite hook accesses undefined fixture  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9786 <samp>(fc2ce)</samp>
    • Allow hyphens in project config file name pattern  -  by @Koutaro-Hanabusa and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9760 <samp>(33e96)</samp>
    • Manual and redirect mock shouldn't load or transform original module  -  by @hi-ogawa and Claude Opus 4.6 in https://github.com/vitest-dev/vitest/issues/9774 <samp>(a8216)</samp>
    • hideSkippedTests should not hide test.todo  -  by @oilater in https://github.com/vitest-dev/vitest/issues/9562 and https://github.com/vitest-dev/vitest/issues/9781 <samp>(8181e)</samp>
    • browser: Types of getCDPSession and cdp()  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9716 <samp>(689a2)</samp>
        View changes on GitHub
    Open source โ†’
  23. 4.1.0-beta.526 Feb 2026pre-release
    Release notes

       ๐Ÿš€ Features

    • Implement mockThrow and mockThrowOnce  -  by @thor-juhasz and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9512 <samp>(61917)</samp>
    • Support update: "none" and add docs about snapshots behavior on CI  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9700 <samp>(05f18)</samp>
    • Support playwright launchOptions with connectOptions  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9702 <samp>(f0ff1)</samp>
    • browser:
      • Use BlazeDiff instead of pixelmatch  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9514 <samp>(30936)</samp>
      • Add findElement and enable strict mode in webdriverio and preview  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9677 <samp>(c3f37)</samp>
    • coverage:
      • Add coverage.changed option to report only changed files  -  by @kykim00 and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9521 <samp>(1d939)</samp>
    • ui:
      • Implement filter for slow tests  -  by @DerYeger and @userquin in https://github.com/vitest-dev/vitest/issues/9705 <samp>(8880c)</samp>

       ๐Ÿž Bug Fixes

    • Don't propagate nested aroundEach/All errors but aggregate them on runner  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9673 <samp>(b6365)</samp>
    • Show a better error if there is a pending dynamic import  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9676 <samp>(7ef5c)</samp>
    • Preserve stack trace of resolves/rejects chained assertion error  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9679 <samp>(c6151)</samp>
    • Handle module-sync condition in vmThreads/vmForks require  -  by @lesleh in https://github.com/vitest-dev/vitest/issues/9650 and https://github.com/vitest-dev/vitest/issues/9651 <samp>(bb203)</samp>
    • Hooks should respect maxConcurrency  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9653 <samp>(16d13)</samp>
    • Recursively autospy module object  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9687 <samp>(695a8)</samp>
    • Remove trailing spaces from diff error log  -  by @hi-ogawa and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9680 <samp>(395d1)</samp>
    • Respect project resolve.conditions for externals  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9717 <samp>(1d498)</samp>
    • Use object for WeakMap instead of a symbol to support webcontainers  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9731 <samp>(c5225)</samp>
    • Fix re-mocking virtual module  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9748 <samp>(3cbbb)</samp>
    • Cancelling should stop current test immediately  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9729 <samp>(0cb2f)</samp>
    • Make mockObject change backwards compatible  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9744 <samp>(84c69)</samp>
    • browser:
      • Remove --remote-debugging-address from chrome args  -  by @hi-ogawa and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9712 <samp>(f09bb)</samp>
      • Make sure userEvent actions support ensureAwaited  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9732 <samp>(97685)</samp>
    • reporter:
      • dot reporter leaves pending tests  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9684 <samp>(4d793)</samp>
    • runner:
      • Mark repeated tests as finished on last run  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9707 <samp>(cc735)</samp>
    • types:
      • bench.reporters no longer gives type errors when passing file name string paths  -  by @Bertie690 in https://github.com/vitest-dev/vitest/issues/9695 <samp>(093c8)</samp>
        View changes on GitHub
    Open source โ†’
  24. 4.1.0-beta.416 Feb 2026pre-release
    Release notes

       ๐Ÿš€ Features

    • Support type inference with a new test.extend syntax  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9550 <samp>(e5385)</samp>
    • Support vite 8 beta, fix type issues in the config with different vite versions  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9587 <samp>(99028)</samp>
    • Add assertion helper to hide internal stack traces  -  by @hi-ogawa and Claude Sonnet 4.5 in https://github.com/vitest-dev/vitest/issues/9594 <samp>(eeb0a)</samp>
    • Store failure screenshots using artifacts API  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9588 <samp>(24603)</samp>
    • Allow vitest list to statically collect tests instead of running files to collect them  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9630 <samp>(7a8e7)</samp>
    • Add --detect-async-leaks  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9528 <samp>(c594d)</samp>
    • api: Allow passing down test cases to toTestSpecification  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9627 <samp>(6f17d)</samp>
    • fixtures: Pass down file context to beforeAll/afterAll  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9572 <samp>(c8339)</samp>
    • ui: Add duration sorting to explorer  -  by @julianhahn and @cursoragent in https://github.com/vitest-dev/vitest/issues/9603 <samp>(209b1)</samp>

       ๐Ÿž Bug Fixes

    • Close vitest if it failed to start  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9573 <samp>(728ba)</samp>
    • Fix ssr environment runner in project  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9584 <samp>(09006)</samp>
    • Trim trailing white spaces in code block  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9591 <samp>(f78be)</samp>
    • Support inline snapshot inside test.for/each  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9590 <samp>(615fd)</samp>
    • Apply source maps for external module stack trace  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9152 <samp>(79e20)</samp>
    • Remove the .name from statically collected test  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9596 <samp>(b66ff)</samp>
    • Don't suppress warnings on pnp  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9602 <samp>(89cbd)</samp>
    • Support snapshot with expect.soft  -  by @iumehara, @hi-ogawa and Claude Sonnet 4.5 in https://github.com/vitest-dev/vitest/issues/9231 <samp>(3eb2c)</samp>
    • Log seed when only sequence.shuffle.tests is enabled  -  by @kaigritun, Kai Gritun and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9576 <samp>(8182b)</samp>
    • Externalize expect/src/utils from vitest  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9616 <samp>(48739)</samp>
    • Ignore test.override during static collection  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9620 <samp>(09174)</samp>
    • Increase stacktrace limit for --detect-async-leaks  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9638 <samp>(9fd4c)</samp>
    • Hanging-reporter link in cli  -  by @flx-sta in https://github.com/vitest-dev/vitest/issues/9649 <samp>(7c103)</samp>
    • Fix teardown timeout of aroundEach/All when inner aroundEach/All throws  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9657 <samp>(4ec6c)</samp>
    • Fix ui mode / html reporter and coverage integration  -  by @hi-ogawa and Claude Sonnet 4.5 in https://github.com/vitest-dev/vitest/issues/9626 <samp>(86fad)</samp>
    • Don't continue when aroundEach/All setup timed out  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9670 <samp>(bb013)</samp>
    • Align VitestRunnerConfig optional fields with SerializedConfig  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9661 <samp>(79520)</samp>
    • Handle Symbol values in format utility  -  by @nami8824 in https://github.com/vitest-dev/vitest/issues/9658 <samp>(0583f)</samp>
    • Deprecate toBe* spy assertions in favor of toHaveBeen* (and toThrowError)  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9665 <samp>(4d390)</samp>
    • chai: Don't allow deepEqual in the config because it's not serializable  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9666 <samp>(9ee99)</samp>
    • docs: Fix old /config/#option hash links causing hydration errors  -  by @hi-ogawa, Claude Sonnet 4.5 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9610 <samp>(a603c)</samp>
    • expect: Support arbitrary value equality for toThrow and make Error detection robust  -  by @hi-ogawa and Claude Sonnet 4.5 in https://github.com/vitest-dev/vitest/issues/9570 <samp>(de215)</samp>
    • ui: Don't fail if --ui and --root are specified together  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9536 <samp>(d9305)</samp>

       ๐ŸŽ Performance

    • pretty-format: Combine DOMElement plugins  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9581 <samp>(da85a)</samp>
        View changes on GitHub
    Open source โ†’
  25. 4.1.0-beta.32 Feb 2026pre-release
    Release notes

       ๐Ÿš€ Features

    • Implement aroundEach and aroundAll hooks  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9450 <samp>(2a8cb)</samp>
    • Stabilize experimental features  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9529 <samp>(b5fd2)</samp>
    • Accept new or all in --update flag  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9543 <samp>(a5acf)</samp>
    • Support meta in test options  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9535 <samp>(7d622)</samp>
    • api:
      • Add allowWrite and allowExec options to api  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9350 <samp>(20e00)</samp>
    • browser:
      • Added detailsPanelPosition option and button  -  by @shairez in https://github.com/vitest-dev/vitest/issues/9525 <samp>(c8a31)</samp>
    • experimental:
      • Add importDurations: { limit, print } options  -  by @hi-ogawa, Claude Opus 4.5 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9401 <samp>(7e10f)</samp>
      • Add print and fail thresholds for importDurations  -  by @hi-ogawa and Claude Opus 4.5 in https://github.com/vitest-dev/vitest/issues/9533 <samp>(3f7a5)</samp>

       ๐Ÿž Bug Fixes

    • Handle external/noExternal during configEnvironment hook  -  by @hi-ogawa and Claude Opus 4.5 in https://github.com/vitest-dev/vitest/issues/9508 <samp>(59ea2)</samp>
    • Replace default ssr environment runner with Vitest server module runner  -  by @hi-ogawa and Claude Opus 4.5 in https://github.com/vitest-dev/vitest/issues/9506 <samp>(cd5db)</samp>
    • Propagate experimental CLI options to child projects  -  by @hi-ogawa and Claude Opus 4.5 in https://github.com/vitest-dev/vitest/issues/9531 <samp>(b624f)</samp>
    • Show a warning when browser.isolate is used  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9410 <samp>(3d48e)</samp>
    • Fix vi.mock({ spy: true }) node v8 coverage  -  by @hi-ogawa, hi-ogawa and Claude Opus 4.5 in https://github.com/vitest-dev/vitest/issues/9541 <samp>(687b6)</samp>
    • Don't show internal ssr handler in errors  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9547 <samp>(76c43)</samp>
    • browser:
      • Hide injected data-testid attributes  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9503 <samp>(c8d2c)</samp>
      • Throw an error if iframe was reloaded  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9516 <samp>(73a81)</samp>
      • Encode projectName in browser client URL  -  by @dkkim0122 in https://github.com/vitest-dev/vitest/issues/9523 <samp>(5b164)</samp>
      • Don't take failure screenshot if tests have artifacts created by toMatchScreenshot  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9552 <samp>(83ca0)</samp>
    • deps:
      • Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/9485 <samp>(c0118)</samp>
      • Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/9567 <samp>(13c9e)</samp>
    • expect:
      • toMatchObject(Map/Set) should expect Map/Set on left hand side  -  by @hi-ogawa and Claude Opus 4.5 in https://github.com/vitest-dev/vitest/issues/9532 <samp>(381da)</samp>
      • Fix objectContaining with proxy  -  by @hi-ogawa and Claude Opus 4.5 in https://github.com/vitest-dev/vitest/issues/9554 <samp>(7ce34)</samp>
    • mock:
      • Inject helpers after hashbang if present  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9545 <samp>(65432)</samp>
    • spy:
      • Fallback to object accessor if descriptor's value is undefined  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9511 <samp>(6f181)</samp>
      • Throw correct errors when shorthand methods are used on a class  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9513 <samp>(5d0fd)</samp>
        View changes on GitHub
    Open source โ†’
  26. 4.1.0-beta.222 Jan 2026pre-release
    Release notes

       ๐Ÿš€ Features

    • Expose matcher types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9448 <samp>(3e4b9)</samp>
    • Add toTestSpecification to reported tasks  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9464 <samp>(1a470)</samp>
    • Show a warning if vi.mock or vi.hoisted are declared outside of top level of the module  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9387 <samp>(5db54)</samp>
    • Track and display expectedly failed tests (.fails) in UI and CLI  -  by @Copilot, sheremet-va and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9476 <samp>(77d75)</samp>
    • Support tags  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9478 <samp>(de7c8)</samp>
    • browser:
      • Add filterNode option to prettyDOM for filtering browser assertion error output  -  by @Copilot, sheremet-va and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9475 <samp>(d3220)</samp>
      • Support playwright persistent context  -  by @hi-ogawa, Claude Opus 4.5 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9229 <samp>(f865d)</samp>
    • cli:
      • Add @bomb.sh/tab completions  -  by @AmirSa12 and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8639 <samp>(200f3)</samp>
    • experimental:
      • Option to disable the module runner  -  by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9210 <samp>(9be61)</samp>
    • ui:
      • Allow run individual test/suites  -  by @userquin in https://github.com/vitest-dev/vitest/issues/9465 <samp>(73b10)</samp>
      • Add project filter/sort support  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8689 <samp>(0c7ea)</samp>

       ๐Ÿž Bug Fixes

    • Deprecate unused types in matcher context  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9449 <samp>(20f87)</samp>
    • coverage: thresholds.autoUpdate to preserve ending whitespace  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9436 <samp>(7e534)</samp>
    • spy: Support deep partial in vi.mocked  -  by @j2h30728 in https://github.com/vitest-dev/vitest/issues/8152 and https://github.com/vitest-dev/vitest/issues/9493 <samp>(71cb5)</samp>
    • ui: Process artifact attachments when generating HTML reporter  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9472 <samp>(96eb9)</samp>
        View changes on GitHub
    Open source โ†’
  27. 4.1.0-beta.114 Jan 2026pre-release
    Release notes

       ๐Ÿš€ Features

    • Return a disposable from doMock()  -  by @kirkwaiblinger in https://github.com/vitest-dev/vitest/issues/9332 <samp>(e3e65)</samp>
    • Added chai style assertions for spying  -  by @ronnakamoto and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8842 <samp>(841df)</samp>
    • Update to sinon/fake-timers v15 and add setTickMode to timer controls  -  by @atscott and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8726 <samp>(4b480)</samp>
    • api:
      • Support tests starting or ending with test in experimental_parseSpecification  -  by @jgillick and Jeremy Gillick in https://github.com/vitest-dev/vitest/issues/9235 <samp>(2f367)</samp>
      • Add filters to createSpecification  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9336 <samp>(c8e6c)</samp>
      • Expose runTestFiles as alternative to runTestSpecifications  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9443 <samp>(43d76)</samp>
    • browser:
      • Add userEvent.wheel API  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9188 <samp>(66080)</samp>
    • coverage:
      • Support ignore start/stop ignore hints  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9204 <samp>(e59c9)</samp>
    • experimental:
      • Add onModuleRunner hook to worker.init  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9286 <samp>(e977f)</samp>
    • runner:
      • Enhance retry options  -  by @MazenSamehR, Matan Shavit, @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9370 <samp>(9e4cf)</samp>

       ๐Ÿž Bug Fixes

    • Deprecate several vitest/* entry points  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9347 <samp>(fd459)</samp>
    • Use meta.url in createRequire  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9441 <samp>(e3422)</samp>
    • Preact browser mode init example of render function not async  -  by @WuMingDao in https://github.com/vitest-dev/vitest/issues/9375 <samp>(2bea5)</samp>
    • browser: Avoid updating screenshots when toMatchScreenshot passes  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9289 <samp>(46aab)</samp>
    • coverage: Infer transform mode for uncovered files  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9435 <samp>(f3967)</samp>
    • deps: Update all non-major dependencies  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9192 <samp>(90c30)</samp>
        View changes on GitHub
    Open source โ†’
  28. 4.0.1822 Jan 2026
    Release notes

       ๐Ÿš€ Experimental Features

    • experimental: Add onModuleRunner hook to worker.init  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9286 <samp>(ea837)</samp>

       ๐Ÿž Bug Fixes

    • Use meta.url in createRequire  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9441 <samp>(e0572)</samp>
    • browser: Hide injected data-testid attributes  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9503 <samp>(f8989)</samp>
    • ui: Process artifact attachments when generating HTML reporter  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9472 <samp>(22543)</samp>
        View changes on GitHub
    Open source โ†’
  29. 4.0.1712 Jan 2026
    Release notes

       ๐Ÿš€ Experimental Features

    • Support openTelemetry for browser mode  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9180 <samp>(1ec3a)</samp>
    • Support TRACEPARENT and TRACESTATE environment variables for OpenTelemetry context propagation  -  by @Copilot, hi-ogawa and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9295 <samp>(876cb)</samp>

       ๐Ÿž Bug Fixes

    • Improve asymmetric matcher diff readability by unwrapping container matchers  -  by @Copilot, sheremet-va, hi-ogawa and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9330 <samp>(b2ec7)</samp>
    • Improve runner error when importing outside of test context  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9335 <samp>(2dd3d)</samp>
    • Replace crypto.randomUUID to allow insecure environments (fix #9โ€ฆ  -  by @plusgut in https://github.com/vitest-dev/vitest/issues/9339 and https://github.com/vitest-dev/vitest/issues/9 <samp>(e6a3f)</samp>
    • Handle null options in addEventHandler #9371  -  by @ThibautMarechal in https://github.com/vitest-dev/vitest/issues/9372 and https://github.com/vitest-dev/vitest/issues/9371 <samp>(40841)</samp>
    • Typo in browser.provider error  -  by @deammer in https://github.com/vitest-dev/vitest/issues/9394 <samp>(4b67f)</samp>
    • browser:
      • Fix process.env and import.meta.env defines in inline project  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9239 <samp>(b70c9)</samp>
      • Fix upload File instance  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9294 <samp>(b6778)</samp>
      • Fix invalid project token for artifacts assets  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9321 <samp>(caa7d)</samp>
      • Log ErrorEvent.message when unhandled ErrorEvent.error is null  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9322 <samp>(5d84e)</samp>
      • Support fileParallelism on an instance  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9328 <samp>(15006)</samp>
    • coverage:
      • Remove unnecessary istanbul-lib-source-maps usage  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9344 <samp>(b0940)</samp>
      • Apply patch from istanbuljs/istanbuljs#837  -  by @AriPerkkio and sapphi-red in https://github.com/vitest-dev/vitest/issues/9413 and https://github.com/vitest-dev/vitest/issues/837 <samp>(e05ce)</samp>
    • fsModuleCache:
      • Don't store importers in cache  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9422 <samp>(75136)</samp>
      • Add importers alongside importedModules  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9423 <samp>(59f92)</samp>
    • mocker:
      • Fix mock transform with class  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9421 <samp>(d390e)</samp>
    • pool:
      • Validate environment options when reusing the worker  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9349 <samp>(a8a88)</samp>
      • Handle worker start failures gracefully  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9337 <samp>(200da)</samp>
    • reporter:
      • Report test module if it failed to run  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9272 <samp>(c7888)</samp>
    • runner:
      • Respect nested test.only within describe.only  -  by @Ujjwaljain16 in https://github.com/vitest-dev/vitest/issues/9021 and https://github.com/vitest-dev/vitest/issues/9213 <samp>(55d5d)</samp>
    • typecheck:
      • Improve error message when tsc outputs help text  -  by @Ujjwaljain16 in https://github.com/vitest-dev/vitest/issues/9214 <samp>(7b10a)</samp>
    • ui:
      • Detect gzip by magic numbers instead of Content-Type header in html reporter  -  by @Copilot, hi-ogawa and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9278 <samp>(dd033)</samp>
    • webdriverio:
      • Fall back to WebDriver Classic #9244  -  by @JustasMonkev in https://github.com/vitest-dev/vitest/issues/9373 and https://github.com/vitest-dev/vitest/issues/9244 <samp>(c23dd)</samp>
        View changes on GitHub
    Open source โ†’
  30. 4.0.1616 Dec 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Fix browser mode default testTimeout back to 15 seconds  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9167 <samp>(da0ad)</samp>
    • Avoid crashing on process.versions stub  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9174 <samp>(78cfb)</samp>
    • Reject calling suite function inside test  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9198 <samp>(1a259)</samp>
    • Allow inlining fully dynamic import  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9137 <samp>(56851)</samp>
    • Fix module graph UI on html reporter with headless browser mode  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9219 <samp>(60642)</samp>
    • Log deprecated test.poolOptions if it's set  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9226 <samp>(f7f6a)</samp>
    • browser:
      • Import recordArtifact from the vitest package  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9186 <samp>(01c56)</samp>
      • Fix import.meta.env define  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9205 <samp>(01a9a)</samp>
      • String formatting bug when including placeholders in console.log  -  by @michael-debs and @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9030 and https://github.com/vitest-dev/vitest/issues/9131 <samp>(84a30)</samp>
    • coverage:
      • Istanbul untested files source maps are off  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9208 <samp>(372e8)</samp>
    • experimental:
      • Export setupEnvironment for custom pools  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9187 <samp>(5d26b)</samp>
        View changes on GitHub
    Open source โ†’
  31. 4.0.152 Dec 2025
    Release notes

       ๐Ÿš€ Experimental Features

    • cache: Add opt-out on a plugin level, fix internal root cache  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9154 <samp>(a68f7)</samp>
    • reporters: Print import duration breakdown  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9105 <samp>(122ff)</samp>

       ๐Ÿž Bug Fixes

    • Keep built-in id as is in bun and deno  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9117 <samp>(075ab)</samp>
    • Use optimizeDeps.rolldownOptions to fix depreated warning + fix ssr.external: true  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9121 <samp>(fd8bd)</samp>
    • Fix external behavior with deps.optimizer  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9125 <samp>(4c754)</samp>
    • Very minor typo in "Chrome DevTools Protocol"  -  by @HowToTestFrontend in https://github.com/vitest-dev/vitest/issues/9146 <samp>(20997)</samp>
    • browser: Run toMatchScreenshot only once when used with expect.element  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9132 <samp>(0d2e7)</samp>
    • coverage: Istanbul provider to not break source maps  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9040 <samp>(e4ca9)</samp>
    • deps: Update dependency tinyexec to v1  -  in https://github.com/vitest-dev/vitest/issues/9122 <samp>(fd786)</samp>
    • docs: Remove --browser.provider from docs  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9115 <samp>(120b3)</samp>
    • expect: Preserve currentTestName in extended matchers  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9106 <samp>(e4345)</samp>
    • pool: Terminate workers on CTRL+c forceful exits  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9140 <samp>(d57d8)</samp>
    • reporters: Show project in github reporter  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9138 <samp>(bb65e)</samp>
    • spy: Do not mock overriden method, if parent was automocked  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9116 <samp>(1a246)</samp>
    • web-worker: MessagePort objects passed to Worker.postMessage work when clone === "native"  -  by @whitphx in https://github.com/vitest-dev/vitest/issues/9118 <samp>(deee8)</samp>
        View changes on GitHub
    Open source โ†’
  32. 4.0.1425 Nov 2025
    Release notes

       ๐Ÿš€ Experimental Features

    • browser: Expose utils.configurePrettyDOM  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9103 <samp>(2cc34)</samp>
    • runner: Add full names to tasks  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9087 <samp>(821aa)</samp>
    • ui: Add tabbed failure view for toMatchScreenshot with comparison slider  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8813 <samp>(c37c2)</samp>

       ๐Ÿž Bug Fixes

    • Externalize before caching  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9077 <samp>(e1b2e)</samp>
    • Collect the duration of external imports  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9097 <samp>(3326c)</samp>
    • Rename collect to import, remove prepare  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9091 <samp>(1256b)</samp>
    • browser:
      • Unsubscribe onCancel on rpc destroy  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9088 <samp>(f5b72)</samp>
      • Revert the viewport scaling in non-ui mode #9018  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9072 and https://github.com/vitest-dev/vitest/issues/9018 <samp>(64502)</samp>
    • coverage:
      • Invalidate circular modules correctly on rerun with coverage  -  by @aicest in https://github.com/vitest-dev/vitest/issues/9096 <samp>(6f22c)</samp>
    • expect:
      • Allow function as standard schema  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/9099 <samp>(ed8a2)</samp>
    • jsdom:
      • Reuse abort signals if possible  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9090 <samp>(2c468)</samp>
    • pool:
      • Init VITEST_POOL_ID + VITEST_WORKER_ID before environment setup  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9085 <samp>(37918)</samp>
    • web-worker:
      • postMessage to send ports to workers  -  by @whitphx and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9078 <samp>(9d176)</samp>

       ๐ŸŽ Performance

    • Replace debug with obug  -  by @sxzz and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9057 <samp>(acc51)</samp>
        View changes on GitHub
    Open source โ†’
  33. 4.0.1321 Nov 2025
    Release notes

       ๐Ÿž Bug Fixes

    • types:
      • Don't use type from Vite 7.1  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9071 <samp>(6356b)</samp>
      • Don't import node.js dependent types in vitest/browser  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9068 <samp>(332af)</samp>

       ๐ŸŽ Performance

    • Avoid fetchModule roundtrip if the module is cached  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9075 <samp>(b27e0)</samp>
    • experimental: If fsCacheModule is enabled, read from the memory when possible  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9076 <samp>(6b9a1)</samp>
        View changes on GitHub
    Open source โ†’
  34. 4.0.1220 Nov 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Inherit fsModuleCachePath by default  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9063 <samp>(9a8bc)</samp>
    • Don't import from @opentelemetry/api in public types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9066 <samp>(e944a)</samp>
        View changes on GitHub
    Open source โ†’
  35. 4.0.1120 Nov 2025
    Release notes

       ๐Ÿš€ Experimental Features

    • api: Add extensible test artifact API  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8987 <samp>(77292)</samp>
      • See more at https://vitest.dev/api/advanced/artifacts
    • expect: Provide task in MatchState  -  by @macarie in https://github.com/vitest-dev/vitest/issues/9022 <samp>(afd1f)</samp>
    • experimental: Support OpenTelemetry traces  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8994 <samp>(d6d33)</samp>
      • See more at https://vitest.dev/guide/open-telemetry

       ๐ŸŽ Performance

    • experimental: Add file system cache  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9026 <samp>(1b147)</samp>
      • See more at https://vitest.dev/config/experimental#experimental-fsmodulecache
        View changes on GitHub
    Open source โ†’
  36. 4.0.1017 Nov 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Remove onCancel when worker is terminated  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9033 <samp>(6d7f0)</samp>
    • browser:
      • Don't scale the iframe if UI is disabled  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/9018 <samp>(5406e)</samp>
      • Handle dependency stack traces with external source maps. Resolves: #9003  -  by @iclectic in https://github.com/vitest-dev/vitest/issues/9016 and https://github.com/vitest-dev/vitest/issues/9003 <samp>(57ae5)</samp>
    • bun:
      • Parsing of stack trace for bun runtime  -  by @nazarhussain in https://github.com/vitest-dev/vitest/issues/9032 <samp>(f3ec6)</samp>
    • core:
      • Prevent starting new run when cancelling  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8991 <samp>(eb98d)</samp>
    • pool:
      • Prevent writing to closed worker  -  by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/9023 <samp>(042c6)</samp>
    • reporters:
      • Report correct test run duration at the end  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8969 <samp>(bc3a6)</samp>
    • ui:
      • Use execution time from ws reporter (onFinished)  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8975 <samp>(f56dc)</samp>
        View changes on GitHub
    Open source โ†’
  37. 4.0.914 Nov 2025
    Release notes

       ๐Ÿš€ Experimental Features

    • expect: Add Set support to toBeOneOf  -  by @tim-we and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8906 <samp>(a415d)</samp>

       ๐Ÿž Bug Fixes

    • browser: Add favicon icons to the browser mode ui  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8972 <samp>(353ee)</samp>
    • forks: Increase worker start timeout  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/9027 <samp>(5e750)</samp>
    • jsdom: Cloned request is an instance of Request  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8985 <samp>(506a9)</samp>
    • ui: Collect file/suite/test duration correctly  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8976 <samp>(8016d)</samp>
        View changes on GitHub
    Open source โ†’
  38. 4.0.87 Nov 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Workaround noExternal merging bug on Vite 6  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8950 <samp>(bcb13)</samp>
    • Missed context.d.ts file  -  by @termorey in https://github.com/vitest-dev/vitest/issues/8965 <samp>(9044d)</samp>
    • Incorrect error message for non-awaited expect.element()  -  by @StyleShit in https://github.com/vitest-dev/vitest/issues/8954 <samp>(9638d)</samp>
    • browser: Cleanup frame-ancestors from CSP header at coverage middleware  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8941 <samp>(1f730)</samp>
    • deps: Update all non-major dependencies  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8636 <samp>(da8b9)</samp>
    • forks: Do not fail with Windows Defender enabled  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8967 <samp>(c79f4)</samp>
    • runner: Properly encode Uint8Array body in annotations  -  by @Livan-pro in https://github.com/vitest-dev/vitest/issues/8951 <samp>(997ca)</samp>
    • spy: Copy static properties if spy is initialised with vi.fn(), fix types for vi.spyOn(obj, class)  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8956 <samp>(75e7f)</samp>
    • webdriverio: When no argument is passed to the .click interaction command, the webdriver command should also have no argument  -  by @julienw in https://github.com/vitest-dev/vitest/issues/8937 <samp>(069e6)</samp>
        View changes on GitHub
    Open source โ†’
  39. 4.0.74 Nov 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Bind process in case global is overwritten  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8916 <samp>(6240d)</samp>
    • Create environment once per worker with isolate: false  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8915 <samp>(c9078)</samp>
    • Add Locator as a possible element type in toContainElement() matcher  -  by @vitalybaev in https://github.com/vitest-dev/vitest/issues/8910 and https://github.com/vitest-dev/vitest/issues/8927 <samp>(35a27)</samp>
    • browser: Inherit isolate option, deprecate browser.isolate/browser.fileParallelism  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8890 <samp>(9d2b4)</samp>
    • cli: Parse --execArgv as array  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8924 <samp>(751c3)</samp>
    • jsdom: Support URL.createObjectURL, FormData.set(prop, blob)  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8935 <samp>(a1b73)</samp>
    • pool: Avoid --require argument when running in deno  -  by @pi0 in https://github.com/vitest-dev/vitest/issues/8897 <samp>(d41fa)</samp>
    • typecheck: Handle re-runs outside tsc  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8920 <samp>(fdb2e)</samp>

       ๐ŸŽ Performance

    • pool:
      • Sort test files by project by default  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8914 <samp>(680a6)</samp>
    • reporters:
      • Optimize getting the tests stats  -  by @Connormiha in https://github.com/vitest-dev/vitest/issues/8908 <samp>(06d62)</samp>
      • Remove unnecessary Array.from call  -  by @Connormiha in https://github.com/vitest-dev/vitest/issues/8907 <samp>(b6014)</samp>
        View changes on GitHub
    Open source โ†’
  40. 4.0.631 Oct 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Don't merge errors with different diffs for reporting  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8871 <samp>(3e19f)</samp>
    • Do not throw when importing a type from an external package  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8875 <samp>(7e6c3)</samp>
    • Improve spying types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8878 <samp>(ca041)</samp>
    • Reuse the same environment when isolate and fileParallelism are false  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8889 <samp>(31706)</samp>
    • browser:
      • Support module tracking  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8877 <samp>(9e24a)</samp>
      • Ensure setup files are re-evaluated on each test run  -  by @yjaaidi in https://github.com/vitest-dev/vitest/issues/8883 and https://github.com/vitest-dev/vitest/issues/8884 <samp>(f50ea)</samp>
    • coverage:
      • Prevent filtering out virtual files before remapping to sources  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8860 <samp>(e3b77)</samp>
    • happy-dom:
      • Properly teardown additional keys  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8888 <samp>(10a06)</samp>
    • jsdom:
      • Pass down Node.js FormData to Request  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8880 <samp>(197ca)</samp>
        View changes on GitHub
    Open source โ†’
  41. 4.0.529 Oct 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Respect ssr.noExternal when externalizing dependencies, fix Svelte and Astro  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8862 <samp>(a4f86)</samp>
    • Allow module in --config  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8864 <samp>(b9521)</samp>
    • browser: Allow Locator type in selectOptions element parameter  -  by @rzzf and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8848 <samp>(7ee28)</samp>
    • module-runner: Don't return node builtins for getBuiltins unconditionally  -  by @sapphi-red in https://github.com/vitest-dev/vitest/issues/8863 <samp>(0e858)</samp>
    • pool: Rename groupId to groupOrder in error message  -  by @Yohannfra in https://github.com/vitest-dev/vitest/issues/8856 <samp>(b9aab)</samp>

       ๐ŸŽ Performance

    • Pass testfiles at once when --no-isolate --maxWorkers=1  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8835 <samp>(584aa)</samp>
    • expect: Optimize checking the input type  -  by @Connormiha in https://github.com/vitest-dev/vitest/issues/8840 <samp>(06968)</samp>
        View changes on GitHub
    Open source โ†’
  42. 4.0.427 Oct 2025
    Release notes

       ๐Ÿž Bug Fixes

    • browser:
      • Correct typo  -  by @benmccann in https://github.com/vitest-dev/vitest/issues/8796 <samp>(ede1f)</samp>
      • Publish a missing context file for webdriverio  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8824 <samp>(7c7b6)</samp>
    • mocker:
      • Support mocking builtins without node: prefix  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8829 <samp>(06208)</samp>
    • pool:
      • Runner's error listener causing MaxListenersExceededWarning  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8820 <samp>(d1bff)</samp>
      • Capture workers stdio to logger  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8809 <samp>(fb95f)</samp>
    • spy:
      • Allow classes in vi.mocked utility  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8839 <samp>(f8756)</samp>
    • worker:
      • Rpc listener leak when isolate: false  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8821 <samp>(573dc)</samp>

       ๐ŸŽ Performance

    • utils: Optimized reducer to avoid creating new objects  -  by @Connormiha in https://github.com/vitest-dev/vitest/issues/8818 <samp>(d19ce)</samp>
        View changes on GitHub
    Open source โ†’
  43. 4.0.324 Oct 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Preserve reporter options from config when CLI reporters override them  -  by @Copilot and sheremet-va in https://github.com/vitest-dev/vitest/issues/8794 <samp>(15552)</samp>
    • browser: More stable in-source testing validation  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8793 <samp>(62297)</samp>
    • happy-dom: Support fetch globals  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8791 <samp>(0fb74)</samp>
    • init: Use correct jsx/tsx extension  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8792 <samp>(abc04)</samp>
        View changes on GitHub
    Open source โ†’
  44. 4.0.223 Oct 2025
    Release notes

       ๐Ÿž Bug Fixes

    • browser:
      • Don't print the deprecation notice in node_modules  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8779 <samp>(588f7)</samp>
    • pool:
      • Assign envs before running tests to keep in sync with process.env  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8769 <samp>(26ce8)</samp>
    • spy:
      • Properly inherit implementation's length  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8778 <samp>(d4c2b)</samp>
      • Reset spies if both restoreMocks and mockReset are set in the config  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8781 <samp>(2eedb)</samp>
        View changes on GitHub
    Open source โ†’
  45. 4.0.122 Oct 2025
    Release notes

       ๐Ÿž Bug Fixes

    • Move the getBuiltins check  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8765 <samp>(81000)</samp>
    • pool: Don't teardown the communication channel too soon if something is running after the test  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8767 <samp>(3fae7)</samp>
        View changes on GitHub
    Open source โ†’
  46. 4.0.022 Oct 2025
    Release notes

    Vitest 4.0 is out!

    To stay updated, read our blog post and check the migration guide.

       ๐Ÿšจ Breaking Changes

    • Remove 'basic' reporter  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/7884 <samp>(82fcf)</samp>
    • Simplify default exclude pattern  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/6287 <samp>(14c50)</samp>
    • Remove deprecated getSourceMap  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8194 <samp>(ff934)</samp>
    • Replace deprecated ErrorWithDiff with TestError  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8195 <samp>(da59e)</samp>
    • Remove UserConfig type in favor of ViteUserConfig  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8196 <samp>(22f7f)</samp>
    • 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>
    • Remove deprecated internal helpers and environment exports  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8198 <samp>(4703c)</samp>
    • Remove deprecated typecheck and runner types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8199 <samp>(89a1c)</samp>
    • 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>
    • Remove support for Vite 5  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8202 <samp>(cb8b0)</samp>
    • Remove deprecated types  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8203 <samp>(66bee)</samp>
    • Remove deprecated environmentMatchGlobs and poolMatchGlobs  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8205 <samp>(be11d)</samp>
    • Remove deprecated workspace option in favor of projects  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8218 <samp>(76fb7)</samp>
    • Ignore --standalone when CLI filename filter is used  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8262 <samp>(013bf)</samp>
    • Use module-runner instead of vite-node  -  by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8208 <samp>(9be01)</samp>
    • Rewrite spying implementation to make module mocking more intuitive  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8363 <samp>(9e412)</samp>
    • Remove deprecated APIs  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8428 <samp>(a1cb9)</samp>
    • 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>
    • 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>
    • Include shadow root contents in pretty-format output  -  by @wkillerud in https://github.com/vitest-dev/vitest/issues/8545 <samp>(9e722)</samp>
    • Remove deprecated order from test() API  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8594 <samp>(4d419)</samp>
    • Rewrite pools without tinypool  -  by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8705 <samp>(4822d)</samp>
    • browser: Require a provider factory instead of a string  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8445 <samp>(606cb)</samp>
    • expect: Pass current equality testers to asymmetric matcher  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/6825 <samp>(965ce)</samp>
    • 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>
    • reporter: Remove deprecated APIs  -  by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8223 <samp>(149f8)</samp>
    • 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>
    • snapshot: Fail test with obsolete snapshot on CI  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/7963 <samp>(4d84f)</samp>
    • spy: Support spying on classes  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/6160 <samp>(abc0d)</samp>

       ๐Ÿš€ Features

    • 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>
    • Display test "path" when filtering  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8547 <samp>(2e491)</samp>
    • Introduce separate packages for browser mode providers  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8629 <samp>(0dc93)</samp>
    • Add hooks with type-safe extra context to TestAPI  -  by @ysfaran in https://github.com/vitest-dev/vitest/issues/8623 <samp>(6b21c)</samp>
    • Support expect.assert for type narrowing  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8695 <samp>(fe589)</samp>
    • Add displayAnnotations option to github-options  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8706 <samp>(4a66d)</samp>
    • Add schema validation matchers  -  by @zirkelc in https://github.com/vitest-dev/vitest/issues/8527 <samp>(c0b25)</samp>
    • Add a way to dump transformed content  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8711 <samp>(931c0)</samp>
    • api:
      • Expose experimental_parseSpecifications  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8408 <samp>(fdeb2)</samp>
      • Expose Vitest watcher  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8413 <samp>(aaa6e)</samp>
      • Add enableCoverage and disableCoverage methods  -  by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8412 <samp>(61eb7)</samp>
      • Add getGlobalTestNamePattern method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8438 <samp>(bdb70)</samp>
      • Add relativeModuleId to TestModule  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8505 <samp>(3be09)</samp>
      • Add getSeed method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8592 <samp>(438c4)</samp>
    • 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>
      • Add qwik to the vitest init cli command  -  by @thejackshelton in https://github.com/vitest-dev/vitest/issues/8330 <samp>(1638b)</samp>
      • Introduce toMatchScreenshot for Visual Regression Testing  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8041 <samp>(d45f9)</samp>
      • Add trackUnhandledErrors option  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8386 <samp>(c0ec0)</samp>
      • Support iframe locator with playwright provider  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8016 <samp>(57b2c)</samp>
      • Add length property to locators, toHaveLength now accepts locators  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8512 <samp>(2308c)</samp>
      • Support playwright tracing  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8584 <samp>(1aac5)</samp>
      • Expose options on BrowserProviderOption  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8609 <samp>(0d0e5)</samp>
      • Support --inspect option in webdriverio  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8613 <samp>(38adc)</samp>
      • Support custom screenshot comparison algorithms  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8687 <samp>(e63b1)</samp>
    • coverage:
      • autoUpdate to support percentage formatting  -  by @Battjmo and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8456 <samp>(99e01)</samp>
    • 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>
    • mocker:
      • Add automocker entry  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8301 <samp>(e9c92)</samp>

       ๐Ÿž Bug Fixes

    • 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>
    • 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>
    • 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>
    • Forbid setting environment to browser  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8334 <samp>(0417a)</samp>
    • 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>
    • Screenshot masks with Playwright provider  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8357 <samp>(459ef)</samp>
    • Configure oxc instead of esbuild on rolldown-vite  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8378 <samp>(e922e)</samp>
    • 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>
    • Support import.meta.resolve on Vite 7  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8493 <samp>(549d3)</samp>
    • 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>
    • Override fake timers when useFakeTimers is called multiple times  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8504 <samp>(ed7e3)</samp>
    • Custom expect messages for expect.extend matchers  -  by @lzl0304 in https://github.com/vitest-dev/vitest/issues/8520 <samp>(96945)</samp>
    • Process sourcemaps for stack traces from globalSetup files  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8534 <samp>(8978a)</samp>
    • 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>
    • 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>
    • Replace wildcard exports "./*" with specific files in vitest package  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8560 <samp>(ce746)</samp>
    • Don't publish unused d.ts files  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8562 <samp>(42dfd)</samp>
    • Remove loupe dependencies from optimizeDeps.include for browser mode  -  by @jake-danton in https://github.com/vitest-dev/vitest/issues/8570 <samp>(cdcf7)</samp>
    • Update engines field to drop Node 18 support  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8608 <samp>(9a0bf)</samp>
    • Correctly inherit test options on extended tests  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8618 <samp>(15c09)</samp>
    • Update @types/node peer deps  -  by @sheremet-va <samp>(ee6b2)</samp>
    • Re-export CDP Session directly from playwright  -  by @mrginglymus in https://github.com/vitest-dev/vitest/issues/8702 <samp>(9553a)</samp>
    • Disable trackUnhandledErrors if inspector is enabled  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8732 <samp>(acac7)</samp>
    • base option doesn't crash vitest  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8760 <samp>(9f0ec)</samp>
    • 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>
      • locator.element() returns HTMLElement or SVGElement  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8440 <samp>(c1ac1)</samp>
      • Don't import from vite directly  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8541 <samp>(d7fca)</samp>
      • Update expect.element type to match the implementation  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8597 <samp>(b2804)</samp>
      • Throw an error if iframe is not accessible anymore  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8601 <samp>(6acdc)</samp>
      • Stop creating unnecessary directories when taking screenshots  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8605 <samp>(b1c8f)</samp>
      • Always define commands  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8626 <samp>(acbe0)</samp>
      • Exclude deprecated context import from optimization  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8658 <samp>(a96ea)</samp>
      • Allow importing BrowserCommand if no browser package is installed  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8666 <samp>(95c36)</samp>
      • Define an export for browser/utils  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8678 <samp>(529ab)</samp>
      • 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>
      • Support sync not.toBeInTheDocument()  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8751 <samp>(f5d06)</samp>
    • 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>
    • coverage:
      • Include files based on --project filter  -  by @gtbuchanan in https://github.com/vitest-dev/vitest/issues/7885 <samp>(761be)</samp>
      • Prevent encoding filenames of uncovered files  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8239 <samp>(8a998)</samp>
      • Handle query param based transforms correctly  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8418 <samp>(a400a)</samp>
      • Enforce order of vitest:coverage-transform plugin  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8477 <samp>(ff517)</samp>
      • 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>
      • Keep only strings in coverage.exclude  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8731 <samp>(c9c30)</samp>
    • deps:
      • Update all non-major dependencies  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8235 <samp>(a1e57)</samp>
      • Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/8328 <samp>(aa79e)</samp>
      • Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/8348 <samp>(13f94)</samp>
      • Update all non-major dependencies  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8382 <samp>(704eb)</samp>
      • Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/8550 <samp>(048f7)</samp>
    • jsdom:
      • Override globals that Fetch API relies on  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8390 <samp>(05b41)</samp>
      • Support AbortSignal API  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8704 <samp>(f6690)</samp>
    • mocker:
      • Fix regexpHoistable to allow whitespace before parentheses  -  by @cszhjh in https://github.com/vitest-dev/vitest/issues/8231 <samp>(a0f9a)</samp>
    • module-runner:
      • Resolve resolvedSources correctly  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8736 <samp>(8fc52)</samp>
      • Support getBuiltins  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8746 <samp>(87bb8)</samp>
    • pool:
      • Properly reuse the vm pool  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8758 <samp>(08498)</samp>
    • reporter:
      • Invisible CLI menus when vitest --standalone  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8248 <samp>(37cc2)</samp>
    • rolldown-vite:
      • Properly disable minifier in the browser client  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8306 <samp>(f55bb)</samp>
    • runner:
      • Don't bundle runner with utils  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8496 <samp>(2b4b0)</samp>
    • spy:
      • Fix spyOn types with optional method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8499 <samp>(d3afa)</samp>
      • Can respy on an exported method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8521 <samp>(bf450)</samp>
      • Don't fail when spying on static getters  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8589 <samp>(ac1d9)</samp>
    • types:
      • Ensure Chai declaration merge works with TS-Go  -  by @LukeAbby in https://github.com/vitest-dev/vitest/issues/8188 <samp>(5261d)</samp>
      • Allow returning a promise from defineConfig  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8651 <samp>(c3474)</samp>
    • 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>
    • utils:
      • Remove ast export  -  by @bluwy in https://github.com/vitest-dev/vitest/issues/8435 <samp>(21622)</samp>
    • 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>
    • watch:
      • Filename filter runs duplicate tests in workspaces  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8250 <samp>(932d8)</samp>
    • wdio:
      • Wait for the driver to be properly closed  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8305 <samp>(c16ab)</samp>
      • 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>

       ๐ŸŽ 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>
    • 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>
    • Use ES2022 language features  -  by @TrevorBurnham in https://github.com/vitest-dev/vitest/issues/8492 <samp>(bb34c)</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>
    • Replace startsWith with strict equality  -  by @btea in https://github.com/vitest-dev/vitest/issues/8546 <samp>(c42e6)</samp>
    • Reduce the number of unused imports  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8508 <samp>(9a79b)</samp>
    • 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>
    • Create only one fetcher per project  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8762 <samp>(8e15b)</samp>
    • pool: Resolve all environments first  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8759 <samp>(d3ef4)</samp>
        View changes on GitHub
    Open source โ†’
  47. 4.0.0-beta.1921 Oct 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Rewrite pools without tinypool  -  by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8705 <samp>(4822d)</samp>

       ๐Ÿž Bug Fixes

    • Disable trackUnhandledErrors if inspector is enabled  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8732 <samp>(acac7)</samp>
    • browser:
      • 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>
      • Support sync not.toBeInTheDocument()  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8751 <samp>(f5d06)</samp>
    • coverage:
      • 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>
      • Keep only strings in coverage.exclude  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8731 <samp>(c9c30)</samp>
    • module-runner:
      • Resolve resolvedSources correctly  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8736 <samp>(8fc52)</samp>
      • Support getBuiltins  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8746 <samp>(87bb8)</samp>
        View changes on GitHub
    Open source โ†’
  48. 4.0.0-beta.1815 Oct 2025pre-release
    Release notes

       ๐Ÿš€ Features

    • Support expect.assert for type narrowing  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8695 <samp>(fe589)</samp>
    • Add displayAnnotations option to github-options  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8706 <samp>(4a66d)</samp>
    • Add schema validation matchers  -  by @zirkelc in https://github.com/vitest-dev/vitest/issues/8527 <samp>(c0b25)</samp>
    • Add a way to dump transformed content  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8711 <samp>(931c0)</samp>
    • browser: Support custom screenshot comparison algorithms  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8687 <samp>(e63b1)</samp>

       ๐Ÿž Bug Fixes

    • Re-export CDP Session directly from playwright  -  by @mrginglymus in https://github.com/vitest-dev/vitest/issues/8702 <samp>(9553a)</samp>
    • browser: Define an export for browser/utils  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8678 <samp>(529ab)</samp>
    • jsdom: Support AbortSignal API  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8704 <samp>(f6690)</samp>
        View changes on GitHub
    Open source โ†’
  49. 4.0.0-beta.176 Oct 2025pre-release
    Release notes

       ๐Ÿž Bug Fixes

    • browser: Allow importing BrowserCommand if no browser package is installed  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8666 <samp>(95c36)</samp>
        View changes on GitHub
    Open source โ†’
  50. 4.0.0-beta.163 Oct 2025pre-release
    Release notes

       ๐Ÿš€ Features

    • Add hooks with type-safe extra context to TestAPI  -  by @ysfaran in https://github.com/vitest-dev/vitest/issues/8623 <samp>(6b21c)</samp>

       ๐Ÿž Bug Fixes

    • Update @types/node peer deps  -  by @sheremet-va <samp>(ee6b2)</samp>
    • browser: Exclude deprecated context import from optimization  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8658 <samp>(a96ea)</samp>
    • types: Allow returning a promise from defineConfig  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8651 <samp>(c3474)</samp>
        View changes on GitHub
    Open source โ†’
  51. 4.0.0-beta.151 Oct 2025pre-release
    Release notes

    No significant changes

        View changes on GitHub
    Open source โ†’
  52. 4.0.0-beta.141 Oct 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Introduce separate packages for browser mode providers  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8629 <samp>(0dc93)</samp>

       ๐Ÿž Bug Fixes

    • Correctly inherit test options on extended tests  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8618 <samp>(15c09)</samp>
    • browser: Always define commands  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8626 <samp>(acbe0)</samp>
        View changes on GitHub
    Open source โ†’
  53. 4.0.0-beta.1324 Sept 2025pre-release
    Release notes

       ๐Ÿš€ Features

    • browser:
      • Expose options on BrowserProviderOption  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8609 <samp>(0d0e5)</samp>
      • Support --inspect option in webdriverio  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8613 <samp>(38adc)</samp>

       ๐Ÿž Bug Fixes

    • browser: Stop creating unnecessary directories when taking screenshots  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8605 <samp>(b1c8f)</samp>
        View changes on GitHub
    Open source โ†’
  54. 4.0.0-beta.1222 Sept 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Remove deprecated order from test() API  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8594 <samp>(4d419)</samp>

       ๐Ÿš€ Features

    • api: Add getSeed method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8592 <samp>(438c4)</samp>
    • browser: Support playwright tracing  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8584 <samp>(1aac5)</samp>

       ๐Ÿž Bug Fixes

    • Remove loupe dependencies from optimizeDeps.include for browser mode  -  by @jake-danton in https://github.com/vitest-dev/vitest/issues/8570 <samp>(cdcf7)</samp>
    • Update engines field to drop Node 18 support  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8608 <samp>(9a0bf)</samp>
    • browser:
      • Update expect.element type to match the implementation  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8597 <samp>(b2804)</samp>
      • Throw an error if iframe is not accessible anymore  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8601 <samp>(6acdc)</samp>
    • spy:
      • Don't fail when spying on static getters  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8589 <samp>(ac1d9)</samp>
    • 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>

       ๐ŸŽ Performance

    • 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>
        View changes on GitHub
    Open source โ†’
  55. 4.0.0-beta.1111 Sept 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • 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>
    • Include shadow root contents in pretty-format output  -  by @wkillerud in https://github.com/vitest-dev/vitest/issues/8545 <samp>(9e722)</samp>
    • expect: Pass current equality testers to asymmetric matcher  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/6825 <samp>(965ce)</samp>
    • 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>

       ๐Ÿš€ Features

    • Clickable dashboard numbers  -  by @shairez in https://github.com/vitest-dev/vitest/issues/7406 <samp>(2344c)</samp>
    • Display test "path" when filtering  -  by @userquin in https://github.com/vitest-dev/vitest/issues/8547 <samp>(2e491)</samp>

       ๐Ÿž Bug Fixes

    • Custom expect messages for expect.extend matchers  -  by @lzl0304 in https://github.com/vitest-dev/vitest/issues/8520 <samp>(96945)</samp>
    • Process sourcemaps for stack traces from globalSetup files  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8534 <samp>(8978a)</samp>
    • 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>
    • 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>
    • Replace wildcard exports "./*" with specific files in vitest package  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8560 <samp>(ce746)</samp>
    • Don't publish unused d.ts files  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8562 <samp>(42dfd)</samp>
    • browser: Don't import from vite directly  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8541 <samp>(d7fca)</samp>
    • deps: Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/8550 <samp>(048f7)</samp>
    • spy: Can respy on an exported method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8521 <samp>(bf450)</samp>

       ๐ŸŽ Performance

    • Replace startsWith with strict equality  -  by @btea in https://github.com/vitest-dev/vitest/issues/8546 <samp>(c42e6)</samp>
    • Reduce the number of unused imports  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8508 <samp>(9a79b)</samp>
        View changes on GitHub
    Open source โ†’
  56. 4.0.0-beta.101 Sept 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • browser: Require a provider factory instead of a string  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8445 <samp>(606cb)</samp>

       ๐Ÿš€ Features

    • api:
      • Add relativeModuleId to TestModule  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8505 <samp>(3be09)</samp>
    • browser:
      • Support iframe locator with playwright provider  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8016 <samp>(57b2c)</samp>
      • Add length property to locators, toHaveLength now accepts locators  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8512 <samp>(2308c)</samp>
    • coverage:
      • autoUpdate to support percentage formatting  -  by @Battjmo and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8456 <samp>(99e01)</samp>

       ๐Ÿž Bug Fixes

    • Support import.meta.resolve on Vite 7  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8493 <samp>(549d3)</samp>
    • 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>
    • Override fake timers when useFakeTimers is called multiple times  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8504 <samp>(ed7e3)</samp>
    • deps: Update all non-major dependencies  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8382 <samp>(704eb)</samp>
    • runner: Don't bundle runner with utils  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8496 <samp>(2b4b0)</samp>
    • spy: Fix spyOn types with optional method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8499 <samp>(d3afa)</samp>

       ๐ŸŽ Performance

    • Use ES2022 language features  -  by @TrevorBurnham in https://github.com/vitest-dev/vitest/issues/8492 <samp>(bb34c)</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>
    • Update tinypool to v2.0.0  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8513 <samp>(a8c7f)</samp>
        View changes on GitHub
    Open source โ†’
  57. 4.0.0-beta.926 Aug 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • 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>

       ๐Ÿš€ Features

    • api: Add getGlobalTestNamePattern method  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8438 <samp>(bdb70)</samp>

       ๐Ÿž Bug Fixes

    • browser:
      • locator.element() returns HTMLElement or SVGElement  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8440 <samp>(c1ac1)</samp>
    • coverage:
      • Handle query param based transforms correctly  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8418 <samp>(a400a)</samp>
      • Enforce order of vitest:coverage-transform plugin  -  by @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8477 <samp>(ff517)</samp>
    • utils:
      • Remove ast export  -  by @bluwy in https://github.com/vitest-dev/vitest/issues/8435 <samp>(21622)</samp>

       ๐ŸŽ 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>
    • 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>
        View changes on GitHub
    Open source โ†’
  58. 4.0.0-beta.812 Aug 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Remove deprecated APIs  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8428 <samp>(a1cb9)</samp>

       ๐Ÿš€ Features

    • api: Add enableCoverage and disableCoverage methods  -  by @sheremet-va and @AriPerkkio in https://github.com/vitest-dev/vitest/issues/8412 <samp>(61eb7)</samp>
        View changes on GitHub
    Open source โ†’
  59. 4.0.0-beta.78 Aug 2025pre-release
    Release notes

       ๐Ÿš€ Features

    • api:
      • Expose experimental_parseSpecifications  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8408 <samp>(fdeb2)</samp>
      • Expose Vitest watcher  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8413 <samp>(aaa6e)</samp>
    • browser:
      • Add trackUnhandledErrors option  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8386 <samp>(c0ec0)</samp>

       ๐Ÿž Bug Fixes

    • 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>
    • jsdom: Override globals that Fetch API relies on  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8390 <samp>(05b41)</samp>
        View changes on GitHub
    Open source โ†’
  60. 4.0.0-beta.64 Aug 2025pre-release
    Release notes

       ๐Ÿšจ Breaking Changes

    • Rewrite spying implementation to make mocking more intuitive  -  by @sheremet-va in https://github.com/vitest-dev/vitest/issues/8363 <samp>(9e412)</samp>
    • reporter: Remove deprecated APIs  -  by @AriPerkkio and @sheremet-va in https://github.com/vitest-dev/vitest/issues/8223 <samp>(149f8)</samp>

       ๐Ÿž Bug Fixes

    • Screenshot masks with Playwright provider  -  by @macarie in https://github.com/vitest-dev/vitest/issues/8357 <samp>(459ef)</samp>
    • Configure oxc instead of esbuild on rolldown-vite  -  by @hi-ogawa in https://github.com/vitest-dev/vitest/issues/8378 <samp>(e922e)</samp>
    • deps: Update all non-major dependencies  -  in https://github.com/vitest-dev/vitest/issues/8348 <samp>(13f94)</samp>
    • 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>
        View changes on GitHub
    Open source โ†’