next dev and next build.
Why Turbopack is fast
Turbopack’s performance comes from two core design principles:Demand-driven evaluation
Turbopack only processes the modules your application actually requests. On first load, only the modules needed to render the current page are compiled. Unvisited routes are compiled lazily.
Persistent caching
Build artifacts are cached to disk between runs. On subsequent starts, only modules that have changed (or depend on changed modules) are recompiled. Cold starts after the first build are significantly faster.
Repository structure
Turbopack lives in theturbopack/ directory of the Next.js monorepo, managed as a git subtree:
How Turbopack differs from Webpack
| Webpack | Turbopack | |
|---|---|---|
| Language | JavaScript | Rust |
| Evaluation | Eager (full graph) | Demand-driven (on-request) |
| Caching | In-memory only | In-memory + persistent disk cache |
| Parallelism | Limited (single-threaded by default) | Native multi-threading |
| Plugin API | Mature, extensive | Growing — not fully compatible with Webpack plugins |
| Default since | Next.js v1 | Next.js v15 (dev), v15 (build) |
Forcing Webpack
If you need to use Webpack instead of Turbopack, pass the--webpack flag:
There is no
--no-turbopack flag. Use --webpack to opt out.Configuring Turbopack in Next.js
You can customize Turbopack behavior innext.config.js under the turbopack key:
Analyzing bundles with Turbopack
Turbopack includes a build analysis tool available in the.next/analyze/ output after a production build. You can inspect it with:
turbopack-analyze/ helpers for programmatic inspection of the bundle graph.
Current status
Turbopack is stable and the default in Next.js 15. Ongoing work focuses on:- Expanding coverage of Webpack plugin APIs
- Improving persistent cache invalidation accuracy
- Reducing memory usage for very large applications
