Releases: vercel/next.js
v16.2.1
Note
This release is backporting bug fixes. It does not include all pending features/changes on canary.
Core Changes
- docs: post release amends (#91715)
- docs: fix broken Activity Patterns demo link in preserving UI state guide (#91698)
- Fix adapter outputs for dynamic metadata routes (#91680)
- Turbopack: fix webpack loader runner layer (#91727)
- Fix server actions in standalone mode with
cacheComponents(#91711) - turbo-persistence: remove Unmergeable mmap advice (#91713)
- Fix layout segment optimization: move app-page imports to server-utility transition (#91701)
- Turbopack: lazy require metadata and handle TLA (#91705)
- [turbopack] Respect
{eval:true}in worker_threads constructors (#91666)
Credits
Huge thanks to @icyJoseph, @abhishekmardiya, @ijjk, @mischnic, @unstubbable, @sokra, and @lukesandberg for helping!
v16.2.1-canary.4
Core Changes
- Fix adapter outputs for dynamic metadata routes: #91680
Misc Changes
- Turbopack: fix webpack loader runner layer: #91727
- [turbopack] Remove incorrect debug_assert in try_read_task_cell: #91699
- Add module count field to module graph tracing spans: #91697
- turbopack-cli: add --persistent-caching flag for filesystem-backed cache: #91657
- Turbopack: pull in updated vercel/nft tests: #91651
- Update Rspack development test manifest: #91695
- [test] Unflake
use-node-streams-env-precedencetest: #91733 - Update Rspack production test manifest: #91694
- [turbopack] Improve regressed build speed on cross-compiled MUSL: #91477
Credits
Huge thanks to @ijjk, @mischnic, @sokra, @vercel-release-bot, @unstubbable, and @mmastrac for helping!
v16.2.1-canary.3
Core Changes
- Fix layout segment optimization: move app-page imports to server-utility transition: #91701
- Fix server actions in standalone mode with
cacheComponents: #91711 - Turbopack: lazy require metadata and handle TLA: #91705
Misc Changes
- [turbopack] Optimize compaction cpu usage: #91468
- [test] Unflake rendering indicator test & skip building indicator tests: #91650
- [test] Fix
edge-async-local-storagedeploy test timeout & race condition: #91643 - docs: fix broken Activity Patterns demo link in preserving UI state guide: #91698
- turbo-persistence: remove Unmergeable mmap advice: #91713
- turbopack: move "compact database" tracing span to backend layer: #91693
- docs: post release amends: #91715
Credits
Huge thanks to @lukesandberg, @unstubbable, @abhishekmardiya, @sokra, @icyJoseph, and @mischnic for helping!
v16.2.1-canary.2
Core Changes
- Turbopack: enable server HMR for app route handlers: #91466
- Skip loadBindings() Lightning CSS check during next start: #91538
- refactor: extract build infra and alias changes: #90422
- feat(node-streams): add config flag, define-env, and env precedence test: #90427
- Rename /_next/webpack-hmr to /_next/hmr: #91415
- ci: add node-stream test coverage workflow: #89861
- Add per-slot error attribution for instant validation using slot markers and config depth preference: #91610
- Handle encoded params further: #91627
- Fix missing route in otel spans without base-server: #91665
Misc Changes
- turbo-tasks-backend: batch find_and_schedule_dirty using for_each_task_meta: #91497
- Restructure pr-status-triage skill: merge command into skill files: #91514
- [turbopack] Use bail! instead of panic! for duplicate module ident error: #91636
- turbo-tasks-backend: batch schedule dirty tasks in aggregation_update: #91461
- Turbopack: Add importModule() support to webpack loaders: #89630
- turbo-persistence: fix mmap page alignment and improve error context in MetaFile::open_internal: #91640
- turbopack-css: demote recoverable CSS parse warnings to Warning severity: #91524
- [test] Unflake "infinite streaming fetch" test: #91645
- [test] Unflake
deterministic build - changing deployment idtest: #91646 - Skip CI for agent/editor config directory changes: #91622
- Update Rspack production test manifest: #91635
- [test] Increase
retrytimeouts for two flakyapp-actiontests: #91647 - Revert "ci: add node-stream test coverage workflow (#89861)"
- [test] Fix flaky
url-hashtests: #91649 - Add instant validation tests for parallel slot config attribution: #91656
- [turbopack] Respect
{eval:true}in worker_threads constructors: #91666
Credits
Huge thanks to @wbinnssmith, @sokra, @unstubbable, @devjiwonchoi, @timneutkens, @feedthejim, @vercel-release-bot, @gnoff, @ijjk, and @lukesandberg for helping!
v15.5.14
v16.2.1-canary.1
Core Changes
- Fix(pages-router): restore Content-Length and ETag for /_next/data/ JSON responses: #90304
Misc Changes
Credits
Huge thanks to @lllomh, @devjiwonchoi, and @lukesandberg for helping!
v16.2.1-canary.0
Core Changes
- Update vendored lodash to 4.17.23 to fix CVE-2025-13465: #91558
- Fix invalid HTML response for route-level RSC requests in deployment adapter: #91541
- Normalize encoded dynamic placeholders in app routes: #91603
Credits
Huge thanks to @denesbeck, @ztanner, and @ijjk for helping!
v16.2.0
Tip
Check out our Next v16.2 Blog Post to learn more about this release.
Core Changes
- Upgrade React from
f93b9fd4-20251217to65eec428-20251218: #87323 - Turbopack: Create junction points instead of symlinks on Windows: #87606
- Turbopack: Symlink handling follow-up: #87637
- Add experimental routing package for resolving adapter routes: #86404
- Ensure outputs are correct with cache components in deployment adapters: #87018
- Move off of deprecated url.parse: #87257
- [strict-route-types] Add
experimental.strictRouteTypesconfig: #87378 - misc: fix type check log for CI envs: #87838
- fix: revalidateTag with profile should not trigger client cache invalidation: #88069
- chore: warn when running tests against stale build: #88001
- Redesign default error pages with cleaner, more user-friendly UI: #87988
- dx: avoid next-env.d.ts change in dev: #88103
- prevent browser cache from using stale RSC responses from previous builds: #86554
- [strict-route-types] Typecheck App Router page props: #87386
- [strict-route-types] Enforce common React Component return types in App Router: #87389
- [strict-route-types] Switch to
satisfieswhen validating page and route modules: #87398 - [strict-route-types] Don't reject
numberinconfig.api.bodyParser.sizeLimitwhen validating route: #87633 - Revert "dx: avoid next-env.d.ts change in dev": #88153
- [strict-route-types] Typecheck pages router routes in absence of App Router: #87628
- [strict-route-types] Ensure cache profiles and routes are type-checked even if .next is excluded: #87768
- add compilation error for taint when not enabled: #88173
- feat(next/image)!: add
images.maximumResponseBodyconfig: #88183 - Add maximum size limit for postponed body parsing: #88175
- metadata: use fixed segment in dynamic routes with static metadata files: #88113
- feat: add --experimental-cpu-prof flag for dev, build, and start: #87946
- Add experimental option to use no-cache instead of no-store in dev: #88182
- fix overlay frames cannot be opened sometimes: #88210
- Handle pnpm-workspace.yaml while searching for monorepo root: #74818
- Add more debug logs to
'use cache'wrapper: #88219 - Omit unused arguments from
'use cache'function calls: #86920 - Only log
pending revalidates...debug log if applicable: #88221 - fix(next/image): bump sharp@0.34.5: #88238
- Disallow javascript urls in router methods and redirects: #88185
- Fix relative same host redirects in node middleware: #88253
- Remove loadConfig from main development process, pass value from child process: #88230
- Update deploy adapters outputs and handler interfaces for node and edge: #88247
- Move Ready in time before handler initialization: #88235
- next/image: support custom cache handlers: #88248
- feat: add Claude Code plugin marketplace with Cache Components skill: #87993
- refactor: consolidate PPR into cacheComponents architecture: #88243
- Turbopack: include fewer traced files for standalone: #88322
- feat(turbopack): add resolve plugin condition variant of Always and Never: #88190
- perf: use length = 0 to clear the logging array: #88244
- Time logs: Show full millisecond instead of 1 decimal: #88313
- [turbopack] Enable inferring module side effects by default: #87216
- Track search string as part of "refresh state": #87203
- Pass RouteTree into navigation function: #87256
- Read from segment cache unknown routes: #87293
- Pass loading boundary as part of RSC data: #87825
- Revert "refactor: consolidate PPR into cacheComponents architecture (#88243)": #88421
- fix: support TypeScript
noUncheckedSideEffectImportsfor CSS imports: #88199 - Don't import typescript at runtime: #88321
- fix: use RDC for server action requests: #88129
- Warn when overriding Cache-Control header on
/_next/routes: #88353 - [prebuilt-skew-protection] feat: adding in automatic deploymentId: #88012
- Revert "[prebuilt-skew-protection] feat: adding in automatic deploymentId": #88449
- Turbopack: Update reqwest, remove experimental system TLS feature: #88290
- Revert "prevent browser cache from using stale RSC responses from preβ¦: #88457
- Turbopack: retain loader tree order for metadata: #88487
- Turbopack: more dead code: #88505
- fix(build): prevent route handler manifests from inheriting unrelated client components: #88419
- Upgrade React from
65eec428-20251218to3e1abcc8-20260113: #88530 - Better typesafety for
interopDefault: #88486 - keep next-env.d.s unchanged between dev and build: #88428
- Remove sibling caches from CacheNode tree: #87991
- Upgrade React from
3e1abcc8-20260113to4a3d993e-20260114: #88547 - Finish deleting Mutable from router implementation: #88046
- fetch(next/image): reduce maximumResponseBody from 300MB to 50MB: #88588
- [CC] Fix dev validation error from server action bound args: #88600
- Fix incorrect 'Ready in' time for next start: #88589
- feat: server action logging: #88277
- Log browser error and warnings in terminal: #88352
- Upgrade React from
4a3d993e-20260114tobef88f7c-20260116: #88649 - fix: make RedirectType constant properties literal types: #88653
- Turbopack: add support for matching loaders on resource queries: #88644
- fix: capture promisified setImmediate separately: #88346
- fix: setImmediate[util.promisify.custom] access fails in edge runtime: #88685
- Fix
--debug-build-pathsbracket escaping for glob patterns: #88660 - Add negation pattern support to
--debug-build-paths: #88654 - Only filter next config if experimental flag is enabled: #88733
- [Devtool Indicator] Fix cross alignment: #88664
- Turbopack: don't use build id for pages router client-side manifests: #88641
- Allow inspecting server with
next start --inspect: #88744 - Turbopack: Add
--debug-build-pathssupport to filter routes: #88655 - Upgrade React from
bef88f7c-20260116to41b3e9a6-20260119: #88756 - Use rewritten pathname for implicit cache tags: #88732
- Upgrade React from
41b3e9a6-20260119tod2908752-20260119: #88774 - Add experimental_gesturePush to App Router: #88776
- Rename
rewroteURLtorewrittenPathnamein request metadata: #88751 - Simplify
getImplicitTagsto accept pathname instead of url object: #88753 - Add
NEXT_DEPLOYMENT_IDglobal: #86738 - Turbopack: remove deployment id suffix from client reference manifest chunks: #88741
- Inject
<html data-dpl-id>and don't inline it into JS anymore: #88761 - [metadata] match the Metadata and ResolvedMetadata type: #88739
- Reuse bfcache data during Full prefetches: #88606
- Embed static sibling info in route tree: #88692
- Fix
revalidatePathwith params and trailing slash when deployed: #88623 - fix: preserve cache behavior for PPR fallback shells with root params: #88556
- Upgrade React from
d2908752-20260119tob546603b-20260121: #88860 - stabilize browser log forward options: #88857
- [devtools] Wrap long file names of stack frames in the error overlay: #88886
- [devtools] Fix notch coloring of error overlay in forced colors mode: #88892
- Remove
deploymentIdfrom App RouterRenderOptsPartial: #88866 - feat: implement LRU cache with invocation ID scoping for minimal mode response cache: #88509
- [prebuilt-skew-protection] feat: adding in automatic deploymentId: #88496
- [devtool] Add hydration diff indicator for diff lines: #88919
- Revert "[prebuilt-skew-protection] feat: adding in automatic deploymentId": #88942
- [turbopack] add task type infromation to the print_cache_item_size feature: #88925
- Upgrade React from
b546603b-20260121to24d8716e-20260123: #88963 - Turbopack: add
?dpl=to all asset urls returned by Turbopack: #88828 - feat(next-codemod): add agents-md command for AI coding agents: #88961
- Update font data: #88975
- Improve agents-md prompt to force doc retrieval: #88997
- [Reapply] Add
useEffectEventto disallowed React APIs in Server Components: #88985 - Apply fixes for onBuildComplete and route module: #88831
- Rename
renderOpts.nextExporttoisBuildTimePrerendering: #88951 - docs: fix typos in
README.mds: #89022 - refactor: consume global-error from loader tree: #88437
- Fix chunk loading when using
__turbopack_load_by_url__with query: #88899 - [mcp] change the mcp endpoint response to JSON: #88911
- Reapply "[turbopack] Add bundling support for worker_threads" (#88725): #88967
- fix: ensure LRU cache items have minimum size of 1 to prevent unbounded growth: #89040
- Upgrade React from
24d8716e-20260123to8c34556c-20260126: #89066 - Use null-prototype objects in server actions manifests: #89069
- Re-enable types-and-precompiled: #89070
- Apply segment changes to adapters outputs: #89072
- Improve no response route handler error: #89036
- Limit number of server action arguments to 1000: #89068
- [prebuilt-skew-protection] feat: adding in automatic deploymentId: #88958
- Decouple route stale time from segment-level data: #88834
- Decouple route and segment cache lifecycles: #88989
- [ci] Silence
baseline-browser-mappingwarnings: #89175 - [Cache Components] Prevent streaming fetch calls from hanging in dev: #89171
- React types update: #89110
- [nextjs] feat: removing length requirement: #89173
- add GPTBot to matcher for known bots: #89188
- Ensure
.mdlicenses are included in vendored packages: #89201 - Switch development log item format as JSON: #89168
- IsolatedDevBuild flag removal: #89167
- fix: coerce HEAD to GET for internal images: #84180
- Upgrade React from
10680271-20260126to230772f9-20260128: #89250 - Upgrade
tarused to extract SWC binary : #89158 - Sort prerender manifest routes: #89246
- Track vary params for segments without server-side param access: #88998
- Optimistic routing: client-side route prediction: #88965
- Keep pages/404.js to be able to dynamically render it anyway: #89263
- fix: fully static pages should e...
v16.2.0-canary.104
Core Changes
- Turbopack: Merge release-with-assertions-no-lto profile into release-with-assertions: #91530
- improve allowedDevOrigins error: #91521
- Add group depth tracking to instant validation boundary discovery: #91208
Misc Changes
- [turbopack] Share scratch buffer across shards using thread local: #90167
- Turbopack: Use
debug = "line-tables-only"for dev builds: #91539 - SRI turbopack documentation: #90477
Credits
Huge thanks to @lukesandberg, @bgw, @ztanner, @gnoff, and @richardjzhang for helping!
v16.2.0-canary.103
Core Changes
- Error when accessing undefined root params in
generateStaticParams: #91519 - Buffer prefetch response before passing to Flight client: #91487
- [Segment Cache] Always upsert on prefetch completion: #91488
- Track vary params during runtime prefetches: #89297
- [react-sync] Allow locking in manual sync: #91509
- Remove devCacheControlNoCache experimental option (hard-code no-cache): #91503
- fix allowedDevOrigins for no-cors requests: #91506
- Remove webpack stats generation from Turbopack: #91515
- Upgrade React from
c80a0750-20260312to3f0b9e61-20260317: #91522 - Move adapterPath from experimental to stable top-level config: #91535
- block disallowed dev origins by default: #91507
Misc Changes
- perf(turbopack-node): zero-copy Buffer transfer from node to rust: #91376
- docs(turbopack-core): Copy "layers" documentation from mdbook to rustdoc: #91350
- Turbopack: correctly apply effects for issue snapshots: #91511
- Turbopack: treat unknown CSS selectors as warnings: #91513
- docs(turbopack): Migrate chunking docs from mdbook, with proof-reading and minor updates from claude: #91472
- Skip catch-error-react-compiler test to unblock CI: #91528
- [turbopack] update qfilter to 0.3.0-alpha: #91467
- Unflake two
"use cache"tests: #91529 - docs(turbopack): Remove old
architecture.mdfile from turbopack crate: #91473
Credits
Huge thanks to @xusd320, @bgw, @mischnic, @unstubbable, @acdlite, @eps1lon, @devjiwonchoi, @lukesandberg, @sokra, @ztanner, and @timneutkens for helping!