VoidZero's Avatar

VoidZero

@voidzero.dev

The JavaScript Tooling Company

2,628
Followers
23
Following
201
Posts
20.03.2025
Joined
Posts Following

Latest posts by VoidZero @voidzero.dev

Our Highlights in February
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
Preview
Sponsor @auvred on GitHub Sponsors GitHub is where people build software. More than 150 million people use GitHub to discover, fork, and contribute to over 420 million projects.

If you've loved using Oxlint's type-aware linting feature, then please consider sponsoring auvred too: github.com/sponsors/auv...

06.03.2026 15:34 πŸ‘ 7 πŸ” 1 πŸ’¬ 0 πŸ“Œ 0
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 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
Preview
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
Post image

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
Preview
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
Preview
Announcing npmx: a fast, modern browser for the npm registry Today we're releasing the alpha of npmx.dev – a fast, modern browser for the npm registry, built in the open by a growing community.

npmx is now in alpha: this is our story, as told by our team and friends

03.03.2026 12:23 πŸ‘ 359 πŸ” 127 πŸ’¬ 17 πŸ“Œ 34
Preview
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

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
Preview
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
Post image

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.

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
Preview
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
Video thumbnail

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
Preview
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
Video thumbnail

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."

"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
Preview
Rolldown | Rust bundler for JavaScript Fast Rust-based bundler for JavaScript with Rollup-compatible API

Not using Rolldown yet? It is time!
rolldown.rs

10.02.2026 20:42 πŸ‘ 6 πŸ” 0 πŸ’¬ 0 πŸ“Œ 0

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