Next.js 16 is a major release centered on defaults, cleanup, and developer tooling. The big themes are Turbopack becoming the default bundler path, Cache Components maturing, the new MCP server in dev, and a long list of removals for deprecated APIs and configs.
What's new
-
Turbopack is now the default bundler for custom servers, and the CLI now defaults to Turbopack with an explicit
--webpackescape hatch when you need the old path. This release also adds more deterministic manifest writing, filesystem cache flags, better Babel loader support, worker-thread builds, and clearer error messages around unsupported config and root detection (#84281, #84216, #84081, #84215, #82676, #84818, #83918). -
The dev server now includes a Model Context Protocol server and enables it by default. It adds tools to fetch errors, page metadata, and server actions, supports logging, can be enabled through an environment variable, and resets its logging file per session so editor and agent integrations can inspect a running app with less manual setup (#84100, #84161, #84211, #84382, #84226, #84278, #84425, #85058).
-
Cache Components moves much closer to the mainstream in v16. It now has stable
cacheLifeprofiles, a visible status indicator in the CLI and DevTools, support forheaders()in runtime prefetches, cache warmup and bypass handling improvements, and new cache APIs includingrefreshandupdateTagplus a newrevalidateTagsignature (#85050, #85047, #85048, #83838, #85014, #85082, #84666, #83822). -
The
typedRoutessystem now covers more navigation surfaces. It adds type-saferedirect()andpermanentRedirect()targets whenconfig.typedRoutesis enabled, and fixes linking to Route Handlers and Pages API routes so valid GET endpoints are recognized correctly (#82860, #82858). -
Next.js config and TS ergonomics improved in a few places. You can use
next.config.mts,metadataBasecan now be provided as a string URL, and config typing is stricter so excess properties are flagged instead of silently accepted (#83556, #84297, #84069). -
Pure App Router builds no longer emit Pages Router
_app,_document, or_erroroutput just to cover 500 responses. Next.js now uses built-in App Router handling for that case, which makes build output and deployment routing less confusing for App Router-only projects (#82444).
Breaking changes
-
Deprecated synchronous access to Dynamic APIs has been removed. If your app still relies on sync access patterns here, you need to move to the current async model before upgrading (#84179).
-
Middleware is deprecated in favor of Proxy, and the release includes codemods to help rename files and APIs. There is also one instrumentation rename to account for:
context.routeTypeoninstrumentation.onRequestErrorchanges frommiddlewaretoproxy(#84764, #84119, #84127, #84824, #85006). -
ESLint moves to Flat Config by default in both
@next/eslint-plugin-nextandeslint-config-next. Projects still using legacy ESLint config formats should plan to migrate, and create-next-app templates have been updated accordingly (#83763, #84874). -
Built-in AMP support and the AMP codemod have been removed. Apps still depending on AMP-specific behavior need to stay on an older version or remove that integration before upgrading (#84312, #84356).
-
The minimum supported TypeScript version is now 5.1.0, and
sass-loaderis bumped to v16. Upgrade those dependencies first if your project is below these versions (#84384, #84387). -
Several deprecated config and runtime options were removed or renamed, including
.turbo,dynamicIO,experimental_pprroute-level config,unstable_rootParams, andconfig.turbopack.moduleIds, which moves toconfig.experimental.turbopackModuleIds(#84109, #84872, #84871, #84373, #84230). -
Image defaults and validation changed in a few important ways.
images.minimumCacheTTLnow defaults to 4 hours instead of 1 minute,images.localPatternsis required when a local imagesrcincludes a query string,images.imageSizesdrops the default16, andimages.domainsis now deprecated in favor of the newer configuration model; newdangerouslyAllowLocalIPandmaximumRedirectsoptions were also added (#84105, #84406, #84647, #84625, #84676). -
Client Segment Cache is now enabled by default, and router scroll optimization is also on by default. If you previously depended on the old navigation or cache behavior, test navigation, scroll restoration, and prefetch-heavy flows during upgrade (#84643, #84102).
-
Automatic linting during
next buildhas been removed. If your CI depended on build-time linting, run ESLint explicitly as a separate step (#83136).
Fixes
-
Aliased navigations now apply the expected scroll handling instead of keeping the old scroll position when they reuse existing RSC data (#82900).
-
Rewrites no longer mutate the URL while collecting params, avoiding incorrect double-rewrite behavior in some CDN and function setups (#82907, #83963).
-
Edge runtime request cloning now validates and clones requests correctly (#82878).
-
Typed route validation now accepts route handlers that return
Promise<Response | void>and fixes missingnext/linktypes in typed route setups (#82854, #82814). -
Turbopack no longer produces invalid NFT output when a traced file sits behind a symlink, which could otherwise lead to broken deployment archives (#82887).
Other notable changes
- Next.js now warns on deprecated
runtimeConfigusage and deprecatesnext/legacy/image(#84168, #84622). - Dev startup work was trimmed by loading webpack and other tooling only when needed, and by removing TypeScript from the hot path during boot (#84123, #84090).
- Build output and tracing gained more visibility, including
.next/trace-buildand clearer timing logs for build steps (#83949, #84602, #84606).
Contributors
@mischnic, @timneutkens, @unstubbable, @wyattjoh, @Cy-Tek, @lukesandberg, @OoMNoO, @ztanner, @icyJoseph, @huozhi, @gnoff, @ijjk, @povilasv, @dwrth, @obendev, @aymericzip, @devjiwonchoi, @SyMind, @vercel-release-bot, @Shireee, @eps1lon, @dharun36, @kachkaev, @bgw, @yousefdawood7, @TheAlexLichter, @sokra, @ericx0099, @leerob, @Copilot, @fireairforce, @fufuShih, @anvibanga, @hayes, @Milancen123, @martinfrancois, @lubieowoce, @gaojude, @lachlanjc, @liketiger, @styfle, @aaronbrown-vercel, @Samii2383, @FelipeChicaiza, @kevva, @m1abdullahh, @F7b5, @Anshuman71, @RobertFent, @poteto, @chloe-yan, @sireesha-siri, @brian-lou, @joao4xz, @stefanprobst, @samselikoff, @acdlite, @gwkline, @bgub, @brock-statsig, @karlhorky, @feedthejim, @CarloQuick, @greguintow, @hallucinogenizer, @sebmarkbage, @delbaoliveira, @makandrr, @seeplusplus, @serhalp
Only a subset of merged work was shown here, so this digest focuses on the most visible changes from the included release and PR data.