Our Highlights in February
Welcome to our monthly "Highlights from the Void" series where selected highlights from our recap posts will be shown more in-depth.
π Read the full Recap -β¦
Highlights from the Void just dropped β¨
Watch our February recap and go a bit deeper into the highlights!
Learn about the latest updates to Vite, Vitest, Rolldown, Oxlint, Oxfmt, and what's happening in the community.
www.youtube.com/watch?v=7Rj6...
06.03.2026 21:39
π 1
π 0
π¬ 0
π 1
VoidZero sponsorship announcement card with dark purple background. Left side shows the VoidZero logo, a message reading "Thank you for moving the ecosystem forward!" with a gradient highlight, and a $10,000 sponsorship badge with a heart icon. Right side features a profile card for @auvred showing their GitHub avatar and the tagline "Creator of tsgolint".
VoidZero is excited to sponsor auvred for $10,000 as a small thank you for all their contributions that push the ecosystem forward.
Thank you auvred for creating tsgolint and generously offering to continue its development under the Oxc organization.
06.03.2026 15:34
π 33
π 3
π¬ 1
π 2
Built-in Plugins
A collection of high-performance JavaScript tools written in Rust
If this was your only Babel plugin, you can simplify your setup and should see faster builds.
Credits to the `babel-plugin-styled-components` authors. Oxc's implementation is largely based their work.
More info in the Oxc docs: oxc.rs/docs/guide/u...
04.03.2026 00:47
π 2
π 0
π¬ 0
π 0
Using styled-components with @vite.dev 8?
Oxc, which powers Vite's transforms, includes built-in styled-components support. It is covering most features of `babel-plugin-styled-components`:
β displayName for debugging,
β SSR,
β minification,
β and more.
All running natively in Rust.
04.03.2026 00:47
π 28
π 2
π¬ 2
π 1
VoidZero and npmx: Building Better Tools Together
How VoidZero and npmx.dev share a vision for making JavaScript developers more productive, and how real-world feedback from open-source builders helps improve our tooling.
Congrats to @npmx.dev on launching their alpha!
We share the same vision: making JavaScript developers more productive.
They chose to build on the VoidZero toolchain, and their feedback has already shipped real performance improvements back to the community.
This is open source at its best.
03.03.2026 13:02
π 90
π 13
π¬ 0
π 0
Whatβs New in ViteLand: February 2026 Recap
Our February 2026 recap features Oxfmt Beta with 100% Prettier compatibility and 36x faster performance, Vite 8 devtools, Vitest async leak detection, and Rolldown performance gains.
β¨ What's New in ViteLand: February 2026 Recap
β Oxfmt Beta: 100% Prettier conformance
β @vite.dev 8 includes devtools
β @vitest.dev 4.1 beta adds aroundEach/aroundAll hooks
β @rolldown.rs becomes 9.6% faster
β Oxlint now supports 59/61 ts-eslint rules
β NestJS migrates to Vitest
β and much more π
02.03.2026 13:12
π 54
π 8
π¬ 0
π 1
Screenshot of VoidZero supporting npmx with $500 USD / month
A modern browser for the npm registry that nudges the ecosystem towards best practices and standards perfectly aligns with our mission: to make the next generation of JS developers more productive than ever before.
We're happy to support our friends at @npmx.dev!
25.02.2026 09:00
π 143
π 15
π¬ 0
π 4
Rolldown | Rust bundler for JavaScript
Fast Rust-based bundler for JavaScript with Rollup-compatible API
In case of @rolldown.rs, the bundler handles tree shaking at the module level, then hands off to the Oxc minifier for statement-level DCE. Both are part of the same toolchain and built to work together.
Learn more in our in-depth Rolldown DCE chapter
rolldown.rs/in-depth/dea...
25.02.2026 00:01
π 6
π 0
π¬ 1
π 0
In practice, both work together in a pipeline:
β Your bundler tree-shakes unused exports across modules
β Then, your minifier (e.g. Oxc) then runs DCE to clean up what's left inside each module
Technically, tree shaking is really a type of DCE that happens at the module/export level.
25.02.2026 00:01
π 2
π 0
π¬ 1
π 0
Dead code elimination (DCE) removes dead code within a module. Think unused variables, or unreachable code.
```ts
function process(x) {
if (false) { log('') } // removed
const answer = 42 // removed
return x * 2
}
console.log(process(4))
```
25.02.2026 00:01
π 2
π 0
π¬ 1
π 0
Tree shaking removes unused exports across modules.
```ts
// math.ts
export function add(a, b) { return a + b }
export function mult(a, b) { return a * b }
// app.ts
import { add } from './math.ts'
```
You import `add` but not `mult`? The bundler drops unused exports This is called tree shaking.
25.02.2026 00:01
π 3
π 0
π¬ 1
π 0
Tree shaking and Dead Code Elimination are often used interchangeably but they are not the same!
While both work together to make your bundle smaller, there is a difference...
25.02.2026 00:01
π 41
π 1
π¬ 2
π 0
Built on top of @vite.dev 8 and @rolldown.rs.
RSC support via Vite's RSC plugin.
Linting via Oxlint.
24.02.2026 22:38
π 41
π 3
π¬ 1
π 0
Rolldown REPL
Rolldown REPL
Worried about too many small chunks? `entriesAwareMergeThreshold` has you covered.
Time to reduce your initial JavaScript β¨
Want more info? Take a look at our REPL example (link to the docs inside too!)
repl.rolldown.rs#eNqVWIty27gV...
19.02.2026 23:02
π 5
π 0
π¬ 0
π 0
Infographic showing Rolldown's entriesAware code splitting feature in 3 steps. Step 1 shows three entry points (Dashboard using chart.js, Admin using marked, Landing using gsap - all sharing es-toolkit). Step 2 shows the problem: without entriesAware, all entries load a single 305KB vendor.js containing all libraries. Step 3 shows the solution: with entriesAware enabled, chunks are split by usage - a shared 8KB chunk for es-toolkit plus entry-specific chunks (195KB for dashboard, 40KB for admin, 63KB for landing), reducing average page load to 107KB and eliminating unused library downloads. Code snippet shows the configuration: entriesAware: true and entriesAwareMergeThreshold: 20000.
Chunks are now entry-aware in Rolldown 1.0.0-rc.5 β‘
What does that mean? When grouping chunks via `codeSplitting`, they can now be automatically split per entry point (usually per page), so users download less unused JavaScript.
Just set `entriesAware: true`.
19.02.2026 23:02
π 50
π 4
π¬ 3
π 1
Vitest
Next generation testing framework powered by Vite
β οΈ Don't run it on every run though. Use it to audit your test suite, then clean things up.
Link to the docs for all the curious people
main.vitest.dev/config/detec...
18.02.2026 20:40
π 3
π 0
π¬ 0
π 0
Flaky tests and memory leaks are the worst.
@vitest.dev now has a flag that catches uncleared intervals, lingering servers, and other async operations leaking across your tests.
Available in the latest 4.1 beta. Big shout out to @ariperkkio.dev from the Vitest team for landing this PR! π₯
18.02.2026 20:40
π 56
π 9
π¬ 1
π 3
Rolldown | Rust bundler for JavaScript
Fast Rust-based bundler for JavaScript with Rollup-compatible API
Didn't try out Rolldown yet?
You should as it entered RC recently and is 10-30x faster while being compatible with Rollup's excellent API.
rolldown.rs
17.02.2026 20:29
π 6
π 0
π¬ 0
π 0
If you're a library author adding `@__NO_SIDE_EFFECTS__` to your code, know that your users will only see the full benefit with a bundler that understands it before splitting.
17.02.2026 20:29
π 4
π 3
π¬ 1
π 0
This matters for libraries like shadcn, Radix, or any component library using the annotation. Your route-level bundles can actually get smaller from it!
17.02.2026 20:29
π 4
π 0
π¬ 1
π 0
But @rolldown.rs handles this. It tracks which functions are marked `@__NO_SIDE_EFFECTS__` across your entire app. When it sees a call to one of those function, even from a different file, it knows the call can be safely dropped if the result is unused.
17.02.2026 20:29
π 3
π 0
π¬ 1
π 0
If your bundler only checks the annotation during minification, it's too late
The minifier only sees one file at a time
Which means it sees the call to the function but has no idea that this function was marked as side-effect-free before
π¨ The annotation does nothing exactly where it matters most!
17.02.2026 20:29
π 0
π 0
π¬ 1
π 0
Most apps use code splitting: Your code gets split into multiple files (chunks) to load less unnecessary JavaScript.
When that happens, the annotated function might end up in one file and the call to it in another.
17.02.2026 20:29
π 0
π 0
π¬ 1
π 0
Did you know about the `/*@__NO_SIDE_EFFECTS__*/` annotation?
It tells bundlers that a function has no side effects so every call to it can be tree-shaken if the result is unused.
Most bundlers and minifiers support it today.
But there's a nuance most people miss π
17.02.2026 20:29
π 49
π 6
π¬ 3
π 0
Why did adding ONE component make your build drastically slower?
The answer is often: Barrel files.
Luckily, you can enable Lazy Barrel Optimization in @vite.dev 8 and @rolldown.rs do bring your build time back to normal.
Want to know more? Check the video & docs
rolldown.rs/in-depth/laz...
12.02.2026 15:41
π 46
π 5
π¬ 1
π 4
"Expanding brain meme with 5 stages. Stage 1 (small brain): 'No tests'. Stage 2: 'Testing components by mocking document and window'. Stage 3: 'Testing with jsdom as fake DOM'. Stage 4: 'Testing with happy-dom because jsdom is too slow'. Stage 5 (galaxy brain): 'Testing in an ACTUAL browser with Vitest Browser Mode' with Vitest logo."
Tests.
Vitest's browser mode is stable since Vitest 4.0.
Now you can be sure that your tests pass in an *actual* browser environment.
vitest.dev/guide/browser/
11.02.2026 20:40
π 71
π 6
π¬ 0
π 2
Native plugins:
β @rollup/plugin-replace - Use `import { replacePlugin } from 'rolldown/experimental'`
β @rollup/plugin-dynamic-import-vars - Use `import { dynamicImportVarsPlugin } from 'rolldown/experimental'`
8 plugins replaced by zero-config built-ins or native equivalents.
10.02.2026 20:42
π 5
π 0
π¬ 1
π 0