vercel/next.js v15.5.6 → v16.0.0

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 --webpack escape 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 cacheLife profiles, a visible status indicator in the CLI and DevTools, support for headers() in runtime prefetches, cache warmup and bypass handling improvements, and new cache APIs including refresh and updateTag plus a new revalidateTag signature (#85050, #85047, #85048, #83838, #85014, #85082, #84666, #83822).

  • The typedRoutes system now covers more navigation surfaces. It adds type-safe redirect() and permanentRedirect() targets when config.typedRoutes is 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, metadataBase can 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 _error output 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.routeType on instrumentation.onRequestError changes from middleware to proxy (#84764, #84119, #84127, #84824, #85006).

  • ESLint moves to Flat Config by default in both @next/eslint-plugin-next and eslint-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-loader is 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_ppr route-level config, unstable_rootParams, and config.turbopack.moduleIds, which moves to config.experimental.turbopackModuleIds (#84109, #84872, #84871, #84373, #84230).

  • Image defaults and validation changed in a few important ways. images.minimumCacheTTL now defaults to 4 hours instead of 1 minute, images.localPatterns is required when a local image src includes a query string, images.imageSizes drops the default 16, and images.domains is now deprecated in favor of the newer configuration model; new dangerouslyAllowLocalIP and maximumRedirects options 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 build has 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 missing next/link types 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 runtimeConfig usage and deprecates next/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-build and 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.

Only the most active 50 of 90 merged PRs were included. See the full compare view.