Next.js 16 and 16.3, what changed and what to know before upgrading

javascript dev.to

If your project runs Next.js 14 or 15 and you haven't looked at what's changed lately, there's a fair amount to process. Next.js 16 shipped in October 2025 with core changes to the bundler, the React compiler, and the caching model. Version 16.3 reached stable on August 3, 2026 with a redesigned navigation system. Both versions have breaking changes and new capabilities worth understanding before upgrading in production.

This post covers what changed concretely, what's available by default, what requires manual activation, and when it's worth waiting.

Turbopack is the default since Next.js 16

The most significant thing about version 16 wasn't a new feature, it was Webpack's exit. Turbopack, the Rust-based bundler Vercel had been developing since 2022, became the stable default for both development and production.

No configuration needed. You upgrade, run next dev, and you're already using Turbopack. The numbers from production projects are meaningful: builds that took 24.5 seconds dropped to 5.7 seconds. Fast Refresh is up to 10 times faster. Some projects in long development sessions were hitting 21.5 GB of memory before 16.3; the 16.3 release reduced dev server memory usage by up to 90%.

If you have a custom Webpack configuration, you can still use it with the --webpack flag:

next dev --webpack
next build --webpack
Enter fullscreen mode Exit fullscreen mode

That gives you time to migrate without blocking the project. But it's worth doing: Webpack won't receive improvements in future Next.js versions and support is maintenance-only.

React Compiler, what it does and when it matters

Next.js 16 included stable support for the React Compiler. What the compiler does is analyze the component tree and add automatic memoization where it detects that a value or component doesn't need to be recalculated. In practice it eliminates most manual useMemo, useCallback, and memo calls.

What it doesn't do is fix poorly written code. If a component has side effects that should be in a useEffect but are loose in the render body, the compiler doesn't compensate for that. And if your app already has good manual memoization discipline, the perceptible difference can be minimal.

For new projects it makes sense to enable it from the start. For existing ones, the conservative path is enabling it in staging, measuring the impact, and migrating from there.

Breaking changes in Next.js 16

There are three changes that can break existing code and are worth reviewing before upgrading.

Params and searchParams in layouts, pages, and metadata are now Promises. Code that assumed synchronous access to those values will fail. The migration is adding await before accessing them, or using the official codemod that handles it automatically.

next/image changed its defaults: decoding is now async by default and fetchPriority is auto. Images that relied on the previous behaviors may need explicit attribute adjustments.

Fetch requests in Server Components that didn't pass a cache policy now default to cache: 'no-store'. Data that was previously cached silently now gets fetched on every request. If you notice a latency increase after upgrading, that change is likely the reason.

For migration, Vercel published a codemod:

npx @next/codemod@canary upgrade latest
Enter fullscreen mode Exit fullscreen mode

It covers most automatic changes but not all. The official upgrade guide has the detail on what the codemod doesn't handle.

Instant Navigations and Partial Prefetching

Next.js 16.3 reached stable on August 3, 2026. The most significant change is Instant Navigations, which addresses a long-standing gap between Next.js and SPAs: the perceived speed of client-side transitions.

In Next.js 14 and 15, when a user clicked a link the browser sent a request to the server, waited for the response, and rendered. The wait time was always visible, especially on slower connections. Classic SPAs avoided that by showing immediate content because everything was on the client, but they paid for it in initial load time and SEO.

Instant Navigations combines two things. Cache Components lets you cache parts of the layout on the client. Partial Prefetching generates a single reusable shell per route and caches it once. If you have 20 links pointing to /products/[id], the browser prefetches one generic shell, not 20 individual prefetch requests. When the user clicks, the shell appears immediately while dynamic content arrives from the server.

The practical result: navigations that feel like those in a SPA without giving up Server Components or the server-first model.

Both features are opt-in for now. To enable them:

// next.config.ts
import type { NextConfig } from 'next';

const nextConfig: NextConfig = {
  cacheComponents: true,
  partialPrefetching: true,
};

export default nextConfig;
Enter fullscreen mode Exit fullscreen mode

They're planned as defaults in a future major version. Enabling them now isn't a dead end, it's early adoption of something that will become standard.

Inside routes, you have three options:

// Stream: shell appears immediately, content arrives after
export default async function Page() {
  return <Suspense fallback={<Shell />}><Content /></Suspense>
}

// Cache: content is cached on the client
async function ProductData({ id }: { id: string }) {
  'use cache'
  // ...
}

// Block: disable Instant Navigations for this specific route
export const instant = false
Enter fullscreen mode Exit fullscreen mode

For fully static prerendered routes with SSG, Instant Navigations doesn't make a perceptible difference. The benefit is highest on dynamic routes with data that varies per request.

Turbopack and memory in 16.3

Beyond Instant Navigations, 16.3 brought targeted improvements to Turbopack. Dev server memory usage dropped by up to 90% in large projects. Some setups that reached 21.5 GB in long sessions now run on a fraction of that.

File system caching for builds was also added. Subsequent builds reuse previous work. In large projects that shows up in incremental build time.

MCP and agents in Next.js 16.3

One addition that's gotten less coverage is the MCP endpoint. Next.js 16.3 exposes /_next/mcp on the dev server, which allows coding agents to connect to the running server and check the compilation status of specific routes without running a full next build.

The route compiler has a compile_route tool that responds whether a specific route compiles correctly. For AI-assisted development flows, that significantly reduces validation time.

The Next.js team also shipped four first-party agent skills: one that adopts Cache Components, one that optimizes routes after adoption, one that adopts Partial Prefetching, and a dev-loop skill that connects the agent to the running server through the MCP endpoint.

What to enable now and what to wait on

For a new project, enabling Turbopack and React Compiler from the start makes sense. Both are stable and the benefits are immediate.

For Instant Navigations and Partial Prefetching, the decision depends on the application profile. Dynamic routes with many links between pages are the ideal case. Fully static routes won't notice a difference. The sensible path is enabling them in staging, measuring with Lighthouse or Web Vitals, and moving to production with data.

The breaking changes around async params and the defaults in next/image and fetch need review regardless of the rest. The codemod handles most of it but not everything.

If you use Azure Static Web Apps to deploy your Next.js application, the official Microsoft documentation covers both static and hybrid modes with Server Components. A version migration doesn't require infrastructure configuration changes for most projects:

👉 https://learn.microsoft.com/azure/static-web-apps/nextjs?wt.mc_id=studentamb_510930


Information based on official Next.js 16, 16.2, and 16.3 release notes as of August 16, 2026. Next.js may update behaviors between minor versions. Check the official changelog at nextjs.org/blog before upgrading production projects.

Source: dev.to

arrow_back Back to Tutorials