Vitest Release Notes
Last updated: Feb 16, 2026
- 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
All of your release notes in one feed
Join Releasebot and get updates from Vitest and hundreds of other software products.
- 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 - Jan 14, 2026
- Date parsed from source:Jan 14, 2026
- First seen by Releasebot:Jan 14, 2026
v4.1.0-beta.1
This release delivers a broad testing toolkit upgrade with new APIs and browser features, improved timer controls, and smarter test runs. It adds wheel events, test file runs, spec filters, and hooks while tightening coverage and fixing key issues.
Features
- Return a disposable from doMock() - by @kirkwaiblinger in #9332 (e3e65)
- Added chai style assertions for spying - 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)
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)
browser:
- Add userEvent.wheel API - by @macarie in #9188 (66080)
coverage:
- Support ignore start/stop ignore hints - by @AriPerkkio in #9204 (e59c9)
experimental:
- Add onModuleRunner hook to worker.init - by @sheremet-va in #9286 (e977f)
runner:
- Enhance retry options - by @MazenSamehR, Matan Shavit, @AriPerkkio and @sheremet-va in #9370 (9e4cf)
🐞 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)
- browser: Avoid updating screenshots when toMatchScreenshot passes - by @macarie in #9289 (46aab)
- coverage: Infer transform mode for uncovered files - by @AriPerkkio in #9435 (f3967)
- deps: Update all non-major dependencies - by @hi-ogawa in #9192 (90c30)
View changes on GitHub
Original source Report a problem - Jan 12, 2026
- Date parsed from source:Jan 12, 2026
- First seen by Releasebot:Jan 13, 2026
v4.0.17
New experimental features boost browser OpenTelemetry, env propagation, and runtime stability while a sweep of bug fixes tightens errors, file handling, mocks, and runner behavior for more reliable tests and builds.
🚀 Experimental Features
- Support openTelemetry for browser mode - by @hi-ogawa in #9180 (1ec3a)
- Support TRACEPARENT and TRACESTATE environment variables for OpenTelemetry context propagation - by @Copilot, hi-ogawa and @hi-ogawa in #9295 (876cb)
🐞 Bug Fixes
- Improve asymmetric matcher diff readability by unwrapping container matchers - by @Copilot, sheremet-va, hi-ogawa and @hi-ogawa in #9330 (b2ec7)
- Improve runner error when importing outside of test context - by @sheremet-va in #9335 (2dd3d)
- Replace crypto.randomUUID to allow insecure environments (fix #9… - by @plusgut in #9339 and #9 (e6a3f)
- Handle null options in addEventHandler #9371 - by @ThibautMarechal in #9372 and #9371 (40841)
- Typo in browser.provider error - by @deammer in #9394 (4b67f)
browser:
- Fix process.env and import.meta.env defines in inline project - by @hi-ogawa in #9239 (b70c9)
- Fix upload File instance - by @hi-ogawa in #9294 (b6778)
- Fix invalid project token for artifacts assets - by @hi-ogawa in #9321 (caa7d)
- Log ErrorEvent.message when unhandled ErrorEvent.error is null - by @hi-ogawa in #9322 (5d84e)
- Support fileParallelism on an instance - by @sheremet-va in #9328 (15006)
coverage:
- Remove unnecessary istanbul-lib-source-maps usage - by @AriPerkkio in #9344 (b0940)
- Apply patch from istanbuljs/istanbuljs#837 - by @AriPerkkio and sapphi-red in #9413 and #837 (e05ce)
fsModuleCache:
- Don't store importers in cache - by @sheremet-va in #9422 (75136)
- Add importers alongside importedModules - by @sheremet-va in #9423 (59f92)
mocker:
- Fix mock transform with class - by @hi-ogawa in #9421 (d390e)
pool:
- Validate environment options when reusing the worker - by @sheremet-va in #9349 (a8a88)
- Handle worker start failures gracefully - by @AriPerkkio in #9337 (200da)
reporter:
- Report test module if it failed to run - by @sheremet-va in #9272 (c7888)
runner:
- Respect nested test.only within describe.only - by @Ujjwaljain16 in #9021 and #9213 (55d5d)
typecheck:
- Improve error message when tsc outputs help text - by @Ujjwaljain16 in #9214 (7b10a)
ui:
- Detect gzip by magic numbers instead of Content-Type header in html reporter - by @Copilot, hi-ogawa and @hi-ogawa in #9278 (dd033)
webdriverio:
- Fall back to WebDriver Classic #9244 - by @JustasMonkev in #9373 and #9244 (c23dd)
View changes on GitHub
Original source Report a problem - Dec 16, 2025
- Date parsed from source:Dec 16, 2025
- First seen by Releasebot:Dec 17, 2025
v4.0.16
ViTest delivers a focused bug fix release that smooths browser mode, improves stability, and tightens import handling. It fixes default test timeouts, prevents crashes, enhances dynamic imports, and polishes the module graph and console reporting.
🐞 Bug Fixes
- Fix browser mode default testTimeout back to 15 seconds - by @hi-ogawa in #9167 (da0ad)
- Avoid crashing on process.versions stub - by @AriPerkkio in #9174 (78cfb)
- Reject calling suite function inside test - by @hi-ogawa in #9198 (1a259)
- Allow inlining fully dynamic import - by @hi-ogawa in #9137 (56851)
- Fix module graph UI on html reporter with headless browser mode - by @hi-ogawa in #9219 (60642)
- Log deprecated test.poolOptions if it's set - by @sheremet-va in #9226 (f7f6a)
- View changes on GitHub
browser:
- Import recordArtifact from the vitest package - by @macarie in #9186 (01c56)
- Fix import.meta.env define - by @hi-ogawa in #9205 (01a9a)
- String formatting bug when including placeholders in console.log - by @michael-debs and @hi-ogawa in #9030 and #9131 (84a30)
coverage:
- Istanbul untested files source maps are off - by @AriPerkkio in #9208 (372e8)
experimental:
Export setupEnvironment for custom pools - by @AriPerkkio in #9187 (5d26b)
View changes on GitHub
- Dec 2, 2025
- Date parsed from source:Dec 2, 2025
- First seen by Releasebot:Dec 12, 2025
v4.0.15
A broad release brings experimental features cache opt-out, cache fixes, and many bug fixes across reporters, browser tests, dependencies, docs, and web workers. It signals actual shipped updates and improvements for users.
🚀 Experimental Features
- cache: Add opt-out on a plugin level, fix internal root cache - by @sheremet-va in #9154 (a68f7)
- reporters: Print import duration breakdown - by @sheremet-va in #9105 (122ff)
🐞 Bug Fixes
- Keep built-in id as is in bun and deno - by @sheremet-va in #9117 (075ab)
- Use optimizeDeps.rolldownOptions to fix depreated warning + fix ssr.external: true - by @hi-ogawa in #9121 (fd8bd)
- Fix external behavior with deps.optimizer - by @hi-ogawa in #9125 (4c754)
- Very minor typo in "Chrome DevTools Protocol" - by @HowToTestFrontend in #9146 (20997)
- browser: Run toMatchScreenshot only once when used with expect.element - by @macarie in #9132 (0d2e7)
- coverage: Istanbul provider to not break source maps - by @AriPerkkio in #9040 (e4ca9)
- deps: Update dependency tinyexec to v1 - in #9122 (fd786)
- docs: Remove --browser.provider from docs - by @sheremet-va in #9115 (120b3)
- expect: Preserve currentTestName in extended matchers - by @macarie in #9106 (e4345)
- pool: Terminate workers on CTRL+c forceful exits - by @AriPerkkio in #9140 (d57d8)
- reporters: Show project in github reporter - by @sheremet-va in #9138 (bb65e)
- spy: Do not mock overriden method, if parent was automocked - by @sheremet-va in #9116 (1a246)
- web-worker: MessagePort objects passed to Worker.postMessage work when clone === "native" - by @whitphx in #9118 (deee8)
View changes on GitHub
Original source Report a problem - Nov 25, 2025
- Date parsed from source:Nov 25, 2025
- First seen by Releasebot:Dec 12, 2025
v4.0.14
New features and fixes shipped in this release with a focus on safer DOM tooling, faster runtimes and better debugging. Highlights include a tabbed failure view, pretty DOM utilities, and performance improvements across browser, jsdom and web workers. See GitHub for full changes.
🚀 Experimental Features
- browser: Expose utils.configurePrettyDOM - by @sheremet-va in #9103 (2cc34)
- runner: Add full names to tasks - by @macarie in #9087 (821aa)
- ui: Add tabbed failure view for toMatchScreenshot with comparison slider - by @macarie in #8813 (c37c2)
🐞 Bug Fixes
Externalize before caching - by @sheremet-va in #9077 (e1b2e)
Collect the duration of external imports - by @sheremet-va in #9097 (3326c)
Rename collect to import, remove prepare - by @sheremet-va in #9091 (1256b)
browser:
- Unsubscribe onCancel on rpc destroy - by @AriPerkkio in #9088 (f5b72)
- Revert the viewport scaling in non-ui mode #9018 - by @sheremet-va in #9072 and #9018 (64502)
coverage:
- Invalidate circular modules correctly on rerun with coverage - by @aicest in #9096 (6f22c)
expect:
- Allow function as standard schema - by @hi-ogawa in #9099 (ed8a2)
jsdom:
- Reuse abort signals if possible - by @sheremet-va in #9090 (2c468)
pool:
- Init VITEST_POOL_ID + VITEST_WORKER_ID before environment setup - by @AriPerkkio in #9085 (37918)
web-worker:
- postMessage to send ports to workers - by @whitphx and @AriPerkkio in #9078 (9d176)
🏎 Performance
Replace debug with obug - by @sxzz and @AriPerkkio in #9057 (acc51)
View changes on GitHub
- Nov 21, 2025
- Date parsed from source:Nov 21, 2025
- First seen by Releasebot:Dec 12, 2025
v4.0.13
🐞 Bug Fixes
types:
- Don't use type from Vite 7.1 - by @sheremet-va in #9071 (6356b)
- Don't import node.js dependent types in vitest/browser - by @sheremet-va in #9068 (332af)
🏎 Performance
- Avoid fetchModule roundtrip if the module is cached - by @sheremet-va in #9075 (b27e0)
- experimental: If fsCacheModule is enabled, read from the memory when possible - by @sheremet-va in #9076 (6b9a1)
View changes on GitHub
Original source Report a problem