Architecture
#Next.js#Cache Components#Turbopack#Migration

Next.js 16.4 and Cache Components: What to Migrate First

Next.js 16.4 recommends Cache Components for every app, enables them by default in new projects, and adds next upgrade --agent. Here is a migration order that does not stall.

3 min read
Share

The Announcement That Changes the Default

Next.js 16.4 shipped on 6 October 2026 with a sentence that matters more than any individual feature: Cache Components are now recommended for every Next.js app, and they are enabled by default in new projects created with create-next-app. The model becomes the default in Next.js 17.

Until 16.4 the team had been careful not to recommend it universally, because there were cases where it could not match the cost and performance guarantees of the older model. This release closes those gaps. Existing apps are now in the position of deciding when, not whether.


What Cache Components Actually Change

The model is about three promises the framework is trying to make at once: fast initial loads even for personalised pages, instant client navigations for server-rendered apps, and caching that is opt-in, declarative, and composable rather than an ambient behaviour you have to reason about after the fact.

If you have spent time debugging a page that was unexpectedly static, or unexpectedly dynamic, that last promise is the one aimed at you.


Migration Order That Does Not Stall

The temptation is to start with the most complex route. Do not. Cache Components reward understanding your data boundaries, and the fastest way to learn your boundaries is on a route that cannot hurt you.

  • Start with static content. Marketing pages, legal pages, the blog index. These have no personalisation and obvious invalidation, so mistakes are cheap.
  • Then authenticated reads that are cached per user. This is where the model earns its keep, and where the security questions live. Be explicit about what the cache key includes.
  • Leave mutations until the reads are stable. Revalidation is easier to reason about once you know what you cached.
  • Only then touch routes with third-party side effects. Payments, email, anything with an external system that cannot be replayed.

Use the Agent Tooling, Not Just the Docs

16.4 introduces next upgrade --agent, which gives an agent version-specific guidance for the upgrade, plus dedicated skills for the refactorings Cache Components need. That is a meaningful shift in how framework upgrades get done, and it is worth using even if you do the review yourself.

Two cautions. An agent that reorganises your data fetching will produce a diff that looks plausible whether or not it is correct, so every caching change needs to be justified in review. And the tooling knows the framework's rules, not your product's, so the definition of correct is still yours to supply.


The Rest of 16.4

The release also brings smaller disk cache size, lazy server HMR, a Turbopack shared runtime, and smaller production bundles, plus React 19.3 support. On the experimental side there is a Rust React Compiler, disk cache cleanup, lazy dynamic imports, worker threads, additional roots and global virtual store support, and a Turbopack Bundle Analyzer.

The bundle work is the part I would look at first regardless of your caching plans, because it is measurable and reversible.


What I Would Do This Month

Upgrade to 16.4 and keep the current caching model. Measure the bundle and the navigation timings so you have a baseline. Then migrate one static route to Cache Components and watch what the numbers do.

That gives you a real comparison instead of an argument about which model is better in theory, and it means the Next.js 17 default arrives as a known quantity rather than a surprise.

Next.jsCache ComponentsTurbopackMigration