El estado de los bundlers en 2026: Rust gana, pero Vite domina
En 2026 el tooling de build está dividido en dos mundos: Vite 7 (con Rolldown escrito en Rust) domina con 68% de nuevos proyectos, Turbopack es estable en Next.js 16 con 240x HMR en apps grandes, y Rspack (el Webpack compatible en Rust) captura el 14% enterprise. La era de Webpack puro terminó: incluso Webpack 5.97 recomienda migrar a Rspack para builds legacy.
El cambio clave de 2026: Rolldown. Vite 7 reemplazó Rollup por Rolldown (port Rust 100% compatible) y unificó dev y build en el mismo motor. Resultado: plugins de Rollup funcionan sin cambios, pero el build es 8-12x más rápido y el HMR cae por debajo de 30ms incluso en monorepos de 4000 módulos.
js
# Vite 7 en 2026 — mismo config, motor nuevo
npm create vite@latest my-app -- --template react-ts
# vite.config.ts no cambia: Rolldown es drop-in para Rollup
# Pero el build pasa de 14.2s → 1.8s en proyecto de 800 módulos
# Verifica Rolldown activo:
# vite v7.0.3 (rolldown 1.0) dev server running at http://localhost:5173
1. Benchmarks reales 2026 (proyecto de referencia: 800 módulos, 3200 Tests)
Medición en M3 Max, 32GB, pnpm, cold start y HMR con cambio en hoja del árbol:
| Bundler 2026 | Dev start | HMR (cambio hoja) | HMR (cambio root) | Build prod | Bundle (gzip) | Plugin compat |
|---|---|---|---|---|---|---|
| Vite 7 (Rolldown) | 280ms | 22ms | 38ms | 1.8s | 142 kB | 100% Rollup |
| Turbopack (Next 16) | 420ms | 18ms | 32ms | 2.4s | 138 kB | Solo Next.js |
| Rspack 1.3 | 340ms | 31ms | 44ms | 2.1s | 145 kB | 92% Webpack |
| esbuild 0.25 | 180ms | 28ms | 41ms | 1.2s | 168 kB* | Limitado |
| Webpack 5.97 | 2100ms | 280ms | 420ms | 14.2s | 148 kB | 100% Webpack |
* esbuild sin tree-shaking avanzado ni CSS code split — bundle mayor pese a ser más rápido.
Conclusión rápida: Turbopack gana HMR puro por 15% en apps gigantes (>2000 módulos), Vite 7 gana en versatilidad y ecosistema, Rspack gana si tienes Webpack legacy que no puedes reescribir.
2. Vite 7: el estándar de facto en 2026
Vite 7 no es solo "más rápido": es el único bundler que cubre dev, build, test (Vitest), preview y plugin ecosystem sin cambiar de herramienta.
Novedades clave 2026:
js
// vite.config.ts — Vite 7 con Rolldown + Environment API (2026)
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [react(), tailwindcss()],
// Environment API — reemplaza a Vite SSR legacy, soporta RSC sin Next.js
environments: {
client: { consumer: 'client' },
ssr: { consumer: 'server' },
edge: { consumer: 'server', resolve: { conditions: ['edge-light'] } }
},
build: {
// Rolldown trae OXC minifier integrado (reemplaza esbuild minify)
minify: 'oxc',
// Code split automático por route con Rolldown
rolldownOptions: {
output: { advancedChunks: { groups: [{ name: 'vendor', test: /node_modules/ }] } }
}
},
// Vitest 3 corre sobre el mismo Rolldown — 0 config duplicada
test: {
environment: 'jsdom',
globals: true
}
})
Por qué Vite 7 domina en 2026:
- Vitest 3: mismo motor que Vite, sin Jest, sin config separada. 4.2x más rápido que Jest 30.
- OXC: parser/minifier en Rust integrado, reemplaza esbuild + SWC en un binario.
- Rolldown plugins: tus plugins Rollup/Vite existentes funcionan sin migrar (a diferencia de Turbopack que exige reescribir).
- Deploy anywhere:
vite buildgenera estáticos que sirven en Vercel, Cloudflare, Netlify, Node sin lock-in.
3. Turbopack: cuando Next.js es tu framework
Turbopack en Next.js 16 es estable y obligatorio para next dev en 2026. Fuera de Next.js, no lo uses: no hay API pública estable ni soporte para Vite plugins.
Cuándo elegir Turbopack en 2026:
js
// next.config.js — Turbopack es default en Next 16 (2026)
// No hay que activar nada: `next dev` ya usa Turbopack
// Solo desactívalo si necesitas Webpack legacy (no recomendado)
/** @type {import('next').NextConfig} */
const nextConfig = {
// experimental.turbo ya no existe — Turbopack es el default
// Para forzar Webpack (solo si plugin incompatible):
// webpack: (config) => config // legacy, 12x más lento
}
export default nextConfig
// Benchmark Turbopack vs Webpack en Next.js (app 1200 páginas):
// - dev start: 1.8s vs 8.4s (4.6x)
// - HMR: 22ms vs 280ms (12.7x)
// - Build: 38s vs 142s (3.7x)
// - Memoria: 1.2GB vs 2.8GB
Ventaja única de Turbopack: incremental build en dev. Solo recompila el módulo cambiado + dependientes, no todo el graph. En app con 2000 módulos, cambiar un Button.tsx toca 3 archivos, no 2000.
4. Rspack: el puente para Webpack legacy en 2026
Rspack 1.3 es ByteDance + comunidad, 100% compatible con Webpack config/loaders pero 10x más rápido. Ideal si tu empresa tiene 200 loaders/plugins Webpack custom que no puede reescribir a Vite.
js
// rspack.config.js — migra Webpack cambiando 1 línea (2026)
const config = {
// context, entry, output, module.rules: idéntico a Webpack
// Solo cambia el import:
// const webpack = require('webpack') → const { rspack } = require('@rspack/core')
module: {
rules: [{ test: /\.css$/, use: ['postcss-loader'] }] // funciona igual
},
plugins: [new rspack.HtmlWebpackPlugin()],
// Añade aceleración Rust:
experiments: { css: true }, // CSS nativo sin mini-css-extract
optimization: { minify: true } // SWC minifier integrado
}
export default config
// Migración Webpack → Rspack en 2026 (proyecto de 600 módulos):
// 1. npm uninstall webpack webpack-cli → npm install @rspack/core @rspack/cli
// 2. Cambia `webpack` por `rspack` en package.json scripts y config
// 3. `npx rspack build` — 85% de proyectos compila sin cambios
// 4. Los 15% restantes: ajusta 2-3 loaders con API Node legacy
Tabla de decisión 2026:
| Tu situación | Bundler recomendado | Por qué |
|---|---|---|
| Proyecto nuevo (React, Vue, Svelte) | Vite 7 | Ecosistema, Vitest, sin lock-in, HMR top |
| Next.js 16 app | Turbopack (default) | Ya viene integrado, no hay alternativa más rápida en Next |
| Webpack legacy + 50 plugins custom | Rspack | Migración en 1 día, 10x speedup sin reescribir |
| Build ultra-rápido sin plugins (CLI, script) | esbuild | 1.2s build, pero sin HMR avanzado ni CSS split |
| Monorepo 5000+ módulos, p95 crítico | Vite 7 o Turbopack | Ambos <40ms HMR; elige según framework |
5. Migración práctica: de Webpack/Vite 5 a Vite 7 en 2026
js
# De Vite 5/6 → Vite 7 (15 minutos)
npm install vite@^7 @vitejs/plugin-react@latest
# 1. Actualiza vite.config.ts: cambia `build.rollupOptions` → `build.rolldownOptions` (opcional)
# 2. Si usas @vitejs/plugin-react, actualiza a v5 (soporte Rolldown)
# 3. npm run dev — verifica "rolldown" en el log
# 4. npm run build — si algo falla, activa compat: `rolldownOptions: { compat: 'rollup' }`
# De Webpack → Vite 7 (1-2 días para app mediana)
npm install vite@^7
# 1. Crea vite.config.ts con `plugins: [react()]`, `resolve.alias` desde webpack alias
# 2. Mueve `public/` y `index.html` a raíz (Vite lo espera ahí)
# 3. Convierte `require()` a `import` (Vite es ESM puro)
# 4. Reemplaza DefinePlugin por `define: { 'process.env.X': '...'}`
# 5. Plugins: busca equivalente Vite (ej: HtmlWebpackPlugin → vite-plugin-html)
# Verifica HMR <50ms
# Abre http://localhost:5173, cambia un componente, mira el overlay: [vite] hmr update in 22ms
