<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja" -->

---
title: Next.js 16.3 and how Turbopack decides to chunk your...
description: Next.js 16.3 brings lower memory usage, faster builds and type checking, and instant client-like navigations for server-rendered pages. The bigger story is how...
canonical: https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Next.js 16.3 and how Turbopack decides to chunk your JavaScript | daily.dev
og:description: Next.js 16.3 brings lower memory usage, faster builds and type checking, and instant client-like navigations for server-rendered pages. The bigger story is how...
og:url: https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja
og:image: https://api.daily.dev/og/posts/c37spcoJA.png
og:image:alt: Next.js 16.3 and how Turbopack decides to chunk your JavaScript
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Next.js 16.3 and how Turbopack decides to chunk your JavaScript

**[Collections](https://daily.dev/sources/collections)** · 5 min read · 30 upvotes · 3 comments

## Summary

Next.js 16.3 brings lower memory usage, faster builds and type checking, and instant client-like navigations for server-rendered pages. The bigger story is how Turbopack, now the default bundler, chunks JavaScript: it groups modules into chunk groups and merges chunks based on estimated caching benefit calculated separately for single-page and multi-page sessions, outperforming both no-merging and full-merging extremes in benchmarks. New experimental features include generateComponentChunks for component-level chunk awareness, plus analytics-driven options firstPageLoadPriority, priorityRoutes, and clusters. The release also adds CJS tree-shaking, a shared Turbopack runtime, and a lighter default runtime without WASM/Web Worker code unless used. Separately, Lovable migrated an 850,000-line, 400-route app from Next.js/Vercel to TanStack Start using a parallel proxy setup, and Oxlint, TanStack Router, Ionic Framework, Material UI, and nuqs all shipped updates.

## Content

## What shipped

Next.js 16.3 is out, and it's a bigger release than the version number suggests. There are free wins you get just by upgrading, opt-in features that change how data loading works, and some experimental stuff worth watching but not shipping to production yet.

---

## The free wins (no config changes needed)

**Dev server memory is down up to 90%.** Turbopack now caches to disk, so restarting the dev server no longer means rebuilding everything from scratch.

**`next build` is up to 5.5x faster** with build caching enabled.

**SSR throughput is up ~22%** from switching to native Node.js streams instead of the previous implementation.

**TypeScript 7 native type checking** is available as an opt-in. It's faster, though you'll want to test it against your specific setup before committing.

These are the kinds of improvements worth upgrading for immediately, before touching anything else.

---

## Instant Navigations

This is the headline feature, enabled via two flags: `cacheComponents` and `partialPrefetching`.

The old model gave you a binary choice: either show a `loading.tsx` skeleton while the full page loads, or prefetch the entire page upfront with `prefetch={true}`. Neither is great. Skeletons feel slow; full prefetching is expensive.

The new approach extracts reusable route shells using Suspense and `use cache`. When you navigate, the shell renders instantly while data streams in behind it. It's closer to how a well-built SPA feels, but with server rendering.

**When to enable it:**
- `partialPrefetching` is a good default for link-heavy apps
- `cacheComponents` is worth adopting deliberately, since it changes how your data layer works and you'll want to understand the implications before flipping it on everywhere

### New devtools

Three new tools ship alongside this:
- **Instant Insights** - surfaces navigation performance in the browser
- **Navigation Inspector** - shows what's being prefetched and when
- **Playwright `instant()` helper** - lets you write tests that catch navigation regressions before they ship

The Playwright helper is genuinely useful. Navigation performance is the kind of thing that quietly degrades over time without anyone noticing until users complain.

---

## How Turbopack decides to chunk your JavaScript

This is worth understanding separately, because it affects every Next.js app whether you're thinking about it or not.

The naive approaches are both bad:
- **One big bundle** - fast to reason about, terrible for caching
- **One chunk per module** - perfect cache granularity, but the HTTP overhead and duplicate downloads across pages kill performance
- **One chunk per page** - each page gets its own bundle, so shared code gets downloaded multiple times

Turbopack's actual approach merges chunks within a "chunk group" based on estimated caching benefit, calculated across both single-page and multi-page sessions. It's trying to find the point where the cache hit rate justifies the extra requests.

Benchmarks on nextjs.org show meaningful differences between no merging, Turbopack's defaults, and full merging. The defaults land in a reasonable middle ground, but the right answer depends on your traffic patterns.

### New chunking options in 16.3

`generateComponentChunks` is the main addition - it enables smarter cache-aware fetching at the component level.

There are also analytics-based configuration options: `firstPageLoadPriority`, `priorityRoutes`, and `clusters`. These let you tune chunking based on actual user behavior rather than guessing. If you have analytics data about which routes users visit together, you can feed that in.

Other chunking improvements:
- CJS tree-shaking (CommonJS modules were previously excluded from tree-shaking)
- A shared Turbopack runtime across chunks
- A lighter default runtime that drops WebAssembly and Web Worker code that most apps don't need

This work came out of an internship project. The writeup on it is worth reading if you want to understand the tradeoffs in detail.

---

## Other additions

**`catchError`** - a new primitive for retryable error boundaries. Useful for transient failures where you want to offer a retry rather than a full error page.

**Turbopack glob imports** - you can now use glob patterns in imports, which was a gap compared to webpack.

**Root params** - cleaner access to route parameters at the root layout level.

**Better ISR for partially prerendered routes** - incremental static regeneration now works more predictably with PPR.

**Experimental Rust-based React Compiler port** - showing 34-46% faster dev builds when Babel is fully dropped. Don't use this in production yet, but it's the direction things are heading.

---

## Ecosystem context

The Next.js team did a Reddit AMA around this release covering the App Router, RSC, and caching - worth reading if you have questions about the direction of the framework.

On the broader React ecosystem side: Lovable migrated an 850K-line, 400-route app from Next.js and Vercel to TanStack Start, running both in parallel behind a proxy during the transition. It's a useful case study if you're evaluating alternatives. Oxlint also added React Compiler-based lint rules, claiming 10x faster linting than the Babel plugin.

---

## What to actually do

1. **Upgrade now** for the memory, build speed, and SSR throughput improvements
2. **Enable `partialPrefetching`** if your app has a lot of internal links
3. **Evaluate `cacheComponents` carefully** - read the docs on how it changes data fetching before enabling it
4. **Skip the experimental Rust compiler** in production for now
5. **Look at the chunking options** if you have analytics data about user navigation patterns - `priorityRoutes` and `clusters` could make a real difference for large apps

## Questions this post answers

### What performance improvements does Next.js 16.3 bring without changing any configuration?

Dev server memory usage drops up to 90% because Turbopack now caches to disk instead of rebuilding from scratch on restart. Production builds run up to 5.5x faster with build caching enabled, and SSR throughput increases roughly 22% from switching to native Node.js streams. These gains apply immediately on upgrade with no config changes required.

_daily.dev helps developers track framework upgrades like this so performance wins aren't missed._

### What do the cacheComponents and partialPrefetching flags do in Next.js 16.3?

They enable Instant Navigations, replacing the old binary choice between a loading.tsx skeleton and prefetching a whole page. Reusable route shells built with Suspense and use cache render instantly while data streams in behind them. partialPrefetching suits link-heavy apps as a default, while cacheComponents changes the data layer and should be adopted deliberately after understanding its implications.

_developers evaluating this rollout can follow how Next.js caching strategies evolve on daily.dev._

### How does Turbopack decide how to chunk JavaScript bundles in Next.js?

Turbopack merges chunks within a chunk group based on estimated caching benefit calculated across both single-page and multi-page sessions, avoiding the extremes of one giant bundle, one chunk per module, or one chunk per page. Next.js 16.3 adds generateComponentChunks for component-level cache-aware fetching, plus analytics-driven options firstPageLoadPriority, priorityRoutes, and clusters for tuning based on real traffic patterns.

_teams tuning bundle strategy for large apps can track chunking techniques like these on daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@matchpoint** · 0 upvotes

> ![GIF](https://static.klipy.com/ii/35ccce3d852f7995dd2da910f2abd795/f2/75/vGXqOhRp.gif)

**@pdfopsdev** · 0 upvotes

> the granular per-route chunking is nice for browser caching but it's a headache on edge runtimes with strict bundle size caps (CF workers, deno deploy) - more chunks means more per-file overhead unless you can bundle them back at deploy time. curious if turbopack's build output gives you a manifest you can post-process for that

## Similar posts on daily.dev

- [Next.js 16.3: Instant Navigations, Up to 90% Less Dev Memory and Faster Builds](https://daily.dev/posts/next-js-16-3-instant-navigations-up-to-90-less-dev-memory-and-faster-builds-abksajvqx) · InfoQ · 3 upvotes · 1 comments
- [Turbopack: What's New in Next.js 16.3](https://daily.dev/posts/turbopack-what-s-new-in-next-js-16-3-keahy4yqa) · Next.js · 82 upvotes · 11 comments
- [My super sweet Next.js 16](https://daily.dev/posts/my-super-sweet-next-js-16-xe6wjimta) · Bytes by ui.dev · 3 upvotes · 0 comments
- [Next.js 16.1](https://daily.dev/posts/next-js-16-1-zk9zo5ctw) · Next.js · 214 upvotes · 16 comments

---

Tags: [#react](https://daily.dev/tags/react), [#nextjs](https://daily.dev/tags/nextjs), [#turbopack](https://daily.dev/tags/turbopack)

[View this post on daily.dev](https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Next.js 16.3 and how Turbopack decides to chunk your JavaScript","url":"https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja"},"datePublished":"2026-09-03T16:32:13.775Z","dateModified":"2026-09-13T19:33:31.451Z","description":"Next.js 16.3 brings lower memory usage, faster builds and type checking, and instant client-like navigations for server-rendered pages. The bigger story is how...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9daf2a0dfc0c4b4e13b18c27d6782d87?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/9daf2a0dfc0c4b4e13b18c27d6782d87?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Collections","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Collections","logo":"https://media.daily.dev/image/upload/s--fk_6ycEi--/f_auto,q_auto/v1780996001/logos/collections?_a=BAMAMiWQ0","url":"https://daily.dev/sources/collections"},"commentCount":3,"discussionUrl":"https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":30},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":3}],"keywords":"react,nextjs,turbopack","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Collections","item":"https://daily.dev/sources/collections"},{"@type":"ListItem","position":3,"name":"Next.js 16.3 and how Turbopack decides to chunk your JavaScript"}]}
{"@context":"https://schema.org","@type":"WebPage","@id":"https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja","comment":[{"@type":"Comment","text":"","datePublished":"2026-09-04T14:27:35.617Z","url":"https://daily.dev/posts/c37spcoJA#c-ATEoYuOND","author":{"@type":"Person","name":"Numb Code","url":"https://daily.dev/matchpoint","image":"https://lh3.googleusercontent.com/a/ACg8ocJ86YIewk804FajHaEbzIBiQa9RFZVR0fs-vBpSZ3ObyDY6Qz8=s96-c"}},{"@type":"Comment","text":"the granular per-route chunking is nice for browser caching but it’s a headache on edge runtimes with strict bundle size caps (CF workers, deno deploy) - more chunks means more per-file overhead unless you can bundle them back at deploy time. curious if turbopack’s build output gives you a manifest you can post-process for that","datePublished":"2026-09-03T18:02:51.840Z","url":"https://daily.dev/posts/c37spcoJA#c-Utr9ZGDDc","author":{"@type":"Person","name":"PDFops","url":"https://daily.dev/pdfopsdev","image":"https://media.daily.dev/image/upload/s---8isRBKc--/f_auto/v1782922291/avatars/avatar_orjMeK8QKaaVZwGq7ScPz?_a=BAMAMicg0"}}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/next-js-16-3-and-how-turbopack-decides-to-chunk-your-javascript-c37spcoja#faq","mainEntity":[{"@type":"Question","name":"What performance improvements does Next.js 16.3 bring without changing any configuration?","acceptedAnswer":{"@type":"Answer","text":"Dev server memory usage drops up to 90% because Turbopack now caches to disk instead of rebuilding from scratch on restart. Production builds run up to 5.5x faster with build caching enabled, and SSR throughput increases roughly 22% from switching to native Node.js streams. These gains apply immediately on upgrade with no config changes required. daily.dev helps developers track framework upgrades like this so performance wins aren't missed."}},{"@type":"Question","name":"What do the cacheComponents and partialPrefetching flags do in Next.js 16.3?","acceptedAnswer":{"@type":"Answer","text":"They enable Instant Navigations, replacing the old binary choice between a loading.tsx skeleton and prefetching a whole page. Reusable route shells built with Suspense and use cache render instantly while data streams in behind them. partialPrefetching suits link-heavy apps as a default, while cacheComponents changes the data layer and should be adopted deliberately after understanding its implications. developers evaluating this rollout can follow how Next.js caching strategies evolve on daily.dev."}},{"@type":"Question","name":"How does Turbopack decide how to chunk JavaScript bundles in Next.js?","acceptedAnswer":{"@type":"Answer","text":"Turbopack merges chunks within a chunk group based on estimated caching benefit calculated across both single-page and multi-page sessions, avoiding the extremes of one giant bundle, one chunk per module, or one chunk per page. Next.js 16.3 adds generateComponentChunks for component-level cache-aware fetching, plus analytics-driven options firstPageLoadPriority, priorityRoutes, and clusters for tuning based on real traffic patterns. teams tuning bundle strategy for large apps can track chunking techniques like these on daily.dev."}}]}
```

