Blog

Next.js 16 (Beta): What's New for Developers?

Next.js has announced the Beta of version 16. In this post I want to share what changed in this release, the way I understood it and from a developer's point of view.

Turbopack: The New Default Bundler

Turbopack is now the default bundler for both development and production, which means Next.js apps get better performance right out of the box.

The concrete gains that come with the switch:

  • 2 to 5 times faster production builds, and up to 10 times faster fast refresh.

The best part is that we get this boost with no extra configuration at all. There is still a way out for anyone who prefers the old setup (Webpack): adding the --webpack flag on the command line takes you straight back to Webpack.

React Compiler: Automatic Optimization

The compiler analyzes your components, prevents unnecessary re-renders and improves performance. We used to add useMemo or useCallback by hand to squeeze out performance. Now React Compiler decides on its own which components need to re-render, so that is no longer necessary.

React Compiler is not enabled by default yet, but a single flag in next.config.js turns it on.

// next.config.js
experimental: { reactCompiler: true }

New Caching APIs

What caught my attention here was how much Next.js is focusing on data consistency. Cache management is becoming much more flexible and targeted.

  • revalidateTag(): Instead of the whole page, we can now revalidate only a specific "tagged" section. When we update a piece of data, only the related component re-renders. It follows the "stale-while-revalidate" model: the user keeps seeing the old data while the new data is fetched in the background.
  • updateTag(): Only available in Server Actions. The difference is that it shows the update immediately, which makes a lot of sense when the user needs to see a change right away (a profile update, for example).
  • refresh(): Also Server Actions only, but it doesn't touch the cache at all. I find it ideal for "live" data such as notifications or an unread count.

Build Adapters & Routing Improvements

The Build Adapters API makes Next.js platform-independent. Projects can now be deployed to environments like Cloudflare, AWS or S3 with ease.

Also:

  • Layout deduplication → Pages that share a layout download it once instead of on every prefetch.
  • Incremental prefetching → Next.js now prefetches only the parts that aren't in the cache yet, not entire pages.

The result: less network traffic and faster transitions.

Cache Components: Partial Prerendering (PPR)

The experimental PPR flag is gone, but that doesn't mean the feature is. As far as I understand it, Cache Components now take over the core idea behind PPR. The framework decides per component:

  • which parts are cached statically,
  • which parts stay dynamic.

This is the most important step yet on the "smart rendering" side of Next.js.

Next.js now wants to resolve "build time + request time" data in a single asynchronous chain.

Upgrade Notes

  • Node.js 20.9+ and TypeScript ≥ 5 are required
  • middleware.js has been renamed to proxy.js
  • revalidateTag() now requires a cache profile argument

For more technical detail, take a look at the Next.js blog post.

Happy reading!


Originally published in Turkish on Medium.