This PR contains the following updates: | Package | Change | [Age](https://docs.renovatebot.com/merge-confidence/) | [Confidence](https://docs.renovatebot.com/merge-confidence/) | |---|---|---|---| | [@vitest/coverage-v8](https://vitest.dev/guide/coverage) ([source](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8)) | [`4.0.18` → `4.1.4`](https://renovatebot.com/diffs/npm/@vitest%2fcoverage-v8/4.0.18/4.1.4) |  |  | | [dotenv](https://github.com/motdotla/dotenv) | [`17.3.1` → `17.4.2`](https://renovatebot.com/diffs/npm/dotenv/17.3.1/17.4.2) |  |  | | [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | [`10.0.1` → `10.2.0`](https://renovatebot.com/diffs/npm/eslint/10.0.1/10.2.0) |  |  | | [globals](https://github.com/sindresorhus/globals) | [`17.3.0` → `17.5.0`](https://renovatebot.com/diffs/npm/globals/17.3.0/17.5.0) |  |  | | [puppeteer](https://github.com/puppeteer/puppeteer/tree/main#readme) ([source](https://github.com/puppeteer/puppeteer)) | [`24.37.5` → `24.40.0`](https://renovatebot.com/diffs/npm/puppeteer/24.37.5/24.40.0) |  |  | | [vitest](https://vitest.dev) ([source](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest)) | [`4.0.18` → `4.1.4`](https://renovatebot.com/diffs/npm/vitest/4.0.18/4.1.4) |  |  | --- ### Release Notes <details> <summary>vitest-dev/vitest (@​vitest/coverage-v8)</summary> ### [`v4.1.4`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.4) [Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4) ##### 🚀 Experimental Features - **coverage**: - Default to text reporter `skipFull` if agent detected - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10018](https://github.com/vitest-dev/vitest/issues/10018) [<samp>(53757)</samp>](https://github.com/vitest-dev/vitest/commit/53757804c) - **experimental**: - Expose `assertion` as a public field - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10095](https://github.com/vitest-dev/vitest/issues/10095) [<samp>(a120e)</samp>](https://github.com/vitest-dev/vitest/commit/a120e3ab8) - Support aria snapshot - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6 (1M context)**, [@​AriPerkkio](https://github.com/AriPerkkio), **Codex** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9668](https://github.com/vitest-dev/vitest/issues/9668) [<samp>(d4fbb)</samp>](https://github.com/vitest-dev/vitest/commit/d4fbb5cc9) - **reporter**: - Add filterMeta option to json reporter - by [@​nami8824](https://github.com/nami8824) and [@​sheremet-va](https://github.com/sheremet-va) in [#​10078](https://github.com/vitest-dev/vitest/issues/10078) [<samp>(b77de)</samp>](https://github.com/vitest-dev/vitest/commit/b77de968e) ##### 🐞 Bug Fixes - Use "black" foreground for labeled terminal message to ensure contrast - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10076](https://github.com/vitest-dev/vitest/issues/10076) [<samp>(203f0)</samp>](https://github.com/vitest-dev/vitest/commit/203f07af7) - Make `expect(..., message)` consistent as error message prefix - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#​10068](https://github.com/vitest-dev/vitest/issues/10068) [<samp>(a1b5f)</samp>](https://github.com/vitest-dev/vitest/commit/a1b5f0f4f) - Do not hoist imports whose names match class properties . - by [@​SunsetFi](https://github.com/SunsetFi) in [#​10093](https://github.com/vitest-dev/vitest/issues/10093) and [#​10094](https://github.com/vitest-dev/vitest/issues/10094) [<samp>(0fc4b)</samp>](https://github.com/vitest-dev/vitest/commit/0fc4b47e0) - **browser**: Spread user server options into browser Vite server in project - by [@​GoldStrikeArch](https://github.com/GoldStrikeArch) in [#​10049](https://github.com/vitest-dev/vitest/issues/10049) [<samp>(65c9d)</samp>](https://github.com/vitest-dev/vitest/commit/65c9d55eb) ##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.3...v4.1.4) ### [`v4.1.3`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.3) [Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3) ##### 🚀 Experimental Features - Add `experimental.preParse` flag - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10070](https://github.com/vitest-dev/vitest/issues/10070) [<samp>(78273)</samp>](https://github.com/vitest-dev/vitest/commit/7827363bd) - Support `browser.locators.exact` option - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10013](https://github.com/vitest-dev/vitest/issues/10013) [<samp>(48799)</samp>](https://github.com/vitest-dev/vitest/commit/487990a19) - Add `TestAttachment.bodyEncoding` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9969](https://github.com/vitest-dev/vitest/issues/9969) [<samp>(89ca0)</samp>](https://github.com/vitest-dev/vitest/commit/89ca0e254) - Support custom snapshot matcher - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Sonnet 4.6** and **Codex** in [#​9973](https://github.com/vitest-dev/vitest/issues/9973) [<samp>(59b0e)</samp>](https://github.com/vitest-dev/vitest/commit/59b0e6411) ##### 🐞 Bug Fixes - Advance fake timers with `expect.poll` interval - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​10022](https://github.com/vitest-dev/vitest/issues/10022) [<samp>(3f5bf)</samp>](https://github.com/vitest-dev/vitest/commit/3f5bfa365) - Add `@vitest/coverage-v8` and `@vitest/coverage-istanbul` as optional dependency - by [@​alan-agius4](https://github.com/alan-agius4) in [#​10025](https://github.com/vitest-dev/vitest/issues/10025) [<samp>(146d4)</samp>](https://github.com/vitest-dev/vitest/commit/146d4f0a0) - Fix `defineHelper` for webkit async stack trace + update playwright 1.59.0 - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​10036](https://github.com/vitest-dev/vitest/issues/10036) [<samp>(5a5fa)</samp>](https://github.com/vitest-dev/vitest/commit/5a5fa49fe) - Fix suite hook throwing errors for unused auto test-scoped fixture - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​10035](https://github.com/vitest-dev/vitest/issues/10035) [<samp>(39865)</samp>](https://github.com/vitest-dev/vitest/commit/398657e8d) - **expect**: - Remove `JestExtendError.context` from verbose error reporting - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9983](https://github.com/vitest-dev/vitest/issues/9983) [<samp>(66751)</samp>](https://github.com/vitest-dev/vitest/commit/66751c9e8) - Don't leak "runner" types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10004](https://github.com/vitest-dev/vitest/issues/10004) [<samp>(ec204)</samp>](https://github.com/vitest-dev/vitest/commit/ec2045543) - **snapshot**: - Fix flagging obsolete snapshots for snapshot properties mismatch - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​9986](https://github.com/vitest-dev/vitest/issues/9986) [<samp>(6b869)</samp>](https://github.com/vitest-dev/vitest/commit/6b869156b) - Export custom snapshot matcher helper from `vitest` - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Codex** in [#​10042](https://github.com/vitest-dev/vitest/issues/10042) [<samp>(691d3)</samp>](https://github.com/vitest-dev/vitest/commit/691d341fd) - **ui**: - Don't leak vite types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​10005](https://github.com/vitest-dev/vitest/issues/10005) [<samp>(fdff1)</samp>](https://github.com/vitest-dev/vitest/commit/fdff1bf9a) - **vm**: - Fix external module resolve error with deps optimizer query - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Sonnet 4.6** in [#​10024](https://github.com/vitest-dev/vitest/issues/10024) [<samp>(9dbf4)</samp>](https://github.com/vitest-dev/vitest/commit/9dbf47786) ##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.2...v4.1.3) ### [`v4.1.2`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.2) [Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.1...v4.1.2) This release bumps Vitest's `flatted` version and removes version pinning to resolve `flatted`'s CVE related issues ([#​9975](https://github.com/vitest-dev/vitest/issues/9975)). ##### 🐞 Bug Fixes - Don't resolve `setupFiles` from parent directory - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9960](https://github.com/vitest-dev/vitest/issues/9960) [<samp>(7aa93)</samp>](https://github.com/vitest-dev/vitest/commit/7aa937776) - Ensure sequential mock/unmock resolution - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9830](https://github.com/vitest-dev/vitest/issues/9830) [<samp>(7c065)</samp>](https://github.com/vitest-dev/vitest/commit/7c06598db) - **browser**: Take failure screenshot if `toMatchScreenshot` can't capture a stable screenshot - by [@​macarie](https://github.com/macarie) in [#​9847](https://github.com/vitest-dev/vitest/issues/9847) [<samp>(faace)</samp>](https://github.com/vitest-dev/vitest/commit/faace1fbe) - **coverage**: Correct `coverageConfigDefaults` values and types - by [@​Arthie](https://github.com/Arthie) in [#​9940](https://github.com/vitest-dev/vitest/issues/9940) [<samp>(b3c99)</samp>](https://github.com/vitest-dev/vitest/commit/b3c992cb2) - **pretty-format**: Fix output limit over counting - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9965](https://github.com/vitest-dev/vitest/issues/9965) [<samp>(d3b7a)</samp>](https://github.com/vitest-dev/vitest/commit/d3b7a40fa) - Disable colors if agent is detected - by [@​sheremet-va](https://github.com/sheremet-va) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9851](https://github.com/vitest-dev/vitest/issues/9851) [<samp>(6f97b)</samp>](https://github.com/vitest-dev/vitest/commit/6f97b55dd) ##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.1...v4.1.2) ### [`v4.1.1`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.1) [Compare Source](https://github.com/vitest-dev/vitest/compare/v4.1.0...v4.1.1) ##### 🚀 Features - **experimental**: - Expose `matchesTags` to test if the current filter matches tags - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9913](https://github.com/vitest-dev/vitest/issues/9913) [<samp>(eec53)</samp>](https://github.com/vitest-dev/vitest/commit/eec53d9f5) - Introduce `experimental.vcsProvider` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9928](https://github.com/vitest-dev/vitest/issues/9928) [<samp>(56115)</samp>](https://github.com/vitest-dev/vitest/commit/561150036) ##### 🐞 Bug Fixes - Mark `TestProject.testFilesList` internal properly - by [@​sapphi-red](https://github.com/sapphi-red) in [#​9867](https://github.com/vitest-dev/vitest/issues/9867) [<samp>(54f26)</samp>](https://github.com/vitest-dev/vitest/commit/54f2660f5) - Detect fixture that returns without calling `use` - by [@​oilater](https://github.com/oilater) in [#​9831](https://github.com/vitest-dev/vitest/issues/9831) and [#​9861](https://github.com/vitest-dev/vitest/issues/9861) [<samp>(633ae)</samp>](https://github.com/vitest-dev/vitest/commit/633ae2303) - Drop vite 8.beta support - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9862](https://github.com/vitest-dev/vitest/issues/9862) [<samp>(b78f5)</samp>](https://github.com/vitest-dev/vitest/commit/b78f5389d) - Type regression in vi.mocked() static class methods - by [@​purepear](https://github.com/purepear) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9857](https://github.com/vitest-dev/vitest/issues/9857) [<samp>(90926)</samp>](https://github.com/vitest-dev/vitest/commit/90926641b) - Properly re-evaluate actual modules of mocked external - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9898](https://github.com/vitest-dev/vitest/issues/9898) [<samp>(ae5ec)</samp>](https://github.com/vitest-dev/vitest/commit/ae5ec03ef) - Preserve coverage report when html reporter overlaps - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9889](https://github.com/vitest-dev/vitest/issues/9889) [<samp>(2d81a)</samp>](https://github.com/vitest-dev/vitest/commit/2d81ad897) - Provide `vi.advanceTimers` to the preview provider - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9891](https://github.com/vitest-dev/vitest/issues/9891) [<samp>(1bc3e)</samp>](https://github.com/vitest-dev/vitest/commit/1bc3e63be) - Don't leak event listener in playwright provider - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9910](https://github.com/vitest-dev/vitest/issues/9910) [<samp>(d9355)</samp>](https://github.com/vitest-dev/vitest/commit/d93550ff7) - Open browser in `--standalone` mode without running tests - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9911](https://github.com/vitest-dev/vitest/issues/9911) [<samp>(e78ad)</samp>](https://github.com/vitest-dev/vitest/commit/e78adcf97) - Guard disposable and optional `body` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9912](https://github.com/vitest-dev/vitest/issues/9912) [<samp>(6fdb2)</samp>](https://github.com/vitest-dev/vitest/commit/6fdb2ba61) - Resolve `retry.condition` RegExp serialization issue - by [@​nstepien](https://github.com/nstepien) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9942](https://github.com/vitest-dev/vitest/issues/9942) [<samp>(7b605)</samp>](https://github.com/vitest-dev/vitest/commit/7b6054328) - **collect**: - Don't treat extra props on `test` return as tests - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9871](https://github.com/vitest-dev/vitest/issues/9871) [<samp>(141e7)</samp>](https://github.com/vitest-dev/vitest/commit/141e72aa1) - **coverage**: - Simplify provider types - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9931](https://github.com/vitest-dev/vitest/issues/9931) [<samp>(aaf9f)</samp>](https://github.com/vitest-dev/vitest/commit/aaf9f18ae) - Load built-in provider without module runner - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9939](https://github.com/vitest-dev/vitest/issues/9939) [<samp>(bf892)</samp>](https://github.com/vitest-dev/vitest/commit/bf8920817) - **expect**: - Soft assertions continue after .resolves/.rejects promise errors - by [@​mixelburg](https://github.com/mixelburg), **Maks Pikov**, **Claude Opus 4.6 (1M context)** and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9843](https://github.com/vitest-dev/vitest/issues/9843) [<samp>(6d74b)</samp>](https://github.com/vitest-dev/vitest/commit/6d74b4948) - Fix sinon-chai style API - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9943](https://github.com/vitest-dev/vitest/issues/9943) [<samp>(0f08d)</samp>](https://github.com/vitest-dev/vitest/commit/0f08dda2c) - **pretty-format**: - Limit output for large object - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6 (1M context)** in [#​9949](https://github.com/vitest-dev/vitest/issues/9949) [<samp>(0d5f9)</samp>](https://github.com/vitest-dev/vitest/commit/0d5f9d6ef) ##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.1.0...v4.1.1) ### [`v4.1.0`](https://github.com/vitest-dev/vitest/releases/tag/v4.1.0) [Compare Source](https://github.com/vitest-dev/vitest/compare/v4.0.18...v4.1.0) 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](https://vitest.dev/blog/vitest-4-1). ##### 🚀 Features - Return a disposable from doMock() - by [@​kirkwaiblinger](https://github.com/kirkwaiblinger) in [#​9332](https://github.com/vitest-dev/vitest/issues/9332) [<samp>(e3e65)</samp>](https://github.com/vitest-dev/vitest/commit/e3e659a96) - Added chai style assertions - by [@​ronnakamoto](https://github.com/ronnakamoto) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8842](https://github.com/vitest-dev/vitest/issues/8842) [<samp>(841df)</samp>](https://github.com/vitest-dev/vitest/commit/841df9ac5) - Update to sinon/fake-timers v15 and add `setTickMode` to timer controls - by [@​atscott](https://github.com/atscott) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8726](https://github.com/vitest-dev/vitest/issues/8726) [<samp>(4b480)</samp>](https://github.com/vitest-dev/vitest/commit/4b480aaed) - Expose matcher types - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9448](https://github.com/vitest-dev/vitest/issues/9448) [<samp>(3e4b9)</samp>](https://github.com/vitest-dev/vitest/commit/3e4b913b1) - Add `toTestSpecification` to reported tasks - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9464](https://github.com/vitest-dev/vitest/issues/9464) [<samp>(1a470)</samp>](https://github.com/vitest-dev/vitest/commit/1a4705da9) - Show a warning if `vi.mock` or `vi.hoisted` are declared outside of top level of the module - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9387](https://github.com/vitest-dev/vitest/issues/9387) [<samp>(5db54)</samp>](https://github.com/vitest-dev/vitest/commit/5db54a468) - Track and display expectedly failed tests (.fails) in UI and CLI - by [@​Copilot](https://github.com/Copilot), **sheremet-va** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9476](https://github.com/vitest-dev/vitest/issues/9476) [<samp>(77d75)</samp>](https://github.com/vitest-dev/vitest/commit/77d75fd34) - Support tags - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9478](https://github.com/vitest-dev/vitest/issues/9478) [<samp>(de7c8)</samp>](https://github.com/vitest-dev/vitest/commit/de7c8a521) - Implement `aroundEach` and `aroundAll` hooks - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9450](https://github.com/vitest-dev/vitest/issues/9450) [<samp>(2a8cb)</samp>](https://github.com/vitest-dev/vitest/commit/2a8cb9dc2) - Stabilize experimental features - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9529](https://github.com/vitest-dev/vitest/issues/9529) [<samp>(b5fd2)</samp>](https://github.com/vitest-dev/vitest/commit/b5fd2a16a) - Accept `new` or `all` in `--update` flag - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9543](https://github.com/vitest-dev/vitest/issues/9543) [<samp>(a5acf)</samp>](https://github.com/vitest-dev/vitest/commit/a5acf28a5) - Support `meta` in test options - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9535](https://github.com/vitest-dev/vitest/issues/9535) [<samp>(7d622)</samp>](https://github.com/vitest-dev/vitest/commit/7d622e3d1) - Support type inference with a new `test.extend` syntax - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9550](https://github.com/vitest-dev/vitest/issues/9550) [<samp>(e5385)</samp>](https://github.com/vitest-dev/vitest/commit/e53854fcc) - Support vite 8 beta, fix type issues in the config with different vite versions - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9587](https://github.com/vitest-dev/vitest/issues/9587) [<samp>(99028)</samp>](https://github.com/vitest-dev/vitest/commit/990281dfd) - Add assertion helper to hide internal stack traces - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9594](https://github.com/vitest-dev/vitest/issues/9594) [<samp>(eeb0a)</samp>](https://github.com/vitest-dev/vitest/commit/eeb0ae2f8) - Store failure screenshots using artifacts API - by [@​macarie](https://github.com/macarie) in [#​9588](https://github.com/vitest-dev/vitest/issues/9588) [<samp>(24603)</samp>](https://github.com/vitest-dev/vitest/commit/24603e3c4) - Allow `vitest list` to statically collect tests instead of running files to collect them - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9630](https://github.com/vitest-dev/vitest/issues/9630) [<samp>(7a8e7)</samp>](https://github.com/vitest-dev/vitest/commit/7a8e7fc20) - Add `--detect-async-leaks` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9528](https://github.com/vitest-dev/vitest/issues/9528) [<samp>(c594d)</samp>](https://github.com/vitest-dev/vitest/commit/c594d4af3) - Implement `mockThrow` and `mockThrowOnce` - by [@​thor-juhasz](https://github.com/thor-juhasz) and [@​sheremet-va](https://github.com/sheremet-va) in [#​9512](https://github.com/vitest-dev/vitest/issues/9512) [<samp>(61917)</samp>](https://github.com/vitest-dev/vitest/commit/619179fb7) - Support `update: "none"` and add docs about snapshots behavior on CI - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9700](https://github.com/vitest-dev/vitest/issues/9700) [<samp>(05f18)</samp>](https://github.com/vitest-dev/vitest/commit/05f1854e2) - Support playwright `launchOptions` with `connectOptions` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9702](https://github.com/vitest-dev/vitest/issues/9702) [<samp>(f0ff1)</samp>](https://github.com/vitest-dev/vitest/commit/f0ff1b2a0) - Add `page/locator.mark` API to enhance playwright trace - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9652](https://github.com/vitest-dev/vitest/issues/9652) [<samp>(d0ee5)</samp>](https://github.com/vitest-dev/vitest/commit/d0ee546fe) - **api**: - Support tests starting or ending with `test` in `experimental_parseSpecification` - by [@​jgillick](https://github.com/jgillick) and **Jeremy Gillick** in [#​9235](https://github.com/vitest-dev/vitest/issues/9235) [<samp>(2f367)</samp>](https://github.com/vitest-dev/vitest/commit/2f367fad3) - Add filters to `createSpecification` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9336](https://github.com/vitest-dev/vitest/issues/9336) [<samp>(c8e6c)</samp>](https://github.com/vitest-dev/vitest/commit/c8e6c7fbf) - Expose `runTestFiles` as alternative to `runTestSpecifications` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9443](https://github.com/vitest-dev/vitest/issues/9443) [<samp>(43d76)</samp>](https://github.com/vitest-dev/vitest/commit/43d761821) - Add `allowWrite` and `allowExec` options to `api` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9350](https://github.com/vitest-dev/vitest/issues/9350) [<samp>(20e00)</samp>](https://github.com/vitest-dev/vitest/commit/20e00ef78) - Allow passing down test cases to `toTestSpecification` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9627](https://github.com/vitest-dev/vitest/issues/9627) [<samp>(6f17d)</samp>](https://github.com/vitest-dev/vitest/commit/6f17d5ddf) - **browser**: - Add `userEvent.wheel` API - by [@​macarie](https://github.com/macarie) in [#​9188](https://github.com/vitest-dev/vitest/issues/9188) [<samp>(66080)</samp>](https://github.com/vitest-dev/vitest/commit/660801979) - Add `filterNode` option to prettyDOM for filtering browser assertion error output - by [@​Copilot](https://github.com/Copilot), **sheremet-va** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9475](https://github.com/vitest-dev/vitest/issues/9475) [<samp>(d3220)</samp>](https://github.com/vitest-dev/vitest/commit/d3220fcd8) - Support playwright persistent context - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9229](https://github.com/vitest-dev/vitest/issues/9229) [<samp>(f865d)</samp>](https://github.com/vitest-dev/vitest/commit/f865d2ba4) - Added `detailsPanelPosition` option and button - by [@​shairez](https://github.com/shairez) in [#​9525](https://github.com/vitest-dev/vitest/issues/9525) [<samp>(c8a31)</samp>](https://github.com/vitest-dev/vitest/commit/c8a31147c) - Use BlazeDiff instead of pixelmatch - by [@​macarie](https://github.com/macarie) in [#​9514](https://github.com/vitest-dev/vitest/issues/9514) [<samp>(30936)</samp>](https://github.com/vitest-dev/vitest/commit/309362089) - Add `findElement` and enable strict mode in webdriverio and preview - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9677](https://github.com/vitest-dev/vitest/issues/9677) [<samp>(c3f37)</samp>](https://github.com/vitest-dev/vitest/commit/c3f37721c) - **cli**: - Add [@​bomb](https://github.com/bomb).sh/tab completions - by [@​AmirSa12](https://github.com/AmirSa12) and [@​sheremet-va](https://github.com/sheremet-va) in [#​8639](https://github.com/vitest-dev/vitest/issues/8639) [<samp>(200f3)</samp>](https://github.com/vitest-dev/vitest/commit/200f31704) - **coverage**: - Support `ignore start/stop` ignore hints - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9204](https://github.com/vitest-dev/vitest/issues/9204) [<samp>(e59c9)</samp>](https://github.com/vitest-dev/vitest/commit/e59c94ba6) - Add `coverage.changed` option to report only changed files - by [@​kykim00](https://github.com/kykim00) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9521](https://github.com/vitest-dev/vitest/issues/9521) [<samp>(1d939)</samp>](https://github.com/vitest-dev/vitest/commit/1d9392c67) - **experimental**: - Add `onModuleRunner` hook to `worker.init` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9286](https://github.com/vitest-dev/vitest/issues/9286) [<samp>(e977f)</samp>](https://github.com/vitest-dev/vitest/commit/e977f3deb) - Option to disable the module runner - by [@​sheremet-va](https://github.com/sheremet-va) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9210](https://github.com/vitest-dev/vitest/issues/9210) [<samp>(9be61)</samp>](https://github.com/vitest-dev/vitest/commit/9be6121ee) - Add `importDurations: { limit, print }` options - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9401](https://github.com/vitest-dev/vitest/issues/9401) [<samp>(7e10f)</samp>](https://github.com/vitest-dev/vitest/commit/7e10fb356) - Add print and fail thresholds for `importDurations` - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9533](https://github.com/vitest-dev/vitest/issues/9533) [<samp>(3f7a5)</samp>](https://github.com/vitest-dev/vitest/commit/3f7a5f8f8) - **fixtures**: - Pass down file context to `beforeAll`/`afterAll` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9572](https://github.com/vitest-dev/vitest/issues/9572) [<samp>(c8339)</samp>](https://github.com/vitest-dev/vitest/commit/c83395f2c) - **reporters**: - Add `agent` reporter to reduce ai agent token usage - by [@​cpojer](https://github.com/cpojer) in [#​9779](https://github.com/vitest-dev/vitest/issues/9779) [<samp>(3e9e0)</samp>](https://github.com/vitest-dev/vitest/commit/3e9e096a2) - **runner**: - Enhance `retry` options - by [@​MazenSamehR](https://github.com/MazenSamehR), **Matan Shavit**, [@​AriPerkkio](https://github.com/AriPerkkio) and [@​sheremet-va](https://github.com/sheremet-va) in [#​9370](https://github.com/vitest-dev/vitest/issues/9370) [<samp>(9e4cf)</samp>](https://github.com/vitest-dev/vitest/commit/9e4cfd295) - **ui**: - Allow run individual test/suites - by [@​userquin](https://github.com/userquin) in [#​9465](https://github.com/vitest-dev/vitest/issues/9465) [<samp>(73b10)</samp>](https://github.com/vitest-dev/vitest/commit/73b10f1b9) - Add project filter/sort support - by [@​userquin](https://github.com/userquin) in [#​8689](https://github.com/vitest-dev/vitest/issues/8689) [<samp>(0c7ea)</samp>](https://github.com/vitest-dev/vitest/commit/0c7eaac16) - Add duration sorting to explorer - by [@​julianhahn](https://github.com/julianhahn) and [@​cursoragent](https://github.com/cursoragent) in [#​9603](https://github.com/vitest-dev/vitest/issues/9603) [<samp>(209b1)</samp>](https://github.com/vitest-dev/vitest/commit/209b1b0e1) - Implement filter for slow tests - by [@​DerYeger](https://github.com/DerYeger) and [@​userquin](https://github.com/userquin) in [#​9705](https://github.com/vitest-dev/vitest/issues/9705) [<samp>(8880c)</samp>](https://github.com/vitest-dev/vitest/commit/8880c907a) - **vitest**: - Add run summary in GitHub Actions Reporter - by [@​macarie](https://github.com/macarie) and **jhnance** in [#​9579](https://github.com/vitest-dev/vitest/issues/9579) [<samp>(96bfc)</samp>](https://github.com/vitest-dev/vitest/commit/96bfc8345) ##### 🐞 Bug Fixes - Deprecate several vitest/\* entry points - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9347](https://github.com/vitest-dev/vitest/issues/9347) [<samp>(fd459)</samp>](https://github.com/vitest-dev/vitest/commit/fd45928be) - Use `meta.url` in `createRequire` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9441](https://github.com/vitest-dev/vitest/issues/9441) [<samp>(e3422)</samp>](https://github.com/vitest-dev/vitest/commit/e34225563) - Preact browser mode init example of render function not async - by [@​WuMingDao](https://github.com/WuMingDao) in [#​9375](https://github.com/vitest-dev/vitest/issues/9375) [<samp>(2bea5)</samp>](https://github.com/vitest-dev/vitest/commit/2bea549c7) - Deprecate unused types in matcher context - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9449](https://github.com/vitest-dev/vitest/issues/9449) [<samp>(20f87)</samp>](https://github.com/vitest-dev/vitest/commit/20f8753a2) - Handle `external/noExternal` during `configEnvironment` hook - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9508](https://github.com/vitest-dev/vitest/issues/9508) [<samp>(59ea2)</samp>](https://github.com/vitest-dev/vitest/commit/59ea27c1c) - Replace default ssr environment runner with Vitest server module runner - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9506](https://github.com/vitest-dev/vitest/issues/9506) [<samp>(cd5db)</samp>](https://github.com/vitest-dev/vitest/commit/cd5db660c) - Propagate experimental CLI options to child projects - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9531](https://github.com/vitest-dev/vitest/issues/9531) [<samp>(b624f)</samp>](https://github.com/vitest-dev/vitest/commit/b624fae53) - Show a warning when `browser.isolate` is used - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9410](https://github.com/vitest-dev/vitest/issues/9410) [<samp>(3d48e)</samp>](https://github.com/vitest-dev/vitest/commit/3d48ebcb9) - Fix `vi.mock({ spy: true })` node v8 coverage - by [@​hi-ogawa](https://github.com/hi-ogawa), **hi-ogawa** and **Claude Opus 4.6** in [#​9541](https://github.com/vitest-dev/vitest/issues/9541) [<samp>(687b6)</samp>](https://github.com/vitest-dev/vitest/commit/687b633c1) - Don't show internal ssr handler in errors - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9547](https://github.com/vitest-dev/vitest/issues/9547) [<samp>(76c43)</samp>](https://github.com/vitest-dev/vitest/commit/76c4397b5) - Close vitest if it failed to start - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9573](https://github.com/vitest-dev/vitest/issues/9573) [<samp>(728ba)</samp>](https://github.com/vitest-dev/vitest/commit/728ba617f) - Fix ssr environment runner in project - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9584](https://github.com/vitest-dev/vitest/issues/9584) [<samp>(09006)</samp>](https://github.com/vitest-dev/vitest/commit/090064f97) - Trim trailing white spaces in code block - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9591](https://github.com/vitest-dev/vitest/issues/9591) [<samp>(f78be)</samp>](https://github.com/vitest-dev/vitest/commit/f78bea992) - Support inline snapshot inside test.for/each - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9590](https://github.com/vitest-dev/vitest/issues/9590) [<samp>(615fd)</samp>](https://github.com/vitest-dev/vitest/commit/615fd521e) - Apply source maps for external module stack trace - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9152](https://github.com/vitest-dev/vitest/issues/9152) [<samp>(79e20)</samp>](https://github.com/vitest-dev/vitest/commit/79e20d5a3) - Remove the `.name` from statically collected test - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9596](https://github.com/vitest-dev/vitest/issues/9596) [<samp>(b66ff)</samp>](https://github.com/vitest-dev/vitest/commit/b66ff691a) - Don't suppress warnings on pnp - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9602](https://github.com/vitest-dev/vitest/issues/9602) [<samp>(89cbd)</samp>](https://github.com/vitest-dev/vitest/commit/89cbdaea3) - Support snapshot with `expect.soft` - by [@​iumehara](https://github.com/iumehara), [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9231](https://github.com/vitest-dev/vitest/issues/9231) [<samp>(3eb2c)</samp>](https://github.com/vitest-dev/vitest/commit/3eb2cd541) - Log seed when only `sequence.shuffle.tests` is enabled - by [@​kaigritun](https://github.com/kaigritun), **Kai Gritun** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9576](https://github.com/vitest-dev/vitest/issues/9576) [<samp>(8182b)</samp>](https://github.com/vitest-dev/vitest/commit/8182b77ad) - Externalize `expect/src/utils` from `vitest` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9616](https://github.com/vitest-dev/vitest/issues/9616) [<samp>(48739)</samp>](https://github.com/vitest-dev/vitest/commit/487398422) - Ignore test.override during static collection - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9620](https://github.com/vitest-dev/vitest/issues/9620) [<samp>(09174)</samp>](https://github.com/vitest-dev/vitest/commit/0917470ce) - Increase stacktrace limit for `--detect-async-leaks` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9638](https://github.com/vitest-dev/vitest/issues/9638) [<samp>(9fd4c)</samp>](https://github.com/vitest-dev/vitest/commit/9fd4ce533) - Hanging-reporter link in cli - by [@​flx-sta](https://github.com/flx-sta) in [#​9649](https://github.com/vitest-dev/vitest/issues/9649) [<samp>(7c103)</samp>](https://github.com/vitest-dev/vitest/commit/7c103055c) - Fix teardown timeout of `aroundEach/All` when inner `aroundEach/All` throws - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9657](https://github.com/vitest-dev/vitest/issues/9657) [<samp>(4ec6c)</samp>](https://github.com/vitest-dev/vitest/commit/4ec6cb305) - Fix ui mode / html reporter and coverage integration - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9626](https://github.com/vitest-dev/vitest/issues/9626) [<samp>(86fad)</samp>](https://github.com/vitest-dev/vitest/commit/86fad4b42) - Don't continue when `aroundEach/All` setup timed out - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9670](https://github.com/vitest-dev/vitest/issues/9670) [<samp>(bb013)</samp>](https://github.com/vitest-dev/vitest/commit/bb013d54b) - Align `VitestRunnerConfig` optional fields with `SerializedConfig` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9661](https://github.com/vitest-dev/vitest/issues/9661) [<samp>(79520)</samp>](https://github.com/vitest-dev/vitest/commit/79520d82d) - Handle Symbol values in format utility - by [@​nami8824](https://github.com/nami8824) in [#​9658](https://github.com/vitest-dev/vitest/issues/9658) [<samp>(0583f)</samp>](https://github.com/vitest-dev/vitest/commit/0583f067e) - Deprecate `toBe*` spy assertions in favor of `toHaveBeen*` (and `toThrowError`) - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9665](https://github.com/vitest-dev/vitest/issues/9665) [<samp>(4d390)</samp>](https://github.com/vitest-dev/vitest/commit/4d390dfe9) - Don't propagate nested `aroundEach/All` errors but aggregate them on runner - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9673](https://github.com/vitest-dev/vitest/issues/9673) [<samp>(b6365)</samp>](https://github.com/vitest-dev/vitest/commit/b63653f5a) - Show a better error if there is a pending dynamic import - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9676](https://github.com/vitest-dev/vitest/issues/9676) [<samp>(7ef5c)</samp>](https://github.com/vitest-dev/vitest/commit/7ef5cf4b7) - Preserve stack trace of `resolves/rejects` chained assertion error - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9679](https://github.com/vitest-dev/vitest/issues/9679) [<samp>(c6151)</samp>](https://github.com/vitest-dev/vitest/commit/c61511d4a) - Handle module-sync condition in vmThreads/vmForks require - by [@​lesleh](https://github.com/lesleh) in [#​9650](https://github.com/vitest-dev/vitest/issues/9650) and [#​9651](https://github.com/vitest-dev/vitest/issues/9651) [<samp>(bb203)</samp>](https://github.com/vitest-dev/vitest/commit/bb20389f4) - Hooks should respect `maxConcurrency` - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9653](https://github.com/vitest-dev/vitest/issues/9653) [<samp>(16d13)</samp>](https://github.com/vitest-dev/vitest/commit/16d13d981) - Recursively autospy module object - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9687](https://github.com/vitest-dev/vitest/issues/9687) [<samp>(695a8)</samp>](https://github.com/vitest-dev/vitest/commit/695a86b41) - Remove trailing spaces from diff error log - by [@​hi-ogawa](https://github.com/hi-ogawa) and [@​sheremet-va](https://github.com/sheremet-va) in [#​9680](https://github.com/vitest-dev/vitest/issues/9680) [<samp>(395d1)</samp>](https://github.com/vitest-dev/vitest/commit/395d1a29e) - Respect project `resolve.conditions` for externals - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9717](https://github.com/vitest-dev/vitest/issues/9717) [<samp>(1d498)</samp>](https://github.com/vitest-dev/vitest/commit/1d4987498) - Use object for WeakMap instead of a symbol to support webcontainers - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9731](https://github.com/vitest-dev/vitest/issues/9731) [<samp>(c5225)</samp>](https://github.com/vitest-dev/vitest/commit/c52259330) - Fix re-mocking virtual module - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9748](https://github.com/vitest-dev/vitest/issues/9748) [<samp>(3cbbb)</samp>](https://github.com/vitest-dev/vitest/commit/3cbbb17f1) - Cancelling should stop current test immediately - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9729](https://github.com/vitest-dev/vitest/issues/9729) [<samp>(0cb2f)</samp>](https://github.com/vitest-dev/vitest/commit/0cb2f7239) - Make `mockObject` change backwards compatible - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9744](https://github.com/vitest-dev/vitest/issues/9744) [<samp>(84c69)</samp>](https://github.com/vitest-dev/vitest/commit/84c69497f) - Fix `URL.name` on jsdom - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9767](https://github.com/vitest-dev/vitest/issues/9767) [<samp>(031f3)</samp>](https://github.com/vitest-dev/vitest/commit/031f3a374) - Save and restore module graph in blob reporter - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9740](https://github.com/vitest-dev/vitest/issues/9740) [<samp>(84355)</samp>](https://github.com/vitest-dev/vitest/commit/843554bf0) - Don't silence reporter errors from test runtime events handler in normal run and --merge-reports - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9727](https://github.com/vitest-dev/vitest/issues/9727) [<samp>(4072d)</samp>](https://github.com/vitest-dev/vitest/commit/4072d0132) - Fix `vi.importActual()` for virtual modules - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9772](https://github.com/vitest-dev/vitest/issues/9772) [<samp>(1e89e)</samp>](https://github.com/vitest-dev/vitest/commit/1e89ec020) - Throw `FixtureAccessError` if suite hook accesses undefined fixture - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9786](https://github.com/vitest-dev/vitest/issues/9786) [<samp>(fc2ce)</samp>](https://github.com/vitest-dev/vitest/commit/fc2cea2b7) - Allow hyphens in project config file name pattern - by [@​Koutaro-Hanabusa](https://github.com/Koutaro-Hanabusa) and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9760](https://github.com/vitest-dev/vitest/issues/9760) [<samp>(33e96)</samp>](https://github.com/vitest-dev/vitest/commit/33e96311a) - Manual and redirect mock shouldn't `load` or `transform` original module - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9774](https://github.com/vitest-dev/vitest/issues/9774) [<samp>(a8216)</samp>](https://github.com/vitest-dev/vitest/commit/a8216b001) - `hideSkippedTests` should not hide `test.todo` - by [@​oilater](https://github.com/oilater) in [#​9562](https://github.com/vitest-dev/vitest/issues/9562) and [#​9781](https://github.com/vitest-dev/vitest/issues/9781) [<samp>(8181e)</samp>](https://github.com/vitest-dev/vitest/commit/8181e06e7) - Allow catch/finally for async assertion - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9827](https://github.com/vitest-dev/vitest/issues/9827) [<samp>(031f0)</samp>](https://github.com/vitest-dev/vitest/commit/031f02a89) - Resolve fixture overrides from test's suite in `beforeEach` hooks - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9826](https://github.com/vitest-dev/vitest/issues/9826) [<samp>(99e52)</samp>](https://github.com/vitest-dev/vitest/commit/99e52fe58) - Use isAgent check, not just TTY, for watch mode - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9841](https://github.com/vitest-dev/vitest/issues/9841) [<samp>(c3cac)</samp>](https://github.com/vitest-dev/vitest/commit/c3cac1c1b) - Use `performance.now` to measure test timeout duration - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9795](https://github.com/vitest-dev/vitest/issues/9795) [<samp>(f48a6)</samp>](https://github.com/vitest-dev/vitest/commit/f48a60114) - Correctly identify concurrent test during static analysis - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9846](https://github.com/vitest-dev/vitest/issues/9846) [<samp>(1de0a)</samp>](https://github.com/vitest-dev/vitest/commit/1de0aa22d) - **browser**: - Avoid updating screenshots when `toMatchScreenshot` passes - by [@​macarie](https://github.com/macarie) in [#​9289](https://github.com/vitest-dev/vitest/issues/9289) [<samp>(46aab)</samp>](https://github.com/vitest-dev/vitest/commit/46aabaa44) - Hide injected data-testid attributes - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9503](https://github.com/vitest-dev/vitest/issues/9503) [<samp>(c8d2c)</samp>](https://github.com/vitest-dev/vitest/commit/c8d2c411c) - Throw an error if iframe was reloaded - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9516](https://github.com/vitest-dev/vitest/issues/9516) [<samp>(73a81)</samp>](https://github.com/vitest-dev/vitest/commit/73a81f880) - Encode projectName in browser client URL - by [@​dkkim0122](https://github.com/dkkim0122) in [#​9523](https://github.com/vitest-dev/vitest/issues/9523) [<samp>(5b164)</samp>](https://github.com/vitest-dev/vitest/commit/5b16483c3) - Don't take failure screenshot if tests have artifacts created by `toMatchScreenshot` - by [@​macarie](https://github.com/macarie) in [#​9552](https://github.com/vitest-dev/vitest/issues/9552) [<samp>(83ca0)</samp>](https://github.com/vitest-dev/vitest/commit/83ca02547) - Remove `--remote-debugging-address` from chrome args - by [@​hi-ogawa](https://github.com/hi-ogawa) and [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9712](https://github.com/vitest-dev/vitest/issues/9712) [<samp>(f09bb)</samp>](https://github.com/vitest-dev/vitest/commit/f09bb5c32) - Make sure userEvent actions support `ensureAwaited` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9732](https://github.com/vitest-dev/vitest/issues/9732) [<samp>(97685)</samp>](https://github.com/vitest-dev/vitest/commit/9768517b8) - Types of `getCDPSession` and `cdp()` - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9716](https://github.com/vitest-dev/vitest/issues/9716) [<samp>(689a2)</samp>](https://github.com/vitest-dev/vitest/commit/689a22a1b) - Skip esbuild.legalComments when using rolldown-vite - by [@​Copilot](https://github.com/Copilot), **hi-ogawa** and [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9803](https://github.com/vitest-dev/vitest/issues/9803) [<samp>(3505f)</samp>](https://github.com/vitest-dev/vitest/commit/3505fa5a3) - **chai**: - Don't allow `deepEqual` in the config because it's not serializable - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9666](https://github.com/vitest-dev/vitest/issues/9666) [<samp>(9ee99)</samp>](https://github.com/vitest-dev/vitest/commit/9ee999d73) - **coverage**: - Infer transform mode for uncovered files - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9435](https://github.com/vitest-dev/vitest/issues/9435) [<samp>(f3967)</samp>](https://github.com/vitest-dev/vitest/commit/f396792d6) - `thresholds.autoUpdate` to preserve ending whitespace - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9436](https://github.com/vitest-dev/vitest/issues/9436) [<samp>(7e534)</samp>](https://github.com/vitest-dev/vitest/commit/7e534a0b6) - **deps**: - Update all non-major dependencies - by [@​hi-ogawa](https://github.com/hi-ogawa) in [#​9192](https://github.com/vitest-dev/vitest/issues/9192) [<samp>(90c30)</samp>](https://github.com/vitest-dev/vitest/commit/90c302f3b) - Update all non-major dependencies - in [#​9485](https://github.com/vitest-dev/vitest/issues/9485) [<samp>(c0118)</samp>](https://github.com/vitest-dev/vitest/commit/c01186022) - Update all non-major dependencies - in [#​9567](https://github.com/vitest-dev/vitest/issues/9567) [<samp>(13c9e)</samp>](https://github.com/vitest-dev/vitest/commit/13c9e022b) - **docs**: - Fix old `/config/#option` hash links causing hydration errors - by [@​hi-ogawa](https://github.com/hi-ogawa), **Claude Opus 4.6** and [@​sheremet-va](https://github.com/sheremet-va) in [#​9610](https://github.com/vitest-dev/vitest/issues/9610) [<samp>(a603c)</samp>](https://github.com/vitest-dev/vitest/commit/a603c3a30) - **expect**: - `toMatchObject(Map/Set)` should expect `Map/Set` on left hand side - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9532](https://github.com/vitest-dev/vitest/issues/9532) [<samp>(381da)</samp>](https://github.com/vitest-dev/vitest/commit/381da4a9d) - Fix objectContaining with proxy - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9554](https://github.com/vitest-dev/vitest/issues/9554) [<samp>(7ce34)</samp>](https://github.com/vitest-dev/vitest/commit/7ce3417b1) - Support arbitrary value equality for `toThrow` and make Error detection robust - by [@​hi-ogawa](https://github.com/hi-ogawa) and **Claude Opus 4.6** in [#​9570](https://github.com/vitest-dev/vitest/issues/9570) [<samp>(de215)</samp>](https://github.com/vitest-dev/vitest/commit/de215c19c) - **mock**: - Inject helpers after hashbang if present - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9545](https://github.com/vitest-dev/vitest/issues/9545) [<samp>(65432)</samp>](https://github.com/vitest-dev/vitest/commit/65432a74b) - **mocker**: - Update vite's peer dependency range - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9808](https://github.com/vitest-dev/vitest/issues/9808) [<samp>(36f9a)</samp>](https://github.com/vitest-dev/vitest/commit/36f9a81a2) - **reporter**: - `dot` reporter leaves pending tests - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9684](https://github.com/vitest-dev/vitest/issues/9684) [<samp>(4d793)</samp>](https://github.com/vitest-dev/vitest/commit/4d7938a56) - **runner**: - Mark repeated tests as finished on last run - by [@​AriPerkkio](https://github.com/AriPerkkio) in [#​9707](https://github.com/vitest-dev/vitest/issues/9707) [<samp>(cc735)</samp>](https://github.com/vitest-dev/vitest/commit/cc735970a) - **spy**: - Support deep partial in vi.mocked - by [@​j2h30728](https://github.com/j2h30728) in [#​8152](https://github.com/vitest-dev/vitest/issues/8152) and [#​9493](https://github.com/vitest-dev/vitest/issues/9493) [<samp>(71cb5)</samp>](https://github.com/vitest-dev/vitest/commit/71cb51ffc) - Fallback to object accessor if descriptor's value is `undefined` - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9511](https://github.com/vitest-dev/vitest/issues/9511) [<samp>(6f181)</samp>](https://github.com/vitest-dev/vitest/commit/6f18103fa) - Throw correct errors when shorthand methods are used on a class - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9513](https://github.com/vitest-dev/vitest/issues/9513) [<samp>(5d0fd)</samp>](https://github.com/vitest-dev/vitest/commit/5d0fd3b62) - **types**: - `bench.reporters` no longer gives type errors when passing file name string paths - by [@​Bertie690](https://github.com/Bertie690) in [#​9695](https://github.com/vitest-dev/vitest/issues/9695) [<samp>(093c8)</samp>](https://github.com/vitest-dev/vitest/commit/093c8f6b5) - **ui**: - Process artifact attachments when generating HTML reporter - by [@​macarie](https://github.com/macarie) in [#​9472](https://github.com/vitest-dev/vitest/issues/9472) [<samp>(96eb9)</samp>](https://github.com/vitest-dev/vitest/commit/96eb92826) - Don't fail if --ui and --root are specified together - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9536](https://github.com/vitest-dev/vitest/issues/9536) [<samp>(d9305)</samp>](https://github.com/vitest-dev/vitest/commit/d93055fc7) ##### 🏎 Performance - **pretty-format**: Combine DOMElement plugins - by [@​sheremet-va](https://github.com/sheremet-va) in [#​9581](https://github.com/vitest-dev/vitest/issues/9581) [<samp>(da85a)</samp>](https://github.com/vitest-dev/vitest/commit/da85a3267) ##### [View changes on GitHub](https://github.com/vitest-dev/vitest/compare/v4.0.17...v4.1.0) </details> <details> <summary>motdotla/dotenv (dotenv)</summary> ### [`v17.4.2`](https://github.com/motdotla/dotenv/blob/HEAD/CHANGELOG.md#1742-2026-04-12) [Compare Source](https://github.com/motdotla/dotenv/compare/v17.4.1...v17.4.2) ##### Changed - Improved skill files - tightened up details ([#​1009](https://github.com/motdotla/dotenv/pull/1009)) ### [`v17.4.1`](https://github.com/motdotla/dotenv/blob/HEAD/CHANGELOG.md#1741-2026-04-05) [Compare Source](https://github.com/motdotla/dotenv/compare/v17.4.0...v17.4.1) ##### Changed - Change text `injecting` to `injected` ([#​1005](https://github.com/motdotla/dotenv/pull/1005)) ### [`v17.4.0`](https://github.com/motdotla/dotenv/blob/HEAD/CHANGELOG.md#1740-2026-04-01) [Compare Source](https://github.com/motdotla/dotenv/compare/v17.3.1...v17.4.0) ##### Added - Add `skills/` folder with focused agent skills: `skills/dotenv/SKILL.md` (core usage) and `skills/dotenvx/SKILL.md` (encryption, multiple environments, variable expansion) for AI coding agent discovery via the skills.sh ecosystem (`npx skills add motdotla/dotenv`) ##### Changed - Tighten up logs: `◇ injecting env (14) from .env` ([#​1003](https://github.com/motdotla/dotenv/pull/1003)) </details> <details> <summary>eslint/eslint (eslint)</summary> ### [`v10.2.0`](https://github.com/eslint/eslint/releases/tag/v10.2.0) [Compare Source](https://github.com/eslint/eslint/compare/v10.1.0...v10.2.0) #### Features - [`586ec2f`](https://github.com/eslint/eslint/commit/586ec2f43092779acc957866db4abe999112d1e1) feat: Add `meta.languages` support to rules ([#​20571](https://github.com/eslint/eslint/issues/20571)) (Copilot) - [`14207de`](https://github.com/eslint/eslint/commit/14207dee3939dc87cfa8b2fcfc271fff2cfd6471) feat: add `Temporal` to `no-obj-calls` ([#​20675](https://github.com/eslint/eslint/issues/20675)) (Pixel998) - [`bbb2c93`](https://github.com/eslint/eslint/commit/bbb2c93a2b31bd30924f32fe69a9acf41f9dfe35) feat: add Temporal to ES2026 globals ([#​20672](https://github.com/eslint/eslint/issues/20672)) (Pixel998) #### Bug Fixes - [`542cb3e`](https://github.com/eslint/eslint/commit/542cb3e6442a4e6ee3457c799e2a0ee23bef0c6a) fix: update first-party dependencies ([#​20714](https://github.com/eslint/eslint/issues/20714)) (Francesco Trotta) #### Documentation - [`a2af743`](https://github.com/eslint/eslint/commit/a2af743ea60f683d0e0de9d98267c1e7e4f5e412) docs: add `language` to configuration objects ([#​20712](https://github.com/eslint/eslint/issues/20712)) (Francesco Trotta) - [`845f23f`](https://github.com/eslint/eslint/commit/845f23f1370892bf07d819497ac518c9e65090d6) docs: Update README (GitHub Actions Bot) - [`5fbcf59`](https://github.com/eslint/eslint/commit/5fbcf5958b897cc4df5d652924d18428db37f7ee) docs: remove `sourceType` from ts playground link ([#​20477](https://github.com/eslint/eslint/issues/20477)) (Tanuj Kanti) - [`8702a47`](https://github.com/eslint/eslint/commit/8702a474659be786b6b1392e5e7c0c56355ae4a4) docs: Update README (GitHub Actions Bot) - [`ddeaded`](https://github.com/eslint/eslint/commit/ddeaded2ab36951383ff67c60fb64ec68d29a46a) docs: Update README (GitHub Actions Bot) - [`2b44966`](https://github.com/eslint/eslint/commit/2b4496691266547784a7f7ad1989ce53381bab91) docs: add Major Releases section to Manage Releases ([#​20269](https://github.com/eslint/eslint/issues/20269)) (Milos Djermanovic) - [`eab65c7`](https://github.com/eslint/eslint/commit/eab65c700ebb16a6e790910c720450c9908961fd) docs: update `eslint` versions in examples ([#​20664](https://github.com/eslint/eslint/issues/20664)) (루밀LuMir) - [`3e4a299`](https://github.com/eslint/eslint/commit/3e4a29903bf31f0998e45ad9128a265bce1edc56) docs: update ESM Dependencies policies with note for own-usage packages ([#​20660](https://github.com/eslint/eslint/issues/20660)) (Milos Djermanovic) #### Chores - [`8120e30`](https://github.com/eslint/eslint/commit/8120e30f833474f47acc061d24d164e9f022264f) refactor: extract no unmodified loop condition ([#​20679](https://github.com/eslint/eslint/issues/20679)) (kuldeep kumar) - [`46e8469`](https://github.com/eslint/eslint/commit/46e8469786be1b2bbb522100e1d44624d98d3745) chore: update dependency markdownlint-cli2 to ^0.22.0 ([#​20697](https://github.com/eslint/eslint/issues/20697)) (renovate\[bot]) - [`01ed3aa`](https://github.com/eslint/eslint/commit/01ed3aa68477f81a7188e1498cf4906e02015b7c) test: add unit tests for unicode utilities ([#​20622](https://github.com/eslint/eslint/issues/20622)) (Manish chaudhary) - [`811f493`](https://github.com/eslint/eslint/commit/811f4930f82ee2b6ac8eae75cade9bed63de0781) ci: remove `--legacy-peer-deps` from types integration tests ([#​20667](https://github.com/eslint/eslint/issues/20667)) (Milos Djermanovic) - [`6b86fcf`](https://github.com/eslint/eslint/commit/6b86fcfc5c75d6a3b8a2cf7bcdb3ef60635a9a03) chore: update dependency npm-run-all2 to v8 ([#​20663](https://github.com/eslint/eslint/issues/20663)) (renovate\[bot]) - [`632c4f8`](https://github.com/eslint/eslint/commit/632c4f83bf32b77981c7d395cacddd1bb172ee25) chore: add `prettier` update commit to `.git-blame-ignore-revs` ([#​20662](https://github.com/eslint/eslint/issues/20662)) (루밀LuMir) - [`b0b0f21`](https://github.com/eslint/eslint/commit/b0b0f21927e03ba092400e3c70d7058f537765c8) chore: update dependency eslint-plugin-regexp to ^3.1.0 ([#​20659](https://github.com/eslint/eslint/issues/20659)) (Milos Djermanovic) - [`228a2dd`](https://github.com/eslint/eslint/commit/228a2dd4b272c17f516ee3541f1dd69eca0a8ab0) chore: update dependency eslint-plugin-eslint-plugin to ^7.3.2 ([#​20661](https://github.com/eslint/eslint/issues/20661)) (Milos Djermanovic) - [`3ab4d7e`](https://github.com/eslint/eslint/commit/3ab4d7e244df244102de9d0d250b2ff12456a785) test: Add tests for eslintrc-style keys ([#​20645](https://github.com/eslint/eslint/issues/20645)) (kuldeep kumar) ### [`v10.1.0`](https://github.com/eslint/eslint/releases/tag/v10.1.0) [Compare Source](https://github.com/eslint/eslint/compare/v10.0.3...v10.1.0) #### Features - [`ff4382b`](https://github.com/eslint/eslint/commit/ff4382be349035acdb170627a2dc92828e134562) feat: apply fix for `no-var` in `TSModuleBlock` ([#​20638](https://github.com/eslint/eslint/issues/20638)) (Tanuj Kanti) - [`0916995`](https://github.com/eslint/eslint/commit/0916995b51528872b15ba4fedb24172cf25fcb3f) feat: Implement api support for bulk-suppressions ([#​20565](https://github.com/eslint/eslint/issues/20565)) (Blake Sager) #### Bug Fixes - [`2b8824e`](https://github.com/eslint/eslint/commit/2b8824e6be4223980e929a20025602df20d05ea2) fix: Prevent `no-var` autofix when a variable is used before declaration ([#​20464](https://github.com/eslint/eslint/issues/20464)) (Amaresh S M) - [`e58b4bf`](https://github.com/eslint/eslint/commit/e58b4bff167e79afd067d1b0ee9360bec2d3393e) fix: update eslint ([#​20597](https://github.com/eslint/eslint/issues/20597)) (renovate\[bot]) #### Documentation - [`b7b57fe`](https://github.com/eslint/eslint/commit/b7b57fe9942c572ff651230f1f96cefed787ca52) docs: use correct JSDoc link in require-jsdoc.md ([#​20641](https://github.com/eslint/eslint/issues/20641)) (mkemna-clb) - [`58e4cfc`](https://github.com/eslint/eslint/commit/58e4cfc7dbf0fe40c73f09bf0ff94ad944d0ba0e) docs: add deprecation notice partial ([#​20639](https://github.com/eslint/eslint/issues/20639)) (Milos Djermanovic) - [`7143dbf`](https://github.com/eslint/eslint/commit/7143dbf99df27c61edf1552da981794e99a0b2f2) docs: update v9 migration guide for `@eslint/js` usage ([#​20540](https://github.com/eslint/eslint/issues/20540)) (fnx) - [`035fc4f`](https://github.com/eslint/eslint/commit/035fc4fbe506e3e4524882cf50db37a4e430adf4) docs: note that `globalReturn` applies only with `sourceType: "script"` ([#​20630](https://github.com/eslint/eslint/issues/20630)) (Milos Djermanovic) - [`e972c88`](https://github.com/eslint/eslint/commit/e972c88ab7474a74191ee99ac2558b00d0427a8a) docs: merge ESLint option descriptions into type definitions ([#​20608](https://github.com/eslint/eslint/issues/20608)) (Francesco Trotta) - [`7f10d84`](https://github.com/eslint/eslint/commit/7f10d8440137f0cfd75f18f4746ba6a1c621b953) docs: Update README (GitHub Actions Bot) - [`aeed007`](https://github.com/eslint/eslint/commit/aeed0078ca2f73d4744cc522102178d45b5be64e) docs: open playground link in new tab ([#​20602](https://github.com/eslint/eslint/issues/20602)) (Tanuj Kanti) - [`a0d1a37`](https://github.com/eslint/eslint/commit/a0d1a3772679d3d74bb860fc65b5b58678acd452) docs: Add AI Usage Policy ([#​20510](https://github.com/eslint/eslint/issues/20510)) (Nicholas C. Zakas) #### Chores - [`a9f9cce`](https://github.com/eslint/eslint/commit/a9f9cce82d80b540a0e3549d0e91c16df28740d8) chore: update dependency eslint-plugin-unicorn to ^63.0.0 ([#​20584](https://github.com/eslint/eslint/issues/20584)) (Milos Djermanovic) - [`1f42bd7`](https://github.com/eslint/eslint/commit/1f42bd7876ae4192cf7f7f4faf73b4ef3d2563cb) chore: update `prettier` to 3.8.1 ([#​20651](https://github.com/eslint/eslint/issues/20651)) (루밀LuMir) - [`c0a6f4a`](https://github.com/eslint/eslint/commit/c0a6f4a2b4169edeca2a81bf7b47783e39ade366) chore: update dependency [@​eslint/json](https://github.com/eslint/json) to ^1.2.0 ([#​20652](https://github.com/eslint/eslint/issues/20652)) (renovate\[bot]) - [`cc43f79`](https://github.com/eslint/eslint/commit/cc43f795c42e5ec2f19bb43b1f6d534ef2e469f3) chore: update dependency c8 to v11 ([#​20650](https://github.com/eslint/eslint/issues/20650)) (renovate\[bot]) - [`2ce4635`](https://github.com/eslint/eslint/commit/2ce4635b036ff2665c7009afddf9c0fb2274dceb) chore: update dependency [@​eslint/json](https://github.com/eslint/json) to v1 ([#​20649](https://github.com/eslint/eslint/issues/20649)) (renovate\[bot]) - [`f0406ee`](https://github.com/eslint/eslint/commit/f0406eedcc3dc415babbbf6bbdb5db1eebfd487b) chore: update dependency markdownlint-cli2 to ^0.21.0 ([#​20646](https://github.com/eslint/eslint/issues/20646)) (renovate\[bot]) - [`dbb4c95`](https://github.com/eslint/eslint/commit/dbb4c9582a00bac604d5c6ac671bb7111468a846) chore: remove trunk ([#​20478](https://github.com/eslint/eslint/issues/20478)) (sethamus) - [`c672a2a`](https://github.com/eslint/eslint/commit/c672a2a70579fddf1c6ce33dfa712d705726e1c9) test: fix CLI test for empty output file ([#​20640](https://github.com/eslint/eslint/issues/20640)) (kuldeep kumar) - [`c7ada24`](https://github.com/eslint/eslint/commit/c7ada2455680036bbfc42fcb1511ff28afe3c587) ci: bump pnpm/action-setup from 4.3.0 to 4.4.0 ([#​20636](https://github.com/eslint/eslint/issues/20636)) (dependabot\[bot]) - [`07c4b8b`](https://github.com/eslint/eslint/commit/07c4b8b4a9f49145e60a3448dd57853213ed4de3) test: fix `RuleTester` test without test runners ([#​20631](https://github.com/eslint/eslint/issues/20631)) (Francesco Trotta) - [`079bba7`](https://github.com/eslint/eslint/commit/079bba7ff17d0a99fdffe32bf991d005ba797fae) test: Add tests for `isValidWithUnicodeFlag` ([#​20601](https://github.com/eslint/eslint/issues/20601)) (Manish chaudhary) - [`5885ae6`](https://github.com/eslint/eslint/commit/5885ae66216bcee9310bbf73786b7d7d5774aeaf) ci: unpin Node.js 25.x in CI ([#​20615](https://github.com/eslint/eslint/issues/20615)) (Copilot) - [`f65e5d3`](https://github.com/eslint/eslint/commit/f65e5d3c0df65fdb317ad6d23f7ae113c5f4b6d7) chore: update pnpm/action-setup digest to [`b906aff`](https://github.com/eslint/eslint/commit/b906aff) ([#​20610](https://github.com/eslint/eslint/issues/20610)) (renovate\[bot]) ### [`v10.0.3`](https://github.com/eslint/eslint/releases/tag/v10.0.3) [Compare Source](https://github.com/eslint/eslint/compare/v10.0.2...v10.0.3) #### Bug Fixes - [`e511b58`](https://github.com/eslint/eslint/commit/e511b58d5ecd63a232b87743614867f4eaadbba4) fix: update eslint ([#​20595](https://github.com/eslint/eslint/issues/20595)) (renovate\[bot]) - [`f4c9cf9`](https://github.com/eslint/eslint/commit/f4c9cf9b8dc5642de555a09295933464080d722a) fix: include variable name in `no-useless-assignment` message ([#​20581](https://github.com/eslint/eslint/issues/20581)) (sethamus) - [`ee9ff31`](https://github.com/eslint/eslint/commit/ee9ff31cee13712d2be2a6b5c0a4a54449fe9fe1) fix: update dependency minimatch to ^10.2.4 ([#​20562](https://github.com/eslint/eslint/issues/20562)) (Milos Djermanovic) #### Documentation - [`9fc31b0`](https://github.com/eslint/eslint/commit/9fc31b03ef05abfc4f0f449b22947029d51a72f6) docs: Update README (GitHub Actions Bot) - [`4efaa36`](https://github.com/eslint/eslint/commit/4efaa367c62d5a45dd21e246e4a506e11dd51758) docs: add info box for `eslint-plugin-eslint-comments` ([#​20570](https://github.com/eslint/eslint/issues/20570)) (DesselBane) - [`23b2759`](https://github.com/eslint/eslint/commit/23b2759dd5cd70976ab2e8f4a1cf86ffe4b9f65d) docs: add v10 migration guide link to Use docs index ([#​20577](https://github.com/eslint/eslint/issues/20577)) (Pixel998) - [`80259a9`](https://github.com/eslint/eslint/commit/80259a9b0d9e29596a5ef0e1e5269031636cacdb) docs: Remove deprecated eslintrc documentation files ([#​20472](https://github.com/eslint/eslint/issues/20472)) (Copilot) - [`9b9b4ba`](https://github.com/eslint/eslint/commit/9b9b4baf7f0515d28290464ea754d7e7dc350395) docs: fix typo in no-await-in-loop documentation ([#​20575](https://github.com/eslint/eslint/issues/20575)) (Pixel998) - [`e7d72a7`](https://github.com/eslint/eslint/commit/e7d72a77e5e1277690a505160137aebd5985909a) docs: document TypeScript 5.3 minimum supported version ([#​20547](https://github.com/eslint/eslint/issues/20547)) (sethamus) #### Chores - [`ef8fb92`](https://github.com/eslint/eslint/commit/ef8fb924bfabc2e239b46b2d7b3c37319b03084e) chore: package.json update for eslint-config-eslint release (Jenkins) - [`e8f2104`](https://github.com/eslint/eslint/commit/e8f21040f675753e92df8e04f2dbd03addb92985) chore: updates for v9.39.4 release (Jenkins) - [`5cd1604`](https://github.com/eslint/eslint/commit/5cd1604cea5734bc235155a1a1add9f08ae83370) refactor: simplify isCombiningCharacter helper ([#​20524](https://github.com/eslint/eslint/issues/20524)) (Huáng Jùnliàng) - [`70ff1d0`](https://github.com/eslint/eslint/commit/70ff1d07a8e7eba9e70b67ea55fcf2e47cdc9b2d) chore: eslint-config-eslint require Node `^20.19.0 || ^22.13.0 || >=24` ([#​20586](https://github.com/eslint/eslint/issues/20586)) (Milos Djermanovic) - [`e32df71`](https://github.com/eslint/eslint/commit/e32df71a569d5f4aca13079dedd4ae76ea05168a) chore: update eslint-plugin-eslint-comments, remove legacy-peer-deps ([#​20576](https://github.com/eslint/eslint/issues/20576)) (Milos Djermanovic) - [`53ca6ee`](https://github.com/eslint/eslint/commit/53ca6eeed87262ebddd20636107f486badabcc1f) chore: disable `eslint-comments/no-unused-disable` rule ([#​20578](https://github.com/eslint/eslint/issues/20578)) (Milos Djermanovic) - [`e121895`](https://github.com/eslint/eslint/commit/e1218957452e223af27ace1f9d031ab421aec08f) ci: pin Node.js 25.6.1 ([#​20559](https://github.com/eslint/eslint/issues/20559)) (Milos Djermanovic) - [`efc5aef`](https://github.com/eslint/eslint/commit/efc5aef2f9a05f01d5cad53dcb91e7f2c575e295) chore: update `tsconfig.json` in `eslint-config-eslint` ([#​20551](https://github.com/eslint/eslint/issues/20551)) (Francesco Trotta) ### [`v10.0.2`](https://github.com/eslint/eslint/releases/tag/v10.0.2) [Compare Source](https://github.com/eslint/eslint/compare/v10.0.1...v10.0.2) #### Bug Fixes - [`2b72361`](https://github.com/eslint/eslint/commit/2b723616a4daeacd4605f11b4d087d4a7cae5c74) fix: update `ajv` to `6.14.0` to address security vulnerabilities ([#​20537](https://github.com/eslint/eslint/issues/20537)) (루밀LuMir) #### Documentation - [`13eeedb`](https://github.com/eslint/eslint/commit/13eeedbbd16218b0da1425b78cb284937fd964ca) docs: link rule type explanation to CLI option --fix-type ([#​20548](https://github.com/eslint/eslint/issues/20548)) (Mike McCready) - [`98cbf6b`](https://github.com/eslint/eslint/commit/98cbf6ba53a1fb2028d25078c7049a538d0e392c) docs: update migration guide per Program range change ([#​20534](https://github.com/eslint/eslint/issues/20534)) (Huáng Jùnliàng) - [`61a2405`](https://github.com/eslint/eslint/commit/61a24054411fa56ce74bef554846caa9d8cb01f5) docs: add missing semicolon in vars-on-top rule example ([#​20533](https://github.com/eslint/eslint/issues/20533)) (Abilash) #### Chores - [`951223b`](https://github.com/eslint/eslint/commit/951223b29669885643f7854d7c824288ba962d7e) chore: update dependency [@​eslint/eslintrc](https://github.com/eslint/eslintrc) to ^3.3.4 ([#​20553](https://github.com/eslint/eslint/issues/20553)) (renovate\[bot]) - [`6aa1afe`](https://github.com/eslint/eslint/commit/6aa1afe6694f3fd7f82116109a5ef2ad18ece074) chore: update dependency eslint-plugin-jsdoc to ^62.7.0 ([#​20536](https://github.com/eslint/eslint/issues/20536)) (Milos Djermanovic) </details> <details> <summary>sindresorhus/globals (globals)</summary> ### [`v17.5.0`](https://github.com/sindresorhus/globals/releases/tag/v17.5.0) [Compare Source](https://github.com/sindresorhus/globals/compare/v17.4.0...v17.5.0) - Update globals (2026-04-12) ([#​342](https://github.com/sindresorhus/globals/issues/342)) [`5d84602`](https://github.com/sindresorhus/globals/commit/5d84602) *** ### [`v17.4.0`](https://github.com/sindresorhus/globals/releases/tag/v17.4.0) [Compare Source](https://github.com/sindresorhus/globals/compare/v17.3.0...v17.4.0) - Update globals (2026-03-01) ([#​338](https://github.com/sindresorhus/globals/issues/338)) [`d43a051`](https://github.com/sindresorhus/globals/commit/d43a051) *** </details> <details> <summary>puppeteer/puppeteer (puppeteer)</summary> ### [`v24.40.0`](https://github.com/puppeteer/puppeteer/blob/HEAD/CHANGELOG.md#24400-2026-03-19) [Compare Source](https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.39.1...puppeteer-v24.40.0) ##### ♻️ Chores - **puppeteer:** Synchronize puppeteer versions ##### Dependencies - The following workspace dependencies were updated - dependencies - puppeteer-core bumped from 24.39.1 to 24.40.0 ##### 🎉 Features - support PUPPETEER\_DANGEROUS\_NO\_SANDBOX environment variable ([#​14756](https://github.com/puppeteer/puppeteer/issues/14756)) ([2a8276e](https://github.com/puppeteer/puppeteer/commit/2a8276ee095d6f9676a6d2ea82541127cc9f7f1f)) ##### 🛠️ Fixes - roll to Chrome 146.0.7680.153 ([#​14787](https://github.com/puppeteer/puppeteer/issues/14787)) ([443e87f](https://github.com/puppeteer/puppeteer/commit/443e87f263cdc3578d6867ab72960f3c9979f72a)) - roll to Chrome 146.0.7680.80 ([#​14778](https://github.com/puppeteer/puppeteer/issues/14778)) ([14685a0](https://github.com/puppeteer/puppeteer/commit/14685a0e090671eb1d1db2dc9e4ec60117b8cfc3)) ### [`v24.39.1`](https://github.com/puppeteer/puppeteer/blob/HEAD/CHANGELOG.md#24400-2026-03-19) [Compare Source](https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.39.0...puppeteer-v24.39.1) ##### ♻️ Chores - **puppeteer:** Synchronize puppeteer versions ##### Dependencies - The following workspace dependencies were updated - dependencies - puppeteer-core bumped from 24.39.1 to 24.40.0 ##### 🎉 Features - support PUPPETEER\_DANGEROUS\_NO\_SANDBOX environment variable ([#​14756](https://github.com/puppeteer/puppeteer/issues/14756)) ([2a8276e](https://github.com/puppeteer/puppeteer/commit/2a8276ee095d6f9676a6d2ea82541127cc9f7f1f)) ##### 🛠️ Fixes - roll to Chrome 146.0.7680.153 ([#​14787](https://github.com/puppeteer/puppeteer/issues/14787)) ([443e87f](https://github.com/puppeteer/puppeteer/commit/443e87f263cdc3578d6867ab72960f3c9979f72a)) - roll to Chrome 146.0.7680.80 ([#​14778](https://github.com/puppeteer/puppeteer/issues/14778)) ([14685a0](https://github.com/puppeteer/puppeteer/commit/14685a0e090671eb1d1db2dc9e4ec60117b8cfc3)) ### [`v24.39.0`](https://github.com/puppeteer/puppeteer/blob/HEAD/CHANGELOG.md#24391-2026-03-13) [Compare Source](https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.38.0...puppeteer-v24.39.0) ##### ♻️ Chores - **puppeteer:** Synchronize puppeteer versions ##### Dependencies - The following workspace dependencies were updated - dependencies - puppeteer-core bumped from 24.39.0 to 24.39.1 ##### 🛠️ Fixes - roll to Chrome 146.0.7680.72 ([#​14764](https://github.com/puppeteer/puppeteer/issues/14764)) ([177e3ed](https://github.com/puppeteer/puppeteer/commit/177e3ed44a0066c0252d7429fadd8fb82a81281f)) - roll to Chrome 146.0.7680.76 ([#​14777](https://github.com/puppeteer/puppeteer/issues/14777)) ([0751a83](https://github.com/puppeteer/puppeteer/commit/0751a83632d224695ae1f655405b2ec838774d33)) - roll to Firefox 148.0.2 ([#​14763](https://github.com/puppeteer/puppeteer/issues/14763)) ([e658f4e](https://github.com/puppeteer/puppeteer/commit/e658f4eec9656ff2ab97cdcd98f1fb33c8b06304)) ### [`v24.38.0`](https://github.com/puppeteer/puppeteer/blob/HEAD/CHANGELOG.md#24390-2026-03-10) [Compare Source](https://github.com/puppeteer/puppeteer/compare/puppeteer-v24.37.5...puppeteer-v24.38.0) ##### ♻️ Chores - **puppeteer:** Synchronize puppeteer versions ##### Dependencies - The following workspace dependencies were updated - dependencies - puppeteer-core bumped from 24.38.0 to 24.39.0 ##### 🎉 Features - expose Page.hasDevTools ([#​14758](https://github.com/puppeteer/puppeteer/issues/14758)) ([5ed7e77](https://github.com/puppeteer/puppeteer/commit/5ed7e7784a3e23bd1b42b8f0d041a74709a1bf4e)) ##### 🛠️ Fixes - roll to Chrome 146.0.7680.66 ([#​14752](https://github.com/puppeteer/puppeteer/issues/14752)) ([60ace04](https://github.com/puppeteer/puppeteer/commit/60ace04425d1ad4e99732298ed51839f09adcb0a)) </details> --- ### Configuration 📅 **Schedule**: (UTC) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://git.keligrubb.com/keligrubb/scrollsmith/pulls/8 Co-authored-by: Renovate Bot <renovate@keligrubb.com> Co-committed-by: Renovate Bot <renovate@keligrubb.com>
Scrollsmith
Scrollsmith is a Node.js tool for generating Dungeons & Dragons one-page dungeon PDFs automatically. It uses an Ollama LLM server to create dungeon content, proofreads and refines it, then formats it into a structured PDF with maps, rooms, encounters, treasure, and NPCs.
Features
- Three-pass dungeon generation:
- Draft: initial dungeon ideas
- Refine: proofread, add flavor, fill in vague details
- JSON conversion: output strictly valid JSON for PDF generation
- Automatically generates a PDF named after the dungeon title
- PDF layout includes three columns: map & hooks, rooms, encounters & treasure & NPCs
- Easy to integrate with a local Ollama server
Requirements
- Node.js 22+
- Ollama server running and accessible
- Gitea Releases (optional) for PDF uploads
.envfile with:
OLLAMA_API_URL=http://localhost:3000/api/chat/completions
OLLAMA_API_KEY=your_api_key_here
COMFYUI_URL=http://192.168.1.124:8188
Installation
git clone https://github.com/yourusername/scrollsmith.git
cd scrollsmith
npm install
API Configuration
The client automatically infers the API type from the endpoint URL, making it flexible for different deployment scenarios.
Direct Ollama API
For direct Ollama API calls, set:
OLLAMA_API_URL=http://localhost:11434/api/generate
Open WebUI API
For Open WebUI API calls, set:
OLLAMA_API_URL=http://localhost:3000/api/chat/completions
OLLAMA_API_KEY=your_open_webui_api_key
Note: The API type is automatically inferred from the endpoint URL. If the URL contains
/api/chat/completions, it uses Open WebUI API. If it contains/api/generate, it uses direct Ollama API. NoOLLAMA_API_TYPEenvironment variable is required.
Usage
- Make sure your Ollama server is running and
.envis configured. - Run:
npm start
- A PDF will be generated automatically. The filename matches the dungeon title.
Optional: update the map path in index.js if you have a local dungeon map.
Project structure
index.js– Entry point: loads env, initializes the Ollama model, runs dungeon generation, image generation, and PDF output.src/– Application modules:dungeonGenerator.js– LLM-backed dungeon content generation and validation.dungeonTemplate.js– HTML template and layout for the PDF.ollamaClient.js– Ollama/Open WebUI API client and text cleaning.imageGenerator.js– Map image generation (Ollama + optional ComfyUI).generatePDF.js– Puppeteer-based PDF generation from the template.
test/– Unit tests (test/unit/) and integration tests (test/integration/).
Example Output
-
the-tomb-of-shadows.pdf -
Three-column layout:
- Column 1: Map, Adventure Hooks, Rumors
- Column 2: Rooms
- Column 3: Encounters, Treasure, NPCs
Notes
- Make sure your Ollama server is accessible and API key is valid.
- Dungeon generation can take a few minutes depending on your LLM response time.
License
PROPRIETARY