Check out our Next v16.1 Blog Post to learn more about this release.
Core Changes
- fix: Rspack throw error when using ForceCompleteRuntimePlugin: #85221
- fix: build CLI output not displaying Proxy (Middleware) when nodejs runtime: #85403
- fix: staleTimes.static should consistently enforce a 30s minimum: #85479
- [turbopack] fix build of empty entries of pages: #84873
- Cache the head separately from the route tree: #84724
- Allow inspecting dev server on default port with
next dev --inspect: #85037
- Avoid proxying React modules through workUnitStore: #85486
- fix: redirect should always return updated router state: #85533
- Upgrade React from
b4455a6e-20251027 to 4f931700-20251029: #85518
- [turbopack] Move generation of
cacheLife types out of the webpack plugin and into the dev bundler directly: #85539
- Ensure user-space stack frame for
'use cache' in page/layout component: #85519
- Update parallel routes in build-complete: #85546
- fully remove clientSegmentCache flag: #85541
- [turbopack] Support relative paths in turbopack source maps.: #85146
- Release unnecessary memory on hydration finish: #84967
- Preserve interception markers in parameter types: #85526
- move segment cache entries to top level segment-cache dir: #85542
- Upgrade React from
4f931700-20251029 to 561ee24d-20251101: #85670
- [devtools] Remove title from preferences: #85698
- Update font data: #85708
- Don't invalidate hot reloader excessively during dev server boot: #85732
- [codemod] fix: next-lint-to-eslint-cli did not handle
'next' plugin: #85749
- Upgrade React from
561ee24d-20251101 to 67f7d47a-20251103: #85762
- Tracing: Fix memory leak in span map: #85529
- Fix documentation typo in refresh function: #85696
- fix: eslint-config-next types was exporting to dist/src: #85768
- Upgrade React from
67f7d47a-20251103 to f646e8ff-20251104: #85772
- remove unused RSC payload property: #85746
- [runtime prefetching]: fix runtime prefetching when deployed: #85595
- Turbopack: next build --analyze: #85197
- Build: Log amount of workers during static generation: #85706
- Upgrade React from
f646e8ff-20251104 to dd048c3b-20251105: #85819
- Sync devFallbackParams when generateStaticParams change: #85741
- chore: upgrade rspack 1.6.0: #84210
- [mcp] get_routes mcp tool: #85773
- Split each path param into a separate cache key : #85758
- [turbopack] change server source maps in production to use relative paths: #85576
- fix: skip collecting metadata for app-error in webpack: #85892
- fix: support root span attributes with a custom server: #85521
- fix isDynamicRSC condition when deployed: #85919
- [turbopack] Make it possible to synchronously access native bindings: #85787
- Upgrade React from
dd048c3b-20251105 to fa50caf5-20251107: #85906
- Fix telemetry event loss on build failures and server shutdown: #85867
- Remove one stack frame from
'use cache' call stacks: #85966
- Upgrade React from
fa50caf5-20251107 to 52684925-20251110: #85980
- Deployment adapter: fix metadata for "/" route: #85820
- Enable React's default Transition indicator behind a flag: #86000
- update routes-manifest to include whether app has pages routes: #86051
- Fix 404 responses for interception routes with missing children slots: #85779
- Build: Share StaticWorker between static check and static generation: #85860
- [devtool] highlight all link in error message: #86084
- fix(nodejs-middleware): await for body cloning to be properly finalized: #85418
- Add build-time validation to detect ambiguous app routes: #85834
- Don't use inspector frontend URLs from other processes: #86082
- Upgrade React from
52684925-20251110 to 93fc5740-20251113: #86103
- [next-upgrade] Force install of dev dependencies: #86119
- Fix telemetry event race condition in webpack worker for @vercel/og detection: #86145
- Turbopack: Add bundle analyzer UI to next build --experimental-analyze: #85788
- Upgrade React from
93fc5740-20251113 to fb2177c1-20251114: #86155
- fix: cacheMaxMemorySize should not disable dev HMR cache: #86164
- Fix streaming server actions: #86148
- Allow attaching a debugger when
next dev is already running: #86083
- Introduce
next analyze: a built-in bundle analyzer for Turbopack: #85915
- Turbopack: add
experimental.turbopackClient/ServerSideNestedAsyncChunking: #85827
- next analyze: annotate polyfill modules in UI: #86062
- Stop adding additional padding to Next.js logs: #86139
- [next-upgrade] Add
next upgrade: #86120
- Fix prerendering of interception routes with generateStaticParams: #85835
- [Segment Cache] Re-implement refresh reducer: #84426
- Upgrade React from
fb2177c1-20251114 to 0972e239-20251118: #86263
next analyze: Make ipv6 server links valid and normalize localhost: #86219
- fix: prevent fetch abort errors propagating to user error boundaries: #86277
- chore(turbopack-node): remove some outdated codes: #86111
- [devtools] Ensure Chrome DevTools workspace can connect with proxy rewrites: #86289
- Fix log log alignment in spinners: #86298
- fix: Rename proxy.js to middleware.js in NFT file: #86214
- Turbopack: allow trace level tracing: #86255
- Allow SSR to finish microtasky work before flushing: #86311
- Turbopack: fix passing project options from napi: #86256
- [Cache Components] Atomic setTimeouts: #86093
- Turbopack: add experimental.turbopackInputSourceMaps and respect serverSourceMaps: #86340
- [Cache Components] Discriminate static shell validation errors by type: #85747
- Turbopack: add NEXT_TURBOPACK_WRITE_ROUTES_HASHES_MANIFEST to write hashes into manifest: #86257
- Add reasons for some server-external-packages: #86254
- Send dynamic validation errors to browser via WebSocket: #85818
- Delete un-used prefetch outputs with PPR: #86100
- Revert "Turbopack: add bundle-analyzer to versioning and add dependen…: #86394
- Turbopack: add bundle-analyzer to versioning and add dependency: #86355
- fix issue - #86365: #86366
- Turbopack: fix import chain by determining depth locally per route: #86350
- Use JSONC for default server-external-packages: #86252
- add debug logs to onSegmentPrerenderError: #86358
- Skip request if "full" prefetch is already pending: #86405
- fix: Rename proxy.js to middleware.js in NFT file (#86214)
- fix: prevent fetch abort errors propagating to user error boundaries (#86277)
- Turbopack: fix passing project options from napi (#86256)
- Eslint: Improve Google Tag manager third parties message: #51903
- [ts-plugin] keep showing the types in the function body: #86273
- [turbopack] Enable the filesystem cache for dev in canary builds: #85940
- docs: fix typos in packages: #82508
- Turbopack: Expose an environment variable for exposing the
detail field of issues: #86518
- Turbopack: inner graph tree shaking: #85973
- [next-upgrade] Fall back to
npx if yarn dlx is not available: #86384
- Update font data: #86521
- Convert any export from a
'use cache' module to a cache function: #86014
- fix(nodejs-middleware): await for body cloning to be properly finalized (#85418)
- Fix stale dev types causing build failure after route deletion: #86489
- bump the browserslist version to silence a warning in CI (#86625)
- add bundle analyzer as dev dependency to next: #86497
- Remove obsolete
setReferenceManifestsSingleton call: #86574
- Add flag to show ignore listed frames: #86285
- Add alinea to server-external-packages.json: #55006
- Fix error logging for
'use cache' runtime errors in production: #86500
- Upgrade React from
8ac5f4eb-20251119 to fd524fe0-20251121: #86473
- Add "@zenstackhq/runtime" to server-external-packages.json: #54829
- [Cache Components] Ensure cache misses always cause a restart in dev: #86583
- bump the browserslist version to silence a warning in CI: #86625
- Turbopack: import to
char not replaced: #86573
- Revert "add bundle analyzer as dev dependency to next (#86497)": #86672
- Handle cross-page client reference contamination in development: #86591
- Match behavior of baseline-browser-mapping with caniuse-lite: #86653
- Turbopack: don't generateBuildId in dev: #86581
- [devtool] unify the bundler field: #86514
- Turbopack: normalize distDir separators: #86697
- Cover org package external in externals-transitive test: #86691
- [turbopack] Enable filesystem cache by default for development: #85975
- Log generate params duration in dev: #86726
- [CC] Fix hanging dynamic promise when abandoning render: #86690
- Convert Windows paths as well when reading sourcemap: #86723
- Deterministic functions-config-manifest.json: #86736
- Abstract deployment id access into module: #86727
- Deterministically order pages in the
MappedPages structure: #86744
- [turbopack] move edge entry wrapper to build template: #86699
- Properly type ComponentMod: #86765
- Properly type edge handler fn: #86766
- Remove unused Server.responseCache: #86768
- [Cache Components] Fast setImmediate: #86018
- [devtool] make the draggable content selective: #86816
- Create server module map proxy only once: #86750
- fix(next/image): add
?dpl query string for local images (without static import): #86485
- fix(next/image): handle
?dpl for src without protocol: #86836
- Upgrade React from
7dc903cd-20251203 to 66ae640b-20251204: #86843
- Upgrade React from
66ae640b-20251204 to 378973b3-20251205: #86852
- Turbopack: remove pages router double template: #86842
- Introduce NextConfigRuntime: #86812
- Generate required-server-files before prerendering: #86830
- Update react version in cna templates (#86950)
- Include nextConfig in edge runtime via separate manifest: #86769
- Fix required-server-files: #86875
- Add pino-related packages to server-external-packages: #86884
- Fix validateTurboNextConfig running for next start: #86886
- Add experimental.runtimeServerDeploymentId: #86865
- [turbopack] Mark packages as side effect free when local analysis determines that they are.: #86398
- Fix: Missing null check in LRU cleanup: #87124
- improve segment cache lru typesafety: #87129
- [Segment Cache] Detect third-party redirect + static export w/ HEAD request: #85910
- Fix: External redirect swallowed by Next.js: #87121
- Fix error propagation and teardown in Server Action request decoding: #87193
- Fix interception routes with trailing slash configuration: #86787
- [ci] Stop building when creating release: #87178
- fix: otel error spans from streamed responses: #86955
- Refactor: Unify history traversal with other nav types: #87128
- Create initial tree using same function as navigations: #87147
- Re-implement hmr-refresh in terms of refresh: #87135
- Delete old navigation response handling implementation: #87149
- Reflect runtime type of
resHeaders in static types: #87145
- [turbopack] Flag
turbopackInferModuleSideEffects so it is only enabled in canary builds: #87215
- [turbopack] update warning message in the bundle analyzer: #87255
- chore: update rspack 1.6.5: #86853
- Update font data: #87259
- bundle-analyzer: make running the web server default: #87258
- bundle analyzer: remove custom output option: #87267
- Ensure constructor for
useSearchParams can be imported for instanceof checks: #87269
- Upgrade React from
b45bb335-20251211 to f93b9fd4-20251217: #87281
- feat: use Rspack persistent cache by default: #81399
- Move next-env.d.ts to dist dir: #86752
- Revert "Move next-env.d.ts to dist dir": #87311
Example Changes
- Chore: Update with-supabase example to Next.js 16: #86105
- docs: add example for enabling both AVIF and WebP image formats for better image optimization: #86191
- examples: fix typos: #82506
- chore(examples): remove
with-windicss example: #81846
- examples: fix typos in cms-agilitycms: #82504
- Turbopack: Improve the description on InvalidLoaderRuleConditionIssue: #87008
Misc Changes
- chore: Add
opt-level = s for not frequently used crates: #85426
- [test] Deflake cache-components-allow-otel-spans: #85466
- [test] Move remaining
experimental.cacheLife: #85467
- Turbopack: chore: Remove mopa dependency in turbo-tasks (2nd attempt): #85286
- Update Proxy docs: #85439
- [CNA] Do not prompt for Turbopack: #85404
- Clean up new release process: #85458
- Update E2E tests workflow: #85485
- Update E2E deploy tests manifest: #85483
- docs: example are incorrect async function exports only: #85453
- [test] Handle CLI assertions where no "Compiling..." log is present: #85499
- [test] Speed up refresh test: #85505
- [test] Add test cases for dynamic caches without suspense boundaries: #85500
- docs: Routes are wrapped w/ Activity in Cache Components: #85309
- docs: GET handler behavior under cache components: #85389
- [test] Avoid needless start/stop from using
createSandbox: #85507
- [test] Use
--debug-build-paths instead of NEXT_PRIVATE_APP_PATHS: #85504
- docs: revalidateTag requires second argument:
Credits
Huge thanks to @kdy1, @eps1lon, @SyMind, @bgw, @swarnava, @devjiwonchoi, @ztanner, @ijjk, @huozhi, @icyJoseph, @acdlite, @unstubbable, @gnoff, @gusfune, @vercel-release-bot, @lukesandberg, @sokra, @hayes, @shuding, @wyattjoh, @marjan-ahmed, @timneutkens, @ajstrongdev, @zigang93, @mischnic, @Nayeem-XTREME, @hamirmahal, @eli0shin, @tessamero, @gaojude, @jamesdaniels, @georgesfarah, @timeyoutakeit, @sequencerr, @Strernd, @lucasadrianof, @wbinnssmith, @hamidreza-nateghi, @jokokoloko, @dijonmusters, @H01001000, @xusd320, @lubieowoce, @KaziMahbuburRahman, @zhiyanzhaijie, @feedthejim, @that-one-arab, @JamBalaya56562, @shrink, @florianliebig, @allenzhou101, @benmerckx, @ymc9, @Marukome0743, @pyrytakala, @danpeleg4, @gaearon, @styfle, @jhuleatt, @muhammadsyaddad, @roelvan, and @SukkaW for helping!