Vite is fast.
I'm not trying to argue otherwise.
Its development experience and HMR are a big part of why it became the default choice for a huge part of the frontend ecosystem.
But I wanted to test something else:
What happens when we repeatedly run production builds on a large project?
I benchmarked Vite against Ionify using a real React project with:
- 15,000 React components
- 25,000 dependencies
- Production builds
Here are the results.
| Build | Vite | Ionify |
|---|---|---|
| Initial build | 2.7s | 6s |
| No changes | 2.7s | 50ms |
| One file changed | 2.7s | 120ms |
The obvious result is that Vite wins the first build.
2.7 seconds versus 6 seconds.
No argument there.
But look at what happens afterward.
Vite's build time stays roughly constant.
Ionify drops from seconds to milliseconds.
That's the behavior I care about.
Why does the second build change so much?
Ionify doesn't treat every build as a completely new execution.
The first build establishes verified knowledge about the project.
After that, the engine attempts to reuse that knowledge rather than recompute it.
So a no-change build shouldn't mean:
scan everything
resolve everything
transform everything
bundle everything
discover that nothing changed
It should be much closer to:
load known project state
verify identities
observe no meaningful change
reuse published results
And if one file changes:
identify affected work
invalidate only what depends on it
reuse everything else
That's the model.
Build Authority
Internally, I describe this architecture as Build Authority.
The basic rule is:
Every category of verified work should have one authoritative owner.
For example, imagine multiple stages in a frontend toolchain independently deciding how a dependency should be resolved.
Even if every stage is fast, you're still repeating knowledge.
Authority says:
dependency resolution
↓
single authority
↓
published verified result
↓
dev / build / CI consume it
Not:
dev resolves dependencies
build resolves dependencies
optimizer resolves dependencies
CI resolves dependencies
The goal isn't just faster code.
The goal is eliminating repeated reasoning.
Why this is different from "just cache it"
A cache tells you:
I have an artifact for key X.
Authority also tells you:
This system owns the truth for X,
this result was produced under these conditions,
and downstream consumers should not independently recreate it.
That gives you a stronger invariant.
Instead of multiple systems producing equivalent answers and hoping they agree, one layer publishes the answer and everyone else consumes it.
That is particularly useful when dealing with things like:
- dependency resolution
- transformed modules
- dependency publication
- dependency export surfaces
- CSS artifacts
- build graphs
- production plans
The architecture starts becoming less about a pipeline of repeated computations and more about a graph of published knowledge.
The 6-second problem
There is one number in the table I definitely don't want to hand-wave away:
Ionify's first build takes around 6 seconds.
That's more than twice the Vite result in this benchmark.
It's currently the weak point.
Some of that cost comes from establishing the state that later builds reuse.
But architectural justification doesn't make six seconds good.
So first-build performance is the next area I'm focusing on.
The ideal outcome isn't:
slow first build
fast later builds
It's:
fast first build
almost nothing to do afterward
The bigger question
The interesting question for me isn't really:
Can Ionify beat Vite in a benchmark?
It's:
How much frontend build work exists only because our tools keep forgetting what they already know?
Compilers already understand incremental computation.
Build systems already understand dependency graphs.
Content-addressable storage already understands immutable identity.
The experiment behind Ionify is to combine those ideas around one rule:
verified knowledge should persist until something actually invalidates it.
That's what produces the 50ms no-change build.
Not because the engine executes the same build dramatically faster.
Because most of the build no longer needs to happen.
The full Build Authority model is here:
https://ionify.cloud/build-authority
Ionify is open source and still early.
If you're interested in build systems, I'd actually prefer you try to break the model rather than just trust the benchmark.
Run it against a real project.
Change weird things.
Invalidate dependencies.
Push it into cases where incremental systems normally fall apart.
Then tell me where the authority model stops holding.
Starting Ionify on GitHub to help keep development at:https://github.com/ionifyjs/ionify

Top comments (0)