Vitest Release Notes
Last updated: Apr 7, 2026
- Apr 7, 2026
- Date parsed from source:Apr 7, 2026
- First seen by Releasebot:Apr 7, 2026
v4.1.3
Vitest adds experimental parsing, exact browser locator support, TestAttachment.bodyEncoding, and custom snapshot matcher support, while also shipping several bug fixes for fake timers, snapshots, coverage dependencies, Playwright integration, and type leakage.
Experimental Features
Add experimental.preParse flag - by @sheremet-va in #10070 (78273)
Support browser.locators.exact option - by @sheremet-va in #10013 (48799)
Add TestAttachment.bodyEncoding - by @hi-ogawa in #9969 (89ca0)
Support custom snapshot matcher - by @hi-ogawa, Claude Sonnet 4.6 and Codex in #9973 (59b0e)
Bug Fixes
Advance fake timers with expect.poll interval - by @hi-ogawa and Claude Sonnet 4.6 in #10022 (3f5bf)
Add @vitest/coverage-v8 and @vitest/coverage-istanbul as optional dependency - by @alan-agius4 in #10025 (146d4)
Fix defineHelper for webkit async stack trace + update playwright 1.59.0 - by @hi-ogawa in #10036 (5a5fa)
Fix suite hook throwing errors for unused auto test-scoped fixture - by @hi-ogawa and Claude Sonnet 4.6 in #10035 (39865)
expect:
Remove JestExtendError.context from verbose error reporting - by @hi-ogawa in #9983 (66751)
Don't leak "runner" types - by @sheremet-va in #10004 (ec204)
snapshot:
Fix flagging obsolete snapshots for snapshot properties mismatch - by @hi-ogawa and Claude Sonnet 4.6 in #9986 (6b869)
Export custom snapshot matcher helper from vitest - by @hi-ogawa and Codex in #10042 (691d3)
ui:
Don't leak vite types - by @sheremet-va in #10005 (fdff1)
vm:
Fix external module resolve error with deps optimizer query - by @hi-ogawa and Claude Sonnet 4.6 in #10024 (9dbf4)
View changes on GitHub
Original source Report a problem - Mar 26, 2026
- Date parsed from source:Mar 26, 2026
- First seen by Releasebot:Mar 27, 2026
v4.1.2
Vitest ships a maintenance release that bumps flatted and removes version pinning to address CVE-related issues, while also tightening setup file resolution, mock handling, browser screenshot failures, coverage defaults, formatting limits, and agent color detection.
This release bumps Vitest's flatted version and removes version pinning to resolve flatted's CVE related issues (#9975).
π Bug Fixes
- Don't resolve setupFiles from parent directory - by @hi-ogawa in #9960 (7aa93)
- Ensure sequential mock/unmock resolution - by @hi-ogawa and Claude Opus 4.6 in #9830 (7c065)
- browser: Take failure screenshot if toMatchScreenshot can't capture a stable screenshot - by @macarie in #9847 (faace)
- coverage: Correct coverageConfigDefaults values and types - by @Arthie in #9940 (b3c99)
- pretty-format: Fix output limit over counting - by @hi-ogawa in #9965 (d3b7a)
- Disable colors if agent is detected - by @sheremet-va and @AriPerkkio in #9851 (6f97b)
View changes on GitHub
Original source Report a problem All of your release notes in one feed
Join Releasebot and get updates from Vitest and hundreds of other software products.
- Mar 23, 2026
- Date parsed from source:Mar 23, 2026
- First seen by Releasebot:Mar 23, 2026
v4.1.1
Vitest adds experimental tag-matching and VCS provider support, while shipping a broad round of bug fixes for mocking, coverage, browser providers, timers, and test collection. It also improves preview and standalone browser behavior and tightens output handling.
Features
experimental:
Expose matchesTags to test if the current filter matches tags - by @sheremet-va in #9913 (eec53)
Introduce experimental.vcsProvider - by @sheremet-va in #9928 (56115)
Bug Fixes
Mark TestProject.testFilesList internal properly - by @sapphi-red in #9867 (54f26)
Detect fixture that returns without calling use - by @oilater in #9831 and #9861 (633ae)
Drop vite 8.beta support - by @AriPerkkio in #9862 (b78f5)
Type regression in vi.mocked() static class methods - by @purepear and @hi-ogawa in #9857 (90926)
Properly re-evaluate actual modules of mocked external - by @hi-ogawa in #9898 (ae5ec)
Preserve coverage report when html reporter overlaps - by @hi-ogawa in #9889 (2d81a)
Provide vi.advanceTimers to the preview provider - by @sheremet-va in #9891 (1bc3e)
Don't leak event listener in playwright provider - by @sheremet-va in #9910 (d9355)
Open browser in --standalone mode without running tests - by @sheremet-va in #9911 (e78ad)
Guard disposable and optional body - by @sheremet-va in #9912 (6fdb2)
Resolve retry.condition RegExp serialization issue - by @nstepien and @hi-ogawa in #9942 (7b605)
collect:
Don't treat extra props on test return as tests - by @sheremet-va in #9871 (141e7)
coverage:
Simplify provider types - by @AriPerkkio in #9931 (aaf9f)
Load built-in provider without module runner - by @AriPerkkio in #9939 (bf892)
expect:
Soft assertions continue after .resolves/.rejects promise errors - by @mixelburg, Maks Pikov, Claude Opus 4.6 (1M context) and @hi-ogawa in #9843 (6d74b)
Fix sinon-chai style API - by @hi-ogawa in #9943 (0f08d)
pretty-format:
Limit output for large object - by @hi-ogawa and Claude Opus 4.6 (1M context) in #9949 (0d5f9)
View changes on GitHub
Original source Report a problem - Mar 12, 2026
- Date parsed from source:Mar 12, 2026
- First seen by Releasebot:Mar 13, 2026
v4.1.0
Vitest 4.1 arrives as a beta release page with a broad set of changes. It highlights new capabilities such as returning a disposable from doMock, chai style assertions, timer controls updates, exposed matcher types, and UI and test spec improvements aimed at broader compatibility and stability.
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 #9332 (e3e65)
- Added chai style assertions - by @ronnakamoto and @sheremet-va in #8842 (841df)
- Update to sinon/fake-timers v15 and add setTickMode to timer controls - by @atscott and @sheremet-va in #8726 (4b480)
- Expose matcher types - by @sheremet-va in #9448 (3e4b9)
- Add toTestSpecification to reported tasks - by @sheremet-va in #9464 (1a470)
- Show a warning if vi.mock or vi.hoisted are declared outside of top level of the module - by @sheremet-va in #9387 (5db54)
- Track and display expectedly failed tests (.fails) in UI and CLI - by @Copilot, sheremet-va and @sheremet-va in #9476 (77d75)
- Support tags - by @sheremet-va in #9478 (de7c8)
- Implement aroundEach and aroundAll hooks - by @sheremet-va in #9450 (2a8cb)
- Stabilize experimental features - by @sheremet-va in #9529 (b5fd2)
- Accept new or all in --update flag - by @sheremet-va in #9543 (a5acf)
- Support meta in test options - by @sheremet-va in #9535 (7d622)
- Support type inference with a new test.extend syntax - by @sheremet-va in #9550 (e5385)
- Support vite 8 beta, fix type issues in the config with different vite versions - by @sheremet-va in #9587 (99028)
- Add assertion helper to hide internal stack traces - by @hi-ogawa and Claude Opus 4.6 in #9594 (eeb0a)
- Store failure screenshots using artifacts API - by @macarie in #9588 (24603)
- Allow vitest list to statically collect tests instead of running files to collect them - by @sheremet-va in #9630 (7a8e7)
- Add --detect-async-leaks - by @AriPerkkio in #9528 (c594d)
- Implement mockThrow and mockThrowOnce - by @thor-juhasz and @sheremet-va in #9512 (61917)
- Support update: "none" and add docs about snapshots behavior on CI - by @hi-ogawa in #9700 (05f18)
- Support playwright launchOptions with connectOptions - by @hi-ogawa in #9702 (f0ff1)
- Add page/locator.mark API to enhance playwright trace - by @hi-ogawa in #9652 (d0ee5)
api:
- Support tests starting or ending with test in experimental_parseSpecification - by @jgillick and Jeremy Gillick in #9235 (2f367)
- Add filters to createSpecification - by @sheremet-va in #9336 (c8e6c)
- Expose runTestFiles as alternative to runTestSpecifications - by @sheremet-va in #9443 (43d76)
- Add allowWrite and allowExec options to api - by @sheremet-va in #9350 (20e00)
- Allow passing down test cases to toTestSpecification - by @sheremet-va in #9627 (6f17d)
browser:
- Add userEvent.wheel API - by @macarie in #9188 (66080)
- Add filterNode option to prettyDOM for filtering browser assertion error output - by @Copilot, sheremet-va and @sheremet-va in #9475 (d3220)
- Support playwright persistent context - by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in #9229 (f865d)
- Added detailsPanelPosition option and button - by @shairez in #9525 (c8a31)
- Use BlazeDiff instead of pixelmatch - by @macarie in #9514 (30936)
- Add findElement and enable strict mode in webdriverio and preview - by @sheremet-va in #9677 (c3f37)
cli:
- Add @bomb.sh/tab completions - by @AmirSa12 and @sheremet-va in #8639 (200f3)
coverage:
- Support ignore start/stop ignore hints - by @AriPerkkio in #9204 (e59c9)
- Add coverage.changed option to report only changed files - by @kykim00 and @AriPerkkio in #9521 (1d939)
experimental:
- Add onModuleRunner hook to worker.init - by @sheremet-va in #9286 (e977f)
- Option to disable the module runner - by @sheremet-va and @AriPerkkio in #9210 (9be61)
- Add importDurations: { limit, print } options - by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in #9401 (7e10f)
- Add print and fail thresholds for importDurations - by @hi-ogawa and Claude Opus 4.6 in #9533 (3f7a5)
fixtures:
- Pass down file context to beforeAll/afterAll - by @sheremet-va in #9572 (c8339)
reporters:
- Add agent reporter to reduce ai agent token usage - by @cpojer in #9779 (3e9e0)
runner:
- Enhance retry options - by @MazenSamehR, Matan Shavit, @AriPerkkio and @sheremet-va in #9370 (9e4cf)
ui:
- Allow run individual test/suites - by @userquin in #9465 (73b10)
- Add project filter/sort support - by @userquin in #8689 (0c7ea)
- Add duration sorting to explorer - by @julianhahn and @cursoragent in #9603 (209b1)
- Implement filter for slow tests - by @DerYeger and @userquin in #9705 (8880c)
vitest:
- Add run summary in GitHub Actions Reporter - by @macarie and jhnance in #9579 (96bfc)
π Bug Fixes
- Deprecate several vitest/* entry points - by @sheremet-va in #9347 (fd459)
- Use meta.url in createRequire - by @sheremet-va in #9441 (e3422)
- Preact browser mode init example of render function not async - by @WuMingDao in #9375 (2bea5)
- Deprecate unused types in matcher context - by @sheremet-va in #9449 (20f87)
- Handle external/noExternal during configEnvironment hook - by @hi-ogawa and Claude Opus 4.6 in #9508 (59ea2)
- Replace default ssr environment runner with Vitest server module runner - by @hi-ogawa and Claude Opus 4.6 in #9506 (cd5db)
- Propagate experimental CLI options to child projects - by @hi-ogawa and Claude Opus 4.6 in #9531 (b624f)
- Show a warning when browser.isolate is used - by @sheremet-va in #9410 (3d48e)
- Fix vi.mock({ spy: true }) node v8 coverage - by @hi-ogawa, hi-ogawa and Claude Opus 4.6 in #9541 (687b6)
- Don't show internal ssr handler in errors - by @sheremet-va in #9547 (76c43)
- Close vitest if it failed to start - by @sheremet-va in #9573 (728ba)
- Fix ssr environment runner in project - by @hi-ogawa in #9584 (09006)
- Trim trailing white spaces in code block - by @hi-ogawa in #9591 (f78be)
- Support inline snapshot inside test.for/each - by @hi-ogawa in #9590 (615fd)
- Apply source maps for external module stack trace - by @hi-ogawa in #9152 (79e20)
- Remove the .name from statically collected test - by @sheremet-va in #9596 (b66ff)
- Don't suppress warnings on pnp - by @sheremet-va in #9602 (89cbd)
- Support snapshot with expect.soft - by @iumehara, @hi-ogawa and Claude Opus 4.6 in #9231 (3eb2c)
- Log seed when only sequence.shuffle.tests is enabled - by @kaigritun, Kai Gritun and @sheremet-va in #9576 (8182b)
- Externalize expect/src/utils from vitest - by @hi-ogawa in #9616 (48739)
- Ignore test.override during static collection - by @sheremet-va in #9620 (09174)
- Increase stacktrace limit for --detect-async-leaks - by @AriPerkkio in #9638 (9fd4c)
- Hanging-reporter link in cli - by @flx-sta in #9649 (7c103)
- Fix teardown timeout of aroundEach/All when inner aroundEach/All throws - by @hi-ogawa in #9657 (4ec6c)
- Fix ui mode / html reporter and coverage integration - by @hi-ogawa and Claude Opus 4.6 in #9626 (86fad)
- Don't continue when aroundEach/All setup timed out - by @hi-ogawa in #9670 (bb013)
- Align VitestRunnerConfig optional fields with SerializedConfig - by @hi-ogawa in #9661 (79520)
- Handle Symbol values in format utility - by @nami8824 in #9658 (0583f)
- Deprecate toBe* spy assertions in favor of toHaveBeen* (and toThrowError) - by @sheremet-va in #9665 (4d390)
- Don't propagate nested aroundEach/All errors but aggregate them on runner - by @hi-ogawa in #9673 (b6365)
- Show a better error if there is a pending dynamic import - by @sheremet-va in #9676 (7ef5c)
- Preserve stack trace of resolves/rejects chained assertion error - by @hi-ogawa in #9679 (c6151)
- Handle module-sync condition in vmThreads/vmForks require - by @lesleh in #9650 and #9651 (bb203)
- Hooks should respect maxConcurrency - by @hi-ogawa in #9653 (16d13)
- Recursively autospy module object - by @hi-ogawa in #9687 (695a8)
- Remove trailing spaces from diff error log - by @hi-ogawa and @sheremet-va in #9680 (395d1)
- Respect project resolve.conditions for externals - by @hi-ogawa in #9717 (1d498)
- Use object for WeakMap instead of a symbol to support webcontainers - by @sheremet-va in #9731 (c5225)
- Fix re-mocking virtual module - by @hi-ogawa in #9748 (3cbbb)
- Cancelling should stop current test immediately - by @AriPerkkio in #9729 (0cb2f)
- Make mockObject change backwards compatible - by @sheremet-va in #9744 (84c69)
- Fix URL.name on jsdom - by @hi-ogawa in #9767 (031f3)
- Save and restore module graph in blob reporter - by @hi-ogawa in #9740 (84355)
- Don't silence reporter errors from test runtime events handler in normal run and --merge-reports - by @hi-ogawa in #9727 (4072d)
- Fix vi.importActual() for virtual modules - by @hi-ogawa and Claude Opus 4.6 in #9772 (1e89e)
- Throw FixtureAccessError if suite hook accesses undefined fixture - by @sheremet-va in #9786 (fc2ce)
- Allow hyphens in project config file name pattern - by @Koutaro-Hanabusa and @hi-ogawa in #9760 (33e96)
- Manual and redirect mock shouldn't load or transform original module - by @hi-ogawa and Claude Opus 4.6 in #9774 (a8216)
- hideSkippedTests should not hide test.todo - by @oilater in #9562 and #9781 (8181e)
- Allow catch/finally for async assertion - by @hi-ogawa in #9827 (031f0)
- Resolve fixture overrides from test's suite in beforeEach hooks - by @hi-ogawa and Claude Opus 4.6 in #9826 (99e52)
- Use isAgent check, not just TTY, for watch mode - by @sheremet-va in #9841 (c3cac)
- Use performance.now to measure test timeout duration - by @hi-ogawa and Claude Opus 4.6 in #9795 (f48a6)
- Correctly identify concurrent test during static analysis - by @sheremet-va in #9846 (1de0a)
- browser:
- Avoid updating screenshots when toMatchScreenshot passes - by @macarie in #9289 (46aab)
- Hide injected data-testid attributes - by @sheremet-va in #9503 (c8d2c)
- Throw an error if iframe was reloaded - by @sheremet-va in #9516 (73a81)
- Encode projectName in browser client URL - by @dkkim0122 in #9523 (5b164)
- Don't take failure screenshot if tests have artifacts created by toMatchScreenshot - by @macarie in #9552 (83ca0)
- Remove --remote-debugging-address from chrome args - by @hi-ogawa and @AriPerkkio in #9712 (f09bb)
- Make sure userEvent actions support ensureAwaited - by @sheremet-va in #9732 (97685)
- Types of getCDPSession and cdp() - by @AriPerkkio in #9716 (689a2)
- Skip esbuild.legalComments when using rolldown-vite - by @Copilot, hi-ogawa and @hi-ogawa in #9803 (3505f)
chai:
- Don't allow deepEqual in the config because it's not serializable - by @sheremet-va in #9666 (9ee99)
coverage:
- Infer transform mode for uncovered files - by @AriPerkkio in #9435 (f3967)
- thresholds.autoUpdate to preserve ending whitespace - by @AriPerkkio in #9436 (7e534)
deps:
- Update all non-major dependencies - by @hi-ogawa in #9192 (90c30)
- Update all non-major dependencies - in #9485 (c0118)
- Update all non-major dependencies - in #9567 (13c9e)
docs:
- Fix old /config/#option hash links causing hydration errors - by @hi-ogawa, Claude Opus 4.6 and @sheremet-va in #9610 (a603c)
expect:
- toMatchObject(Map/Set) should expect Map/Set on left hand side - by @hi-ogawa and Claude Opus 4.6 in #9532 (381da)
- Fix objectContaining with proxy - by @hi-ogawa and Claude Opus 4.6 in #9554 (7ce34)
- Support arbitrary value equality for toThrow and make Error detection robust - by @hi-ogawa and Claude Opus 4.6 in #9570 (de215)
mock:
- Inject helpers after hashbang if present - by @sheremet-va in #9545 (65432)
mocker:
- Update vite's peer dependency range - by @sheremet-va in #9808 (36f9a)
reporter:
- dot reporter leaves pending tests - by @AriPerkkio in #9684 (4d793)
runner:
- Mark repeated tests as finished on last run - by @AriPerkkio in #9707 (cc735)
spy:
- Support deep partial in vi.mocked - by @j2h30728 in #8152 and #9493 (71cb5)
- Fallback to object accessor if descriptor's value is undefined - by @sheremet-va in #9511 (6f181)
- Throw correct errors when shorthand methods are used on a class - by @sheremet-va in #9513 (5d0fd)
types:
- bench.reporters no longer gives type errors when passing file name string paths - by @Bertie690 in #9695 (093c8)
ui:
- Process artifact attachments when generating HTML reporter - by @macarie in #9472 (96eb9)
- Don't fail if --ui and --root are specified together - by @sheremet-va in #9536 (d9305)
π Performance
- pretty-format: Combine DOMElement plugins - by @sheremet-va in #9581 (da85a)
View changes on GitHub
Original source Report a problem - Mar 5, 2026
- Date parsed from source:Mar 5, 2026
- First seen by Releasebot:Mar 5, 2026
v4.1.0-beta.6
New features include page/locator.mark API to enhance playwright trace and vitest run summaries. Bug fixes cover jsdom URL.name, saving/restoring module graph in blob reporter, reporter error handling, virtual modules, fixture access, config name patterns, and mock redirects. View changes on GitHub.
π Features
- Add page/locator.mark API to enhance playwright trace - by @hi-ogawa in #9652 (d0ee5)
- vitest: Add run summary in GitHub Actions Reporter - by @macarie and jhnance in #9579 (96bfc)
π Bug Fixes
- Fix URL.name on jsdom - by @hi-ogawa in #9767 (031f3)
- Save and restore module graph in blob reporter - by @hi-ogawa in #9740 (84355)
- Don't silence reporter errors from test runtime events handler in normal run and --merge-reports - by @hi-ogawa in #9727 (4072d)
- Fix vi.importActual() for virtual modules - by @hi-ogawa and Claude Opus 4.6 in #9772 (1e89e)
- Throw FixtureAccessError if suite hook accesses undefined fixture - by @sheremet-va in #9786 (fc2ce)
- Allow hyphens in project config file name pattern - by @Koutaro-Hanabusa and @hi-ogawa in #9760 (33e96)
- Manual and redirect mock shouldn't load or transform original module - by @hi-ogawa and Claude Opus 4.6 in #9774 (a8216)
- hideSkippedTests should not hide test.todo - by @oilater in #9562 and #9781 (8181e)
- browser: Types of getCDPSession and cdp() - by @AriPerkkio in #9716 (689a2)
View changes on GitHub
Original source Report a problem - Feb 26, 2026
- Date parsed from source:Feb 26, 2026
- First seen by Releasebot:Feb 26, 2026
v4.1.0-beta.5
New release brings mockThrow enhancements and new mocks, updated CI snapshots behavior docs, Playwright launchOptions support, BlazeDiff for browser diffs, strict mode in webdriverio preview, and improved coverage reporting. It also fixes error propagation, dynamic imports, hooks concurrency, autospy, and reporter stability.
Features
- Implement mockThrow and mockThrowOnce - by @thor-juhasz and @sheremet-va in #9512 (61917)
- Support update: "none" and add docs about snapshots behavior on CI - by @hi-ogawa in #9700 (05f18)
- Support playwright launchOptions with connectOptions - by @hi-ogawa in #9702 (f0ff1)
browser:
- Use BlazeDiff instead of pixelmatch - by @macarie in #9514 (30936)
- Add findElement and enable strict mode in webdriverio and preview - by @sheremet-va in #9677 (c3f37)
coverage:
- Add coverage.changed option to report only changed files - by @kykim00 and @AriPerkkio in #9521 (1d939)
ui:
- Implement filter for slow tests - by @DerYeger and @userquin in #9705 (8880c)
Bug Fixes
- Donβt propagate nested aroundEach/All errors but aggregate them on runner - by @hi-ogawa in #9673 (b6365)
- Show a better error if there is a pending dynamic import - by @sheremet-va in #9676 (7ef5c)
- Preserve stack trace of resolves/rejects chained assertion error - by @hi-ogawa in #9679 (c6151)
- Handle module-sync condition in vmThreads/vmForks require - by @lesleh in #9650 and #9651 (bb203)
- Hooks should respect maxConcurrency - by @hi-ogawa in #9653 (16d13)
- Recursively autospy module object - by @hi-ogawa in #9687 (695a8)
- Remove trailing spaces from diff error log - by @hi-ogawa and @sheremet-va in #9680 (395d1)
- Respect project resolve.conditions for externals - by @hi-ogawa in #9717 (1d498)
- Use object for WeakMap instead of a symbol to support webcontainers - by @sheremet-va in #9731 (c5225)
- Fix re-mocking virtual module - by @hi-ogawa in #9748 (3cbbb)
- Cancelling should stop current test immediately - by @AriPerkkio in #9729 (0cb2f)
- Make mockObject change backwards compatible - by @sheremet-va in #9744 (84c69)
browser:
- Remove --remote-debugging-address from chrome args - by @hi-ogawa and @AriPerkkio in #9712 (f09bb)
- Make sure userEvent actions support ensureAwaited - by @sheremet-va in #9732 (97685)
reporter:
- dot reporter leaves pending tests - by @AriPerkkio in #9684 (4d793)
runner:
- Mark repeated tests as finished on last run - by @AriPerkkio in #9707 (cc735)
types:
- bench.reporters no longer gives type errors when passing file name string paths - by @Bertie690 in #9695 (093c8)
View changes on GitHub
Original source Report a problem - Feb 16, 2026
- Date parsed from source:Feb 16, 2026
- First seen by Releasebot:Feb 16, 2026
v4.1.0-beta.4
Vitest delivers a broad update with type inference, Vite 8 beta support, improved assertion helpers, static test collection, async leak detection, and UI/explorer refinements. It also patches start failures, SSR tweaks, and stack traces for smoother, faster test runs.
π Features
- Support type inference with a new test.extend syntax - by @sheremet-va in #9550 (e5385)
- Support vite 8 beta, fix type issues in the config with different vite versions - by @sheremet-va in #9587 (99028)
- Add assertion helper to hide internal stack traces - by @hi-ogawa and Claude Sonnet 4.5 in #9594 (eeb0a)
- Store failure screenshots using artifacts API - by @macarie in #9588 (24603)
- Allow vitest list to statically collect tests instead of running files to collect them - by @sheremet-va in #9630 (7a8e7)
- Add --detect-async-leaks - by @AriPerkkio in #9528 (c594d)
- api: Allow passing down test cases to toTestSpecification - by @sheremet-va in #9627 (6f17d)
- fixtures: Pass down file context to beforeAll/afterAll - by @sheremet-va in #9572 (c8339)
- ui: Add duration sorting to explorer - by @julianhahn and @cursoragent in #9603 (209b1)
π Bug Fixes
- Close vitest if it failed to start - by @sheremet-va in #9573 (728ba)
- Fix ssr environment runner in project - by @hi-ogawa in #9584 (09006)
- Trim trailing white spaces in code block - by @hi-ogawa in #9591 (f78be)
- Support inline snapshot inside test.for/each - by @hi-ogawa in #9590 (615fd)
- Apply source maps for external module stack trace - by @hi-ogawa in #9152 (79e20)
- Remove the .name from statically collected test - by @sheremet-va in #9596 (b66ff)
- Don't suppress warnings on pnp - by @sheremet-va in #9602 (89cbd)
- Support snapshot with expect.soft - by @iumehara, @hi-ogawa and Claude Sonnet 4.5 in #9231 (3eb2c)
- Log seed when only sequence.shuffle.tests is enabled - by @kaigritun, Kai Gritun and @sheremet-va in #9576 (8182b)
- Externalize expect/src/utils from vitest - by @hi-ogawa in #9616 (48739)
- Ignore test.override during static collection - by @sheremet-va in #9620 (09174)
- Increase stacktrace limit for --detect-async-leaks - by @AriPerkkio in #9638 (9fd4c)
- Hanging-reporter link in cli - by @flx-sta in #9649 (7c103)
- Fix teardown timeout of aroundEach/All when inner aroundEach/All throws - by @hi-ogawa in #9657 (4ec6c)
- Fix ui mode / html reporter and coverage integration - by @hi-ogawa and Claude Sonnet 4.5 in #9626 (86fad)
- Don't continue when aroundEach/All setup timed out - by @hi-ogawa in #9670 (bb013)
- Align VitestRunnerConfig optional fields with SerializedConfig - by @hi-ogawa in #9661 (79520)
- Handle Symbol values in format utility - by @nami8824 in #9658 (0583f)
- Deprecate toBe* spy assertions in favor of toHaveBeen* (and toThrowError) - by @sheremet-va in #9665 (4d390)
- chai: Don't allow deepEqual in the config because it's not serializable - by @sheremet-va in #9666 (9ee99)
- docs: Fix old /config/#option hash links causing hydration errors - by @hi-ogawa, Claude Sonnet 4.5 and @sheremet-va in #9610 (a603c)
- expect: Support arbitrary value equality for toThrow and make Error detection robust - by @hi-ogawa and Claude Sonnet 4.5 in #9570 (de215)
- ui: Don't fail if --ui and --root are specified together - by @sheremet-va in #9536 (d9305)
π Performance
- pretty-format: Combine DOMElement plugins - by @sheremet-va in #9581 (da85a)
- View changes on GitHub
- Feb 2, 2026
- Date parsed from source:Feb 2, 2026
- First seen by Releasebot:Feb 3, 2026
v4.1.0-beta.3
A refreshed release adds new hooks and API options, plus browser details and enhanced test options. It stabilizes experimental features and fixes setup, errors, and test reliability for smoother workflows.
π Features
- Implement aroundEach and aroundAll hooks - by @sheremet-va in #9450 (2a8cb)
- Stabilize experimental features - by @sheremet-va in #9529 (b5fd2)
- Accept new or all in --update flag - by @sheremet-va in #9543 (a5acf)
- Support meta in test options - by @sheremet-va in #9535 (7d622)
- api:
- Add allowWrite and allowExec options to api - by @sheremet-va in #9350 (20e00)
- browser:
- Added detailsPanelPosition option and button - by @shairez in #9525 (c8a31)
- experimental:
- Add importDurations: { limit, print } options - by @hi-ogawa, Claude Opus 4.5 and @sheremet-va in #9401 (7e10f)
- Add print and fail thresholds for importDurations - by @hi-ogawa and Claude Opus 4.5 in #9533 (3f7a5)
- View changes on GitHub
π Bug Fixes
browser
- Hide injected data-testid attributes - by @sheremet-va in #9503 (c8d2c)
- Throw an error if iframe was reloaded - by @sheremet-va in #9516 (73a81)
- Encode projectName in browser client URL - by @dkkim0122 in #9523 (5b164)
- Don't take failure screenshot if tests have artifacts created by toMatchScreenshot - by @macarie in #9552 (83ca0)
deps
- Update all non-major dependencies - in #9485 (c0118)
- Update all non-major dependencies - in #9567 (13c9e)
expect
- toMatchObject(Map/Set) should expect Map/Set on left hand side - by @hi-ogawa and Claude Opus 4.5 in #9532 (381da)
- Fix objectContaining with proxy - by @hi-ogawa and Claude Opus 4.5 in #9554 (7ce34)
mock
- Inject helpers after hashbang if present - by @sheremet-va in #9545 (65432)
spy
Fallback to object accessor if descriptor's value is undefined - by @sheremet-va in #9511 (6f181)
Throw correct errors when shorthand methods are used on a class - by @sheremet-va in #9513 (5d0fd)
View changes on GitHub
- Jan 22, 2026
- Date parsed from source:Jan 22, 2026
- First seen by Releasebot:Jan 23, 2026
v4.1.0-beta.2
This release unlocks matcher types, adds toTestSpecification, shows expected failures in UI, and introduces tags along with browser output filtering. It also adds Playwright persistent context, CLI tab completions, single-test runs, and project filters with assorted bug fixes. View changes on GitHub.
π Features
- Expose matcher types - by @sheremet-va in #9448 (3e4b9)
- Add toTestSpecification to reported tasks - by @sheremet-va in #9464 (1a470)
- Show a warning if vi.mock or vi.hoisted are declared outside of top level of the module - by @sheremet-va in #9387 (5db54)
- Track and display expectedly failed tests (.fails) in UI and CLI - by @Copilot, sheremet-va and @sheremet-va in #9476 (77d75)
- Support tags - by @sheremet-va in #9478 (de7c8)
browser:
- Add filterNode option to prettyDOM for filtering browser assertion error output - by @Copilot, sheremet-va and @sheremet-va in #9475 (d3220)
- Support playwright persistent context - by @hi-ogawa, Claude Opus 4.5 and @sheremet-va in #9229 (f865d)
cli:
- Add @bomb.sh/tab completions - by @AmirSa12 and @sheremet-va in #8639 (200f3)
experimental:
- Option to disable the module runner - by @sheremet-va and @AriPerkkio in #9210 (9be61)
ui:
- Allow run individual test/suites - by @userquin in #9465 (73b10)
- Add project filter/sort support - by @userquin in #8689 (0c7ea)
π Bug Fixes
- Deprecate unused types in matcher context - by @sheremet-va in #9449 (20f87)
- coverage: thresholds.autoUpdate to preserve ending whitespace - by @AriPerkkio in #9436 (7e534)
- spy: Support deep partial in vi.mocked - by @j2h30728 in #8152 and #9493 (71cb5)
- ui: Process artifact attachments when generating HTML reporter - by @macarie in #9472 (96eb9)
- View changes on GitHub
- Jan 22, 2026
- Date parsed from source:Jan 22, 2026
- First seen by Releasebot:Jan 23, 2026
v4.0.18
π Experimental Features
- experimental: Add onModuleRunner hook to worker.init - by @sheremet-va in #9286 (ea837)
π Bug Fixes
- Use meta.url in createRequire - by @sheremet-va in #9441 (e0572)
- browser: Hide injected data-testid attributes - by @sheremet-va in #9503 (f8989)
- ui: Process artifact attachments when generating HTML reporter - by @macarie in #9472 (22543)
View changes on GitHub
Original source Report a problem