This release range is a backport-heavy maintenance train for Next.js 16.2, with a security release in the middle and a steady stream of Turbopack, HMR, and runtime fixes around it. Most user-visible changes are about stabilizing dev/build behavior, plus a few config and CLI improvements.
What's new
create-next-appnow skips the interactive follow-up prompts when you already pass CLI flags like--typescript,--tailwind,--eslint,--app, and--src-dir. That makes non-interactive scaffolding work better for scripted and agent-driven setups (#91840).experimental.serverFastRefreshcan now be set innext.config.js, so plugins and apps can opt out of server-side Fast Refresh without changing start scripts. A hidden positive--server-fast-refreshflag was also added alongside--no-server-fast-refresh, with config taking effect at startup and CLI precedence when both are set (#91968).- Turbopack now supports server HMR for app route handlers, not just app pages. It also excludes metadata routes from server HMR, so route handlers like
robots.ts,sitemap.ts,manifest.ts, andicon.tsxno longer interfere with page updates (#91466, #92034). experimental.swcEnvOptionsexposes SWC preset-env options such asmode,coreJs,include,exclude,skip,shippedProposals,forceAllTransforms,debug, andloose. That gives client-side compilation a built-in path for polyfill injection and other preset-env behavior that previously required Babel workarounds (#92272).- Turbopack’s standalone CLI gained
--persistent-cachingand--cache-dirflags forturbopack devandturbopack build, so it can use the filesystem-backed cache without going throughnext(#91657). NEXT_HASH_SALTandexperimental.outputHashSaltlet you salt content-addressed chunk and asset filenames. When both are set, the salts are concatenated, so you can combine a per-project config value with a per-deployment build-time value (#91871).experimental.turbopackLocalPostcssConfiglets Turbopack resolvepostcss.config.jsfrom the CSS file’s directory first, then fall back to the project root. The same change also avoids filename collisions for per-directory PostCSS configs by deriving evaluate-pool asset names from the full module ident (#91338).
Breaking changes
- Turbopack’s hash encoding switched from base40 to base38, removing
~and.from generated filenames. This was done to avoid 403s from hardened Nginx and WAF rules, but anything that depends on the old character set will need to account for the new filenames (#91832). - The Safari cache-busting workaround in the Pages Router is now scoped to CSS and font assets only. It no longer appends
?ts=to script URLs, which avoids leaking that query string into asset resolution and causingnext/imagevalidation errors (#92580). - Immutable static assets now use
_next/static/immutable/...whenconfig.experimental.supportsImmutableAssetsis enabled. The old immutable token behavior was replaced by a path-prefix approach, so middleware or deployment setups that matched_next/staticmay need to account for the new path shape (#92164).
Fixes
- Restored server HMR when metadata routes and app pages load in the same process. Before this, a metadata route could overwrite the page runtime’s HMR handler and make updates stop applying to the page (#92273).
- Fixed a regression where Turbopack treated inline
new Worker(..., { eval: true })code as a module path. It now skips creating a worker reference foreval: trueworkers (#91666). - Fixed lazy metadata loading in Turbopack so metadata imports are required lazily and TLA modules are handled correctly (#91705).
- Fixed standalone server actions when
cacheComponentsis enabled (#91711). - Fixed adapter outputs for dynamic metadata routes (#91680).
- Fixed CSS HMR on Safari (#92174).
- Fixed stale ISR revalidation errors on app pages so they are reported through
onRequestError(#92282). - Fixed a recomputation loop in turbo-tasks when a task errors during recomputation (#92725).
- Fixed duplicate task restores in turbo-tasks so the same task is not loaded from backing storage more than once at the same time (#92389).
- Fixed filesystem watcher config so
follow_symlinks(false)is actually applied (#92631). - Fixed Turbopack’s
webpack loader runnerlayer so usingturbopack.rules.loaderandturbopackLoadertogether no longer triggers dependency-tracking loops (#91727). - Fixed
next.config.jsdefines to support boolean and number primitives (#92731). - Fixed build failures for Google Fonts on Windows ARM64 by bumping
reqwest(#92713). - Fixed the
nextresolution error message in Turbopack so it includes the filesystem root used for resolution (#91394). - Fixed
manifest.tsHMR breakage in Next.js 16.2 (#92273 through #92273). - Fixed
export typein"use server"files from being registered as Server Actions (#92494). - Fixed
import.meta.resolve()cache handler paths sofile://URLs are converted correctly instead of breaking ESM cache handlers (#90370). - Fixed
notFound(),forbidden(), andunauthorized()prerender recovery so HTTP access fallbacks preserve the correct boundary instead of falling back to a generic error shell (#92231). - Fixed build output deduplication so identical assets are merged and conflicting assets are reported instead of silently overwriting each other (#92292).
Other notable changes
tokiowas bumped from 1.43.0 to 1.47.3 (#90945).- SWC dependencies were upgraded to newer major versions, including
swc_core58 andswc_sourcemap10 (#91532). - Turbopack now uses
wasmtimefor SWC plugin WASM execution instead ofwasmer(#91533). - The HMR WebSocket endpoint was renamed from
/_next/webpack-hmrto/_next/hmr(#91415). - CPU profiles now write to
.next-profilesinstead of.next/cpu-profiles(#92078). - Various Turbopack persistence, tracing, and error-message refinements landed across the range (#92191, #92427, #92814, #92828).
Contributors
@styfle @lllomh @icyJoseph @abhishekmardiya @ijjk @mischnic @unstubbable @sokra @lukesandberg @nextjs-bot @gaojude @wbinnssmith @bgw @Badbird5907 @andrewimm @banchichen @eps1lon @timneutkens @VedantMadane @sleitor @devjiwonchoi @fireairforce @mmastrac @ztanner