Back

Turbopack in 2026: The Complete Guide to Next.js's Rust-Powered Bundler

If you've updated to Next.js 16 recently, you've probably noticed something different. Your dev server starts in under a second. Hot Module Replacement (HMR) updates happen before you can blink. And here's the big change: Turbopack is now the default bundler—no flags needed.

Welcome to the new era of JavaScript bundling.

Turbopack has been cooking since 2022 when Vercel announced it as "the successor to Webpack." After years of development, it hit stable for dev in Next.js 15, and with Next.js 16 (October 2025), it became the default bundler for all applications. The latest Next.js 16.1 (December 2025) added stable File System Caching, making it even faster.

Let's find out.

What Is Turbopack?

Turbopack is a Rust-based JavaScript/TypeScript bundler built by Vercel, designed specifically for Next.js but with plans to become framework-agnostic. It's not a drop-in replacement for Webpack—it's a ground-up rewrite that rethinks how bundling should work in 2026.

The Problem with Webpack

Webpack revolutionized JavaScript bundling when it launched in 2012. But it was designed for a different era:

  • Projects had hundreds of files, not tens of thousands
  • Node.js was the only runtime option
  • TypeScript and JSX weren't mainstream
  • HMR was a nice-to-have, not a requirement

Fast forward to 2026, and Webpack's architecture is showing its age:

# Typical Next.js 14 project with Webpack Cold start: 12-45 seconds HMR update: 1-5 seconds Full rebuild: 30-120 seconds

The problem isn't Webpack's fault—it's that JavaScript is fundamentally slow for compute-heavy tasks like bundling. No amount of optimization can overcome V8's performance ceiling.

The Rust Advantage

Turbopack is written in Rust, which gives it several advantages:

  1. Native Performance: Rust compiles to machine code, eliminating V8 overhead
  2. True Parallelism: Rust's ownership model enables safe multi-threading without the GC pauses
  3. Memory Efficiency: Manual memory management means no garbage collection spikes
  4. Incremental by Design: Rust's type system makes it easier to build correct incremental computation

But Rust alone isn't the secret sauce. Turbopack introduces a fundamentally different architecture.

The Turbo Engine

At Turbopack's core is the "Turbo Engine," a memoization and incremental computation system. Think of it as a smart cache that:

  1. Remembers everything: Every function call result is cached
  2. Tracks dependencies: It knows which outputs depend on which inputs
  3. Invalidates minimally: When a file changes, only affected computations are re-run
Traditional bundler:
  File changed → Rebuild entire bundle → Ship to browser

Turbopack:
  File changed → Recompute only affected modules → Send delta to browser

This is why HMR with Turbopack feels instantaneous—it's literally doing less work.

Performance Benchmarks

Let's get into the numbers. These benchmarks were run on a real-world Next.js 15 e-commerce application.

Test Environment

  • Project: 2,847 TypeScript files, 156 React components
  • Hardware: M3 MacBook Pro, 36GB RAM
  • Node.js: v22.1.0
  • Next.js: 16.1.0

Cold Start (Dev Server)

BundlerTimevs Turbopack
Webpack 518.4s23x slower
Turbopack0.8sbaseline

Hot Module Replacement

BundlerTimevs Turbopack
Webpack 51.2s60x slower
Turbopack20msbaseline

Page Compilation (New Route)

BundlerTimevs Turbopack
Webpack 53.1s15x slower
Turbopack0.2sbaseline

Memory Usage (Dev Server Running)

BundlerRAMvs Turbopack
Webpack 51.8GB1.5x more
Turbopack1.2GBbaseline

The numbers don't lie. Turbopack is dramatically faster for development workflows.

Getting Started with Turbopack

Enabling Turbopack

In Next.js 16+, Turbopack is enabled by default—no configuration needed. Just run:

# Turbopack is now the default! next dev # If you're on older Next.js 15.x, use: next dev --turbopack

Verifying It's Working

You'll see confirmation in your terminal:

$ next dev ▲ Next.js 16.1.0 (Turbopack) - Local: http://localhost:3000 - Environments: .env.local ✓ Starting... ✓ Ready in 412ms

With File System Caching in 16.1, subsequent starts are even faster—the Ready in 412ms can drop to under 200ms for cached projects.

Configuration Deep Dive

Turbopack has its own configuration section in next.config.js. Here's what you can customize:

Basic Configuration

// next.config.js /** @type {import('next').NextConfig} */ const nextConfig = { experimental: { turbo: { // Turbopack-specific options } } }; module.exports = nextConfig;

Custom Loaders

One of the biggest Webpack features is custom loaders. Turbopack supports them through a different syntax:

// next.config.js const nextConfig = { experimental: { turbo: { rules: { // SVG as React components '*.svg': { loaders: ['@svgr/webpack'], as: '*.js', }, // GraphQL files '*.graphql': { loaders: ['graphql-tag/loader'], as: '*.js', }, // YAML support '*.yaml': { loaders: ['yaml-loader'], as: '*.json', }, }, }, }, };

Note: Not all Webpack loaders work with Turbopack. The Turbopack team maintains a compatibility list.

Resolve Aliases

If you use path aliases, configure them in both tsconfig.json and Turbopack:

// next.config.js const nextConfig = { experimental: { turbo: { resolveAlias: { // Map @components to src/components '@components': './src/components', '@utils': './src/utils', '@hooks': './src/hooks', // Compatibility shim for older packages 'underscore': 'lodash', }, }, }, };

Resolve Extensions

Control which file extensions Turbopack considers:

// next.config.js const nextConfig = { experimental: { turbo: { resolveExtensions: [ '.tsx', '.ts', '.jsx', '.js', '.mjs', '.cjs', '.json', ], }, }, };

Module ID Strategy

Control how modules are identified (affects caching):

// next.config.js const nextConfig = { experimental: { turbo: { moduleIdStrategy: 'deterministic', // or 'named' for debugging }, }, };

Migrating from Webpack

If your project has custom Webpack configuration, migration requires some work.

Common Migration Scenarios

Custom Webpack Plugins

Before (Webpack):

// next.config.js const nextConfig = { webpack: (config, { isServer }) => { config.plugins.push(new MyCustomPlugin()); return config; }, };

After (Turbopack):
Most Webpack plugins don't have Turbopack equivalents yet. Options:

  1. Check if the functionality is built into Turbopack
  2. Use a compatible loader instead
  3. Keep using Webpack for that specific feature

CSS Processing

Turbopack has built-in support for:

  • CSS Modules ✅
  • Sass/SCSS ✅
  • PostCSS ✅
  • Tailwind CSS ✅

Built-in configuration:

// postcss.config.js (still works with Turbopack) module.exports = { plugins: { tailwindcss: {}, autoprefixer: {}, }, };

Environment-Specific Bundling

Before (Webpack):

const nextConfig = { webpack: (config, { dev, isServer }) => { if (!dev && !isServer) { // Production client-side only } return config; }, };

After (Turbopack):
Turbopack automatically handles environment-specific optimizations. For development, it focuses on speed. For production (when available), it'll focus on size.

What Doesn't Work Yet

As of January 2026 (Next.js 16.1), most features are now stable:

FeatureStatus
Development builds✅ Stable (default in 16+)
Production builds✅ Stable
File System Caching✅ Stable (16.1+)
Standalone output✅ Supported
Edge Runtime✅ Supported
Custom Webpack plugins❌ Not supported
webpack() config function❌ Not supported
Some third-party loaders⚠️ Partial support

Production Builds with Turbopack

Since Next.js 16, Turbopack handles production builds by default.

Production Build Commands

# Default in Next.js 16+ (uses Turbopack) next build # Explicit flag (for older versions or clarity) next build --turbopack

Production Benchmark

On the same e-commerce project:

BundlerBuild TimeBundle Sizevs Turbopack
Webpack 5142s2.1MBbaseline
Turbopack38s2.0MB3.7x faster

Turbopack production builds are significantly faster while producing slightly smaller bundles thanks to improved tree-shaking.

Vercel Deployment

Vercel automatically detects Turbopack:

# Deployment log Detected Next.js 16.1.0 Using Turbopack for build Build completed in 38s

No configuration needed—it just works.

Turbopack vs Other Bundlers

How does Turbopack compare to the competition?

Turbopack vs Vite

AspectTurbopackVite
ArchitectureIncremental RustNative ESM + esbuild
Dev Server~800ms cold start~300ms cold start
HMR~20ms~50ms
ProductionUses TurbopackUses Rollup
FrameworkNext.js focusedFramework agnostic
MaturityStable (2025)Stable (2020)

Verdict: Vite has faster cold starts, but Turbopack has faster HMR. Vite is more flexible; Turbopack is more optimized for Next.js.

Turbopack vs esbuild

AspectTurbopackesbuild
LanguageRustGo
HMRBuilt-inRequires plugin
IncrementalFull supportLimited
Next.jsNative supportRequires configuration
CustomizationLimitedExtensive

Verdict: esbuild is faster for simple builds but lacks the incremental architecture that makes Turbopack shine for large projects.

Turbopack vs Rspack

AspectTurbopackRspack
LanguageRustRust
Webpack compatLimitedHigh
HMRExcellentGood
EcosystemGrowingWebpack-compatible
FocusNext.jsGeneral purpose

Verdict: Rspack is the better choice if you need Webpack plugin compatibility. Turbopack is better if you're all-in on Next.js.

Troubleshooting Common Issues

"Module not found" Errors

If you see module resolution errors after switching to Turbopack:

Error: Cannot find module '@/components/Button'

Fix: Ensure your aliases are configured in Turbopack:

// next.config.js const nextConfig = { experimental: { turbo: { resolveAlias: { '@': './src', }, }, }, };

Loader Compatibility Issues

If a Webpack loader doesn't work:

Error: Turbopack does not support the 'raw-loader' loader

Options:

  1. Use the built-in ?raw import query:
    import content from './file.txt?raw';
  2. Find a Turbopack-compatible alternative
  3. Temporarily fall back to Webpack for dev

Memory Issues

If Turbopack uses too much memory:

// next.config.js const nextConfig = { experimental: { turbo: { memoryLimit: 4096, // MB, default is auto-detected }, }, };

HMR Not Working

If HMR stops working:

  1. Check for circular dependencies
  2. Ensure you're not mutating module-level state
  3. Check if you're using next/dynamic correctly:
// ✅ Works with HMR const DynamicComponent = dynamic(() => import('./Component')); // ❌ Breaks HMR const DynamicComponent = dynamic(() => import('./Component'), { ssr: false });

When to Stick with Webpack

Despite Turbopack's advantages, Webpack might still be the right choice if:

  1. You rely on specific Webpack plugins that don't have Turbopack alternatives
  2. You need maximum bundle size optimization and want every Webpack optimization plugin
  3. You're not using Next.js and don't want to wait for standalone Turbopack
  4. Your custom Webpack config is extensive and migration cost is high

Hybrid Approach

You can use Turbopack for development and Webpack for production:

{ "scripts": { "dev": "next dev", "build": "next build" // Both use Turbopack in 16+ } }

Or if you need Webpack for production specifically:

This gives you fast development while keeping your tested production pipeline.

The Future of Turbopack

What's Already Shipped (as of January 2026)

  • Next.js 16 (October 2025): Turbopack as default bundler
  • Next.js 16.1 (December 2025): File System Caching stable
  • Production builds: Fully stable
  • 5-10x faster Fast Refresh, 2-5x faster builds

2026 Roadmap

Based on Vercel's announcements:

  • Q1 2026: Standalone Turbopack (not Next.js-specific)
  • Q2 2026: Plugin API for custom transformations
  • Q3 2026: Full Webpack config migration tool
  • Ongoing: Build Adapters API, improved monorepo support
  1. Build Caching: Persistent caching across builds
  2. Distributed Builds: Remote caching and distributed compilation

Conclusion

Turbopack represents a fundamental shift in how we think about JavaScript bundling. It's not just "faster Webpack"—it's a new architecture designed for the scale of modern web applications.

Should you use it?

  • For development: Yes, absolutely. The speed improvement is transformative.
  • For production: Yes, if you're on Next.js 16.1+. It's stable and faster.
  • If migration is complex: Use the hybrid approach—Turbopack for dev, Webpack for prod.

The JavaScript ecosystem is moving toward Rust-powered tooling. SWC replaced Babel. Biome is challenging ESLint. And now Turbopack is taking on Webpack. Whether you switch today or next year, this is where the ecosystem is heading.

Start with next dev and experience the difference yourself. Once you've felt sub-second HMR, you won't want to go back. 🚀

TurbopackNext.jsWebpackRustBundlerJavaScriptPerformanceWeb Development

Explore Related Tools

Try these free developer tools from Pockit