blense.
HomeFrontendCodeAINewsGuidesCheatsheetsAbout

Technology decoded, always.

A curated read on AI, product, and the culture behind the code. No noise, no hype.

blense.

Technology with focus. Stories about what innovation really changes.

Sections

FrontendArtificial IntelligenceCode & DevTech News

Blense

AboutRSSPrivacy policyTermsCookies
© 2026 Blense · blense.fun
Frontend

Next.js 16: The Version That Stops Pretending Cache Was Simple

Tired of slow builds and invalidating cache? Next.js 16 solves this! With Turbopack now standard, Cache Components for explicit cache control, proxy.ts for Node.js, stable React Compiler, and React 19.2, development becomes faster and more intuitive. Also discover DevTools MCP for AI-assisted debugging.

Gby Genildo SouzaMar 226 min read
Next.js 16: The Version That Stops Pretending Cache Was Simple

If you've ever lost hours debugging why that page wasn't updating — or why the build was taking three minutes for a small project — Next.js 16 was released with you in mind.


There's a specific moment in the life of every dev using Next.js. You make a change. You run npm run build. You wait. You wait a bit longer. The terminal counts the seconds while you drink coffee. You start questioning your life choices.

And when the build finishes, you deploy — and the page looks exactly the same as before. Because the cache didn't invalidate. And you don't know why.

Next.js 16 doesn't solve all the problems in the universe. But it solves exactly these two. And it does so in a way that finally feels intentional — not a set of configurations you stumbled upon in a Reddit thread at 11 PM.

Turbopack: From "Experimental" to "This is It"

Since Next.js 13, Turbopack was that promise on the horizon. Faster than webpack, but too experimental for production use. You'd test it, find some compatibility issue, revert to webpack, and feel guilty.

In 16, the courtship period is over. Turbopack is the default bundler — both in development and production. No flag, no configuration, no hack.

Minimalist flat design, technical diagram, clean vector illustration, dark theme, professional tech blog style. A comparison diagram showing two paths. One path labeled 'Webpack' with a slower, winding arrow. The other path labeled 'Turbopack' with a much faster, straight arrow. Below the Turbopack arrow, a label indicating 'Default' or a checkmark. Represent speed with visual cues like blur or lightning bolts. Do not include text.
Quick Indicators
up to 10×
Fast Refresh

faster than webpack

2–5×
Production Build

less waiting time

Metrics and signals that help summarize technical impact with immediate readability.

These numbers are not from artificial benchmarks. More than 50% of development sessions in Next.js 15.3+ were already running Turbopack before the official release — which means it was tested at real scale, with real code, before becoming standard.

Have custom webpack in your project? The build will intentionally fail — so your configuration isn't silently ignored. You have two options: migrate the config to Turbopack, or explicitly run with next build --webpack while you migrate.

And there's more: Turbopack File System Caching entered beta. This means compilation artifacts are saved to disk between development server restarts. In a large project, the first next dev of the day will be slow once. After that, it flies.

TEXT
// next.config.ts — habilitar caching em disco (beta)const nextConfig = {  experimental: {    turbopackFileSystemCacheForDev: true,  },};export default nextConfig;

Cache Components: Cache You Can Understand

This is the most important change in 16. And also the hardest to explain without sounding like documentation.

In previous App Router versions, Next.js implicitly cached things. Static routes were cached. Data fetched with fetch was cached. The general rule existed, but exceptions seemed random — and when something didn't update, you were in the dark trying to understand which part of the system decided that data was 'static'.

Next.js 16 reverses this. By default, everything is dynamic. Nothing is cached unless you explicitly say you want it to be.

TEXT
// next.config.ts — ativar Cache Componentsconst nextConfig = {  cacheComponents: true,};export default nextConfig;
The elite dev's arsenal.
Stop Using useMemo Wrong: A Practical Guide to React Performance14 minA Guide to HTML Loading Strategies That Will Speed Up Your Load Times9 minNext.js 16 PPR: Eliminate the static vs. dynamic tradeoff and achieve Edge TTFB with fresh data14 minMicrofrontends with Angular and Nx: what nobody tells you15 min

With this activated, you use the `"use cache"` directive to explicitly state what you want to cache — an entire page, a specific component, a data-fetching function:

TSX
// Cachear uma função de busca de dadosasync function getPosts() {  "use cache";  const res = await fetch("https://api.blueprint.blog/posts");  return res.json();}// Cachear um componente específicoasync function Sidebar() {  "use cache";  const data = await getSidebarData();  return <nav>{data}</nav>;}
ℹ️

What about PPR (Partial Pre-Rendering)? Cache Components is the evolution of PPR. The `experimental.ppr` flag has been removed — but the concept survived and improved. Now you don't need to understand the internal mechanism, you just declare what you want to cache.

More explicit invalidation APIs have also arrived: revalidateTag() with time profiles and updateTag() for instant invalidation after mutations — perfect for dashboards and forms that need to reflect data immediately.

proxy.ts: Goodbye, middleware.ts

This one seems small. It isn't.

The middleware.ts was the file that intercepted requests before they reached your application. It worked — but it ran on the Edge Runtime, which limited what you could do. No native Node.js, no certain libs, no access to certain APIs.

The proxy.ts replaces it with a crucial difference: it runs on Node.js. The migration is mechanical — rename the file, rename the exported function, and the logic remains the same:

TEXT
// Antes: middleware.tsexport function middleware(request) {  return NextResponse.redirect(new URL("/home", request.url));}// Depois: proxy.tsexport default function proxy(request) {  return NextResponse.redirect(new URL("/home", request.url));}

The middleware.ts still exists for Edge Runtime cases — but it's deprecated. If you don't have a specific reason for Edge, go with proxy.ts.

Further Reading
There are other articles that expand on this point

If you want to explore this topic from another angle, I've curated related readings with examples and practical applications.

Explore articles

Stable React Compiler + React 19.2

Two things that were intertwined have arrived stable in 16.

The React Compiler automatically memoizes components. You know that manual work of deciding where to put useMemo and useCallback? The compiler does it for you at build time — without changing a line of code, without new syntax, without extra configuration.

TEXT
// next.config.ts — ativar React Compiler (não é padrão ainda)const nextConfig = {  reactCompiler: true,};export default nextConfig;

Meanwhile, React 19.2 brings three additions that will gradually appear in your daily work:

View Transitions — native animations between navigations, without a library. useEffectEvent — a clean way to extract non-reactive logic from Effects, solving that classic stale closure problem. And Activity — components that 'hibernate' while maintaining state, perfect for tabs and modals that need to persist without being visible.

DevTools MCP: Your AI Agent within Next.js

This is the most experimental on the list — but the most interesting depending on how you work.

Next.js 16 natively implements the Model Context Protocol. This means an AI agent connected to your development environment gains access to the real application context: unified browser and server logs, automatic stack traces, understanding of the active route, caching, and rendering behavior.

Instead of copying an error to paste into a chat, the agent sees what's happening. It's the first step towards AI-assisted debugging that doesn't rely on you translating the problem into words.

How to Update

Vercel has provided an automatic codemod that handles most migrations — including renaming middleware.ts to proxy.ts and adjusting asynchronous params APIs:

BASH
npx @next/codemod@canary upgrade latest


To update manually:

BASH
npm install next@latest react@latest react-dom@latest
💡

No breaking changes in the default App Router? Almost. The most relevant change is that params and searchParams are now completely asynchronous — you need await before accessing them. The codemod automatically resolves this in most cases.

What Really Changes in Your Day-to-Day
  • 1Turbopack by default — faster builds without any configuration.
  • 2Explicit Cache — what doesn't have "use cache" is dynamic. No more guesswork.
  • 3proxy.ts — rename the file, gain Node.js runtime in the interceptor.
  • 4React Compiler — automatic memoization, less manual optimization code.
  • 5View Transitions — navigation animations without an external library.
  • 6DevTools MCP — AI agent with real application context.

#JavaScript#TypeScript#React#Next.js

The elite dev's arsenal.

Stop Using useMemo Wrong: A Practical Guide to React Performance
Frontend

Stop Using useMemo Wrong: A Practical Guide to React Performance

Master React useMemo with this guide. Learn when to memoize, how to fix dependency array bugs, and why over-optimization can hurt your performance.

Genildo Souza · Jul 8 · 14 min
CSS Animations: How to Build Performant, Professional Interfaces Without Messy Code
Frontend

CSS Animations: How to Build Performant, Professional Interfaces Without Messy Code

Bring your web interfaces to life. Learn when to use CSS transitions versus keyframes and how to optimize your animations for peak performance.

Genildo Souza · Jul 4 · 17 min
Angular Micro-frontends: How to Scale Large Applications and Eliminate Monolithic Build Times with Module Federation
Frontend

Angular Micro-frontends: How to Scale Large Applications and Eliminate Monolithic Build Times with Module Federation

Discover how to break down large Angular monoliths using Module Federation to enable independent deployments and seamless team scaling.

Genildo Souza · Jun 21 · 10 min
In this article
  • Turbopack: From "Experimental" to "This is It"
  • Cache Components: Cache You Can Understand
  • proxy.ts: Goodbye, middleware.ts
  • Stable React Compiler + React 19.2
  • DevTools MCP: Your AI Agent within Next.js
  • How to Update