
In the middle of development, I moved this site off Create React App and onto Vite. It was one of the better technical decisions I made. So when I read that Cloudflare acquired VoidZero, the company Evan You started to build Vite, Vitest, Rolldown, and Oxc, I had a small double take. The build tooling my whole frontend depends on now sits inside a hosting and CDN company.
I am mostly happy about it. But "mostly" is doing some work in that sentence, so let me explain both halves.
First, why I moved to Vite at all
My site used to run on Create React App. CRA was fine, then it quietly stopped being maintained, and staying on it started to feel like driving a car nobody makes parts for anymore.
The migration itself was not glamorous, but the numbers were hard to argue with. My dependency count dropped from over 1500 packages to around 780. Running npm audit went from a wall of warnings to zero vulnerabilities. I moved from Node 18 to Node 22 and TypeScript 4.9 to 5.3 along the way. The dev server starts in a blink now instead of the slow cold boot I had trained myself to ignore.
It was not all clean. Two bugs bit me, and both had the same nasty quality: the build passed, the tests passed, the linter passed, and the page still rendered blank in the browser. Vite does not define process.env.NODE_ENV in the browser the way CRA did, and my code read it in about thirty places, so the first read threw a ReferenceError and took the whole app down. The second was a circular import that CRA had been papering over with a runtime require(), which does not exist in real ESM. Green pipeline, dead page. The lesson stuck: with Vite you actually have to open the thing in a browser, because your test suite will happily lie to you.
That is the context I am reading this acquisition through. I am not a Vite tourist. I have the scars.
The config change that actually mattered
Most of the migration was deleting things. The one line I want to call out is the fix for that blank-page bug I mentioned, because it is the whole lesson in a single block.
CRA quietly defined process.env.NODE_ENV in the browser for you. Vite does not, on purpose. My app read that value in about thirty five places for dev-only logging and error overlays, so the first read in production threw and the page went white. The fix is to tell Vite to replace the expression at build time:
// vite.config.ts
export default defineConfig(({ mode }) => ({
plugins: [react()],
define: {
// The app branches on process.env.NODE_ENV in ~35 places.
// Vite exposes no process global to the browser, so replace
// the expression statically. Jest reads the real process.env,
// which keeps both runtimes on the same code paths.
'process.env.NODE_ENV': JSON.stringify(mode),
},
}));
Two things I like about this. It is static replacement, so there is no process shim shipped to the browser and no runtime cost. And it keeps Jest happy, because Jest has a real process.env, so my tests and my browser run the exact same branches instead of drifting apart.
The other thing worth knowing: Vite ignores browserslist completely. CRA used that field to compile down to ES5. Vite does not look at it, so I dropped it and made the browser floor explicit in the build config instead:
build: {
outDir: 'build',
target: 'baseline-widely-available',
},
If you migrate and your browserslist was doing real work for old browsers, that support silently disappears unless you add @vitejs/plugin-legacy. Mine was not, so I let it go.
Why the Cloudflare deal is probably good
VoidZero was Evan You trying to fund serious, boring, important work: a faster bundler (Rolldown), a faster toolchain core in Rust (Oxc), a test runner (Vitest), all under one roof. That kind of work is expensive and does not pay for itself with GitHub stars.
Cloudflare has money, real infrastructure, and a genuine reason to care about how JavaScript gets built and shipped. If they pour resources into making Rolldown production ready and Oxc fast, everyone on Vite benefits, including tiny sites like mine. Healthy funding beats a burned-out maintainer every time. On paper, this is the good ending.
Why I am still watching
Here is the part I am sitting with. The frontend ecosystem spent the last few years happily standardizing on Vite. It became the neutral ground, the thing almost everyone agreed on. Neutral ground is easier to trust when no single company owns it.
Now a hosting company owns the tools most of the web builds with. I do not think Cloudflare is going to do anything cartoonishly evil. But incentives are incentives. Over time, will the default templates nudge you toward Cloudflare Workers and Cloudflare Pages? Will the smoothest path start pointing at one vendor's platform? Probably a little. That is not a betrayal, it is just gravity.
For my site it changes nothing today. Vite is open source, my build works, and I am not rewriting anything because of a press release. But I run this project so I stay close to how the web actually works, and "who owns the tools" is part of that. So I am keeping an eye on it.
What I am actually going to do
Nothing dramatic. Keep using Vite, because it is still the best tool for the job. Watch the Rolldown rollout, since that is where the real payoff of this deal will show up. And stay honest with myself about lock-in: the moment the recommended setup only makes sense on Cloudflare's platform is the moment to pay closer attention.
Good tools deserve funding. I just also like knowing I can walk away from any one company without rewriting my site. Right now I can. Long may that last.
Until then, see you at the top!