Farm vs Vite vs Turbopack: Next-Gen Bundlers 2026
TL;DR
Vite 6 is still the best default bundler for most projects — 16M weekly downloads and ecosystem maturity nothing can match. Turbopack shipped stable in Next.js 15 and is the only choice for new Next.js apps going forward. Farm is the fastest raw bundler in benchmarks (Rust-native with partial Vite plugin compatibility), but its ecosystem and documentation are still catching up. Rspack from ByteDance is the best Webpack migration path. The bundler wars of 2023-2024 largely settled: Vite won the app space, Turbopack won the Next.js space, Rspack won the Webpack migration space, and Farm is the dark horse to watch in 2026.
Key Takeaways
- Vite 6: 16M downloads/week, Rolldown migration in progress (Rust internals coming), ecosystem gold standard
- Turbopack: Stable in Next.js 15, ~6M downloads/week (via Next.js), 10x faster than Webpack for Next.js dev
- Farm: ~50K downloads/week, written fully in Rust, fastest cold start, partial Vite plugin compatibility
- Rspack: ~1.2M downloads/week, Webpack-compatible Rust bundler, drop-in replacement
- For React/Vue/Svelte apps: Vite remains the answer — it is not close
- For Next.js 15+: Turbopack is the default dev bundler
The Bundler Landscape in 2026
The bundler story of the past three years is one of Rust eating JavaScript tooling from the bottom up. Webpack dominated for most of a decade. Then Vite disrupted it — not by rewriting everything in Rust, but by changing the architecture: serve ES modules natively in development, skip bundling altogether, and only bundle for production with Rollup.
That was fast enough for most teams. But as applications grew and Vite's dev server had to pre-bundle thousands of npm dependencies with esbuild, the community started asking whether a fully Rust-native bundler could be faster still.
Farm, Turbopack, and Rspack all answer "yes." They differ in scope and strategy. Turbopack is embedded inside Next.js and not available as a standalone tool. Rspack is a drop-in Webpack replacement focused on migration, not greenfield adoption. Farm is designed from scratch as the fastest possible standalone bundler — targeting Vite users who want more speed in exchange for a smaller plugin ecosystem.
Understanding these tradeoffs is the key to picking the right tool.
Vite 6 — The Standard (~16M downloads)
Vite's architecture divides the work between two tools: esbuild handles dependency pre-bundling and TypeScript/JSX transforms during development (fast, written in Go), while Rollup handles production bundling (slower but with a mature plugin ecosystem). This split is what Vite 6's Rolldown migration is addressing — Rolldown is a Rust port of Rollup being built by the Vite team, and once it lands, both dev and production will run Rust-speed transforms.
For now, Vite 6 is the most practical choice for the vast majority of JavaScript applications. Its plugin ecosystem of 1,000+ packages means you can find a maintained integration for nearly anything.
// vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import tsconfigPaths from 'vite-tsconfig-paths';
export default defineConfig({
plugins: [
react(),
tsconfigPaths(),
],
build: {
target: 'es2022',
rollupOptions: {
output: {
manualChunks: {
vendor: ['react', 'react-dom'],
router: ['react-router-dom'],
query: ['@tanstack/react-query'],
},
},
},
},
server: {
port: 3000,
hmr: { overlay: true },
},
// Vite 6: new Environment API for SSR frameworks
environments: {
client: {
optimizeDeps: { include: ['react', 'react-dom'] },
},
ssr: {
resolve: { conditions: ['module', 'node'] },
},
},
});
Vite integrates natively with SvelteKit, Nuxt, Remix, Astro, and Qwik — most of the major meta-frameworks outside Next.js have built on Vite. This means choosing Vite also means choosing the largest pool of community examples, tutorials, and plugin support.
Performance in practice:
Dev server cold start (React app, 200 dependencies):
Vite 5: 1.8s
Vite 6: 1.2s (improved dep pre-bundling cache)
HMR (hot module replacement on component edit):
Vite: ~50ms
Webpack: ~800ms
Production build (500-component React app):
Vite (Rollup): 12.4s
Vite + Rolldown alpha: 3.1s
Webpack: 45s
Turbopack — Stable in Next.js 15
Turbopack is Vercel's Rust-based incremental bundler. The important nuance: it is not a standalone tool. You cannot install turbopack and point it at a Vue or Svelte project. It exists exclusively inside Next.js's toolchain. Since Next.js 15, it is the default bundler for next dev.
For Next.js users, the upgrade is significant. Turbopack's incremental computation means it only rebuilds the parts of the module graph that changed — not just files, but individual exports. On large codebases, this collapses dev startup from double-digit seconds to under two seconds.
// next.config.ts
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
// Turbopack is the default in Next.js 15
// Configure only if you need custom behavior:
turbopack: {
resolveExtensions: ['.tsx', '.ts', '.jsx', '.js', '.json'],
// For non-standard file types (SVGs, etc.):
rules: {
'*.svg': {
loaders: ['@svgr/webpack'],
as: '*.js',
},
},
},
};
export default nextConfig;
One important limitation to understand before upgrading: as of Next.js 15.x, Turbopack is a development-only bundler. Production builds (next build) still use Webpack. Full Turbopack production builds are expected later in 2026. This means the performance improvements you see in next dev do not carry over to your CI build times.
Performance in practice:
Next.js 15 with Turbopack vs Webpack:
Cold start (large app, 1,000 modules):
Turbopack: 1.4s
Webpack: 14.2s ← 10x difference
HMR (React component edit):
Turbopack: ~180ms
Webpack: ~2,100ms
Full incremental rebuild:
Turbopack: Affected subgraph only
Webpack: 30s full rebuild
Turbopack also supports Webpack loaders via the rules config, which covers most common use cases like SVGR, CSS Modules, and MDX. Teams migrating from Webpack to Next.js 15 will find that most loader configurations carry over with minimal changes.
Farm — Fastest Raw Bundler (~50K downloads, growing)
Farm is the newcomer that benchmark results keep surfacing. Written entirely in Rust, with a JavaScript plugin layer for ecosystem compatibility, Farm's cold start times are roughly three times faster than Vite and twenty times faster than Webpack.
What makes Farm technically interesting is its "partial bundling" model. Instead of bundling everything into a few large chunks or serving every module individually (Vite's dev approach), Farm groups related modules into optimally-sized partial bundles — reducing both the number of HTTP requests and the per-request overhead. This is particularly effective for large projects with deep dependency trees.
// farm.config.ts
import { defineConfig } from '@farmfe/core';
import farmReact from '@farmfe/plugin-react';
export default defineConfig({
plugins: [
farmReact({ refresh: true }),
],
compilation: {
input: { index: './index.html' },
output: { path: './dist' },
script: { target: 'es2022' },
// Partial bundling — Farm's unique optimization:
partialBundling: {
enforceResources: [
{
name: 'vendor',
test: ['node_modules/react', 'node_modules/react-dom'],
},
],
},
},
server: {
port: 9000,
hmr: true,
},
// Vite plugin compatibility layer — many Vite plugins work:
vitePlugins: [
() => ({
vitePlugin: require('@vitejs/plugin-legacy'),
filters: ['\\.js$'],
}),
],
});
Farm's Vite plugin compatibility (vitePlugins array) is its most practically useful feature for adoption. Most Vite plugins that do not rely on Vite-specific internals will run inside Farm via this compatibility layer, which reduces the ecosystem gap considerably.
Performance in practice:
Dev server cold start (React app, 200 dependencies):
Farm: 0.4s ← Rust startup, no separate pre-bundle step
Vite: 1.2s
Webpack: 8.0s
HMR:
Farm: ~30ms
Vite: ~50ms
Webpack: ~800ms
Production build:
Farm: 4.2s
Vite: 12.4s
Webpack: 45s
The downside is ecosystem maturity. Farm's documentation is thinner than Vite's, community support is smaller, and some edge cases in build configuration lack examples. For a personal project or internal tool where you can afford to debug configuration issues, Farm's speed is compelling. For a production team with multiple developers depending on build reliability, Vite's larger safety net is worth the speed tradeoff.
Rspack — Webpack Migration Path (~1.2M downloads)
Rspack deserves a mention because it addresses a different problem than the other three: not "what should I use for a greenfield project," but "I have a large Webpack configuration and I need it to run faster today."
Built by ByteDance (TikTok's parent company) and released as open source, Rspack implements the Webpack plugin and loader API in Rust. The vast majority of Webpack configurations work with Rspack unchanged. Migration is often as simple as replacing webpack with @rspack/core and webpack-dev-server with @rspack/dev-server.
For teams with significant Webpack plugin customization or who cannot afford the migration cost to Vite's different config model, Rspack delivers 5-10x build speed improvements without touching application code or build configuration. ByteDance uses it to build TikTok's web frontend — the scale validation is about as strong as it gets.
rsbuild is the higher-level tool from the same team: Rspack with batteries included, preset configurations for React/Vue/Svelte, and sensible defaults. For new projects that want Rspack's performance without raw Webpack configuration, rsbuild is the entry point.
Package Health
| Package | Weekly Downloads | Language Core | Standalone | First Release | Status |
|---|---|---|---|---|---|
| vite | ~16M | Go + JS (Rolldown: Rust) | ✅ | 2020 | Stable |
| @next/turbopack | ~6M (via Next) | Rust | ❌ | 2022 | Stable (dev only) |
| @farmfe/core | ~50K | Rust | ✅ | 2023 | Beta |
| @rspack/core | ~1.2M | Rust | ✅ | 2022 | Stable |
Comparison Table
| Vite 6 | Turbopack | Farm | Rspack | |
|---|---|---|---|---|
| Weekly downloads | 16M | ~6M via Next.js | ~50K | ~1.2M |
| Standalone | ✅ | ❌ Next.js only | ✅ | ✅ |
| Next.js compatible | ⚠️ Not default | ✅ Default | ❌ | ❌ |
| Vite plugin compat | Native | ❌ | Partial | ❌ |
| Production build | ✅ Rollup | ❌ Still Webpack | ✅ | ✅ |
| HMR speed | ~50ms | ~180ms | ~30ms | ~100ms |
| Ecosystem maturity | Largest | Via Next.js | Small | Medium |
| Rust internals | Partial (Rolldown in progress) | ✅ | ✅ | ✅ |
| Config complexity | Low | Minimal | Low | Medium (Webpack-style) |
The Ecosystem Consolidation
The 2023-2024 bundler wars produced a clearer picture than most people expected: instead of a single winner, the market segmented by use case.
Vite won the general application space. Its combination of fast enough dev performance, massive plugin ecosystem, and framework adoption (SvelteKit, Nuxt, Astro, Remix) makes it the obvious default for any non-Next.js project.
Turbopack won the Next.js space by default — being embedded in Next.js 15 means every new Next.js app uses it. Its adoption curve is the adoption curve of Next.js itself.
Rspack won the Webpack migration space. Teams with large Webpack configs that need speed improvements without rewriting their build configuration have a clear path.
Farm is the dark horse for 2026. Its raw performance benchmarks are genuinely faster than Vite, and its Vite plugin compatibility layer reduces the ecosystem gap. If Farm's documentation and community support mature over the next twelve months, it becomes a serious option for performance-sensitive teams willing to be early adopters.
When to Choose
Use Vite for any project that is not running inside Next.js. The ecosystem, documentation, plugin availability, and community support justify prioritizing it over the faster-but-smaller alternatives. SvelteKit, Nuxt 3, Astro, and Remix are all built on Vite — if you use any of these frameworks, you are already using Vite.
Use Turbopack if you are building a Next.js 15+ application. It is the default, it is stable for development, and the migration from Webpack is handled by the Next.js upgrade process. There is no reason to disable it.
Use Farm if you have a standalone React, Vue, or Svelte project where dev server startup time is a genuine pain point, you are comfortable using beta-quality tooling, and you are willing to debug occasional configuration edge cases. The speed improvement over Vite is real and measurable.
Use Rspack if you have an existing Webpack project that needs to run faster. The drop-in compatibility means you can benchmark the improvement with a few line changes and decide based on actual numbers.
| Scenario | Bundler |
|---|---|
| New React/Vue/Svelte app | Vite |
| Next.js 15+ | Turbopack (default) |
| Maximum dev speed, standalone | Farm |
| Existing Webpack project | Rspack |
| New project with Webpack-style config | rsbuild |
| SvelteKit/Nuxt/Astro/Remix | Vite (built-in) |
See the live comparison
View vite vs. webpack on PkgPulse →