Sign in

AriPerkkio

@ariperkkio.dev
1.3K followers 195 following 117 posts

@vitest.dev Core Team • Open Source @chromatic.com • github.com/AriPerkkio

PostsRepliesMedia
AriPerkkio @ariperkkio.dev · 05/08/2026
TIL when running Vitest browser mode (or plain Playwright) on Github Actions on Ubuntu, you can skip the slow "playwright install chromium" step completely by providing channel option. This makes Playwright use the pre-installed Chrome. So many projects out there that could speed their CIs with this
Github PR diff view showing removal of "playwright install" step, and addition of "launchOptions.channel: 'chrome'" on Vitest Playwright provider.
41149
AriPerkkio @ariperkkio.dev · 31/05/2026
If you've published a package using staged publishing before this fix, all that's needed now is to re-publish the same package and @npmx.dev will display the trusted publishing label again 🤝
npmx timeline of ast-v8-to-istanbul package. Trusted publishing was removed on May 25th, and re-enabled on May 31st.
0292
AriPerkkio @ariperkkio.dev · 13/05/2026
Thanks, it works! We can finally test Vitest's fast-updating SummaryReporter with this! I always thought it would be too difficult to simulate terminal's behaviour, but this library does it perfectly 💯 Also found one edge-case bug in Vitest while setting this up. 🙃
Test case validating Vitest's SummaryReporter using ansivision-package. Inline snapshot describes changes of test summary, showing test run progress.
070
AriPerkkio @ariperkkio.dev · 10/04/2026
@vitest.dev just surpassed Jest in npm weekly downloads 📈 npmx.dev/compare?pack...
31055
AriPerkkio @ariperkkio.dev · 16/02/2026
In the next version of Vitest you can track leaking asynchronous resources via `--detect-async-leaks` option! Available in v4.1.0-beta.4 release. 🔍 (notice missing await in the example)
Terminal output of Vitest's test run results. The results contain error message of asynchronous resource leaking. Code block pointing to a fetch call that is missing await.
27311
AriPerkkio @ariperkkio.dev · 09/02/2026
Excited to announce that I've officially joined @chromatic.com! My main focus will be working around features related to @vitest.dev 🤝
Github organization invitation with text "You've been invited to the Storybook organization!".
5594
AriPerkkio @ariperkkio.dev · 12/01/2026
I'd like to avoid forking Istanbuljs monorepo just for Vitest. Any istanbuljs Github organization members here who could make me a maintainer there? (@kentcdodds.com, @jasonkurian.dev 👋) github.com/vitest-dev/v...
Partial screenshot from Github issue with text: "Alternative
Get someone from Vitest team into Istanbuljs organization and as maintainer of istanbuljs/istanbuljs package"
1174
AriPerkkio @ariperkkio.dev · 08/12/2025
When using vite@8-beta with Vitest users no longer need to add magical '@preserve' keywords in their coverage ignore hints. Originally this work-around was needed due to esbuild's (intentional) lack of support for comment preserving. Oxc has built-in support for JS coverage tools' ignore hints.
Two istanbul coverage reports side-by-side. Left one titled "vite@7 + esbuild", right one "vite@8-beta + rolldown + oxc". Report on the right demonstrates how ignore hints work without @preserve keyword.
0162
AriPerkkio @ariperkkio.dev · 13/11/2025
Project is at github.com/AriPerkkio/a... Same tests run in browser and JSDOM:
Github CI report showing aria-live-capture project's browser tests running faster than JSDOM.
110
AriPerkkio @ariperkkio.dev · 28/08/2025
Does not work on Mac with latest Bun:
-
110
AriPerkkio @ariperkkio.dev · 28/08/2025
Setting custom `process.title` in Node takes around 10-20ms. Vitest used to do this for every isolated test file so that debugging test runner processes was a bit nicer experience. But it's not worth the performance hit.
NodeJS script in VSCode demonstrating how setting "process.title" takes around 10ms.
3323
AriPerkkio @ariperkkio.dev · 08/08/2025
test-exclude usage is removed in Vitest v4. 0 new deps were needed, as `vitest` package already had all required replacements. github.com/vitest-dev/v...
Replaces test-exclude with micromatch and tinyglobby
- test-exclude is 3.6MB and depends on glob and minimatch
- vitest already depends on picomatch and tinyglobby so we can get those free in coverage packages
141
AriPerkkio @ariperkkio.dev · 06/06/2025
We've added new coverage provider comparison page on Vitest documentation. This guide describes the lower level differences between Istanbul and V8. It should help users choosing which provider to use. vitest.dev/guide/covera...
Screenshot of https://vitest.dev/guide/coverage.html#v8-provider contents. Describes the differences between Istanbul and V8 coverage providers.
1356
AriPerkkio @ariperkkio.dev · 21/05/2025
Onboarding on new @storybook.js.org projects is just perfect. So nice to have testing setup *covered* out-of-the-box. 🤝
Storybook's onboarding messages informing Vitest packages installation. The instructions include pun "Let me cover this for you" while installing code coverage packages.
1336
AriPerkkio @ariperkkio.dev · 11/05/2025
Tinypool is now built with tsdown! Migration from tsup was smooth and required minimal changes. Thanks to @sxzz.dev 💯
Github commit with title "refactor: switch to tsdown" merged into "tinylibs/tinypool" project.
091
AriPerkkio @ariperkkio.dev · 06/04/2025
After couple of days looking at *.cpuprofile's, I think it's getting closer to stable v1 release. The ~3MB checker.ts from Typescript repo is perfect benchmarking reference for tools that process source code. When generating coverage for 'vuejs/core' repo, speed is close to original v8-to-istanbul.
Bar graph showing results for ast-v8-to-istanbul generating coverage for checker.ts from Typescript repository. 
- v0.1.0: 1192s
- v0.1.1: 35s
- v0.1.2: 0.55s
3446
AriPerkkio @ariperkkio.dev · 31/03/2025
This release includes long-awaited "--silent=passed-only" option, that can be used to hide console.log calls from passing tests. Only the logs from failing tests are reported.
Example test case demonstrating how console logs from passing tests are not visible in terminal when using --silent=passed-only option from Vitest 3.1.0
27716
AriPerkkio @ariperkkio.dev · 21/03/2025
Finalizing rewrite of AST-aware v8-to-istanbul. This will provide accuracy of Istanbul coverage for V8 coverage reports. I've intentionally kept this tool unopinionated so that it's not strictly tied to just @vitest.dev - it should be usable with Jest, C8, Playwright and node:test too.
- Speed of V8 coverage 🏎
- Accuracy of Istanbul coverage 🔍
Experimental AST-aware v8-to-istanbul. Work-in-progress. 🚧
- Unopinionated - bring-your-own AST parser and source maps.
- Passes all 195 tests* of istanbul-lib-instrument. ✅

This project tests itself against test cases of istanbul-lib-instrument and verifies coverage maps are 100% identical. Some cases, like deprecated with() statement and edge cases of strict mode are skipped, as all tests are run in strict mode.

100% istanbul compatibility guarantees that coverage reports between V8 and Istanbul can be merged together.
1508
AriPerkkio @ariperkkio.dev · 16/02/2025
Tree-view of @vitest.dev verbose reporter is coming back! We (well I did) forgot to implement this during v3's reporter rewrites. I had already forgot how good it looks.
Before-and-after picture of Vitest's verbose reporter tree view fixes. Results on left are rendered as flat list, while right one is rendered as a tree-view.
1584
AriPerkkio @ariperkkio.dev · 04/02/2025
🫠
Bug report with details:
- Reproduction: 127.0.0.1:10201
- Steps to reproduce: No response
2160
AriPerkkio @ariperkkio.dev · 17/12/2024
This kind of growth just amazes me. On 12/2023 Vitest had 3M weekly downloads. Now in 12/2024 there's almost 8M. Maybe we can share #2 with Storybook next year! 📈 2024.stateofjs.com/en-US/librar...
Vitest usage in State of JS 2024 survey. In 2023 Vitest was ranked #8. In 2024 it was ranked to #4.
3518
AriPerkkio @ariperkkio.dev · 08/12/2024
Give it a try instead! Here I have ~160 tests running faster in browser mode than in JSDOM, ~320ms vs ~500ms. I'm testing my utility library against real browsers and JSOM with Vitest's workspaces.
Vitest Workspaces with browser mode and JSDOM. Browser mode running in ~320ms, JSDOM in ~500ms.
190
AriPerkkio @ariperkkio.dev · 20/11/2024
Today I was testing a fix for a bug that required to have the dependent project deployed on real infra. Testing this without pkg.pr.new would have required so much extra work. 🤝
Git diff showing pkg.pr.new releases in use
172
AriPerkkio @ariperkkio.dev · 18/11/2024
Released in 2.2.0-beta.2 and it's even smoother now! Here's comparison of latest Vitest on left vs beta on right. Flickering is gone and now you can scroll up to see results without scroll jumping. And of course there's the status summary of active test run on the bottom. github.com/vitest-dev/v...
1811417
AriPerkkio @ariperkkio.dev · 15/11/2024
Contents of lesson can be downloaded with a single click:
TutorialKit v1.3.0 with download zip-file button
040
AriPerkkio @ariperkkio.dev · 15/11/2024
TutorialKit v1.3.0 is now out! 🥳 You can now omit part and chapter levels if your tutorial doesn't need that deeply nested architecture! There is also new 'downloadAsZip' option that adds button for downloading whole lesson as .zip-file with a single click. Release notes: github.com/stackblitz/t....
2164
AriPerkkio @ariperkkio.dev · 07/11/2024
Hello 🦋! Here's sneak peek into Vitest reporter improvements I've been working on for a while now. This reduces terminal flickering, fixes scroll issues and adds status summary. It's still WIP but looking really good so far!
1215815