Core Changes
- fix: decrypt bound args before generating a cache key: #72463
- Fix the path to the next/experimental/testing/server export: #72527
- Expand
server-source-maps scenarios to cover Edge runtime: #72288
- Ensure logged errors in Edge runtime include the stack: #72394
- fix: added cache control headers for static app routes: #72521
- capture console issues as console errors: #72468
- Add expireTag and expirePath APIs: #72485
- fix: try/catch access to localStorage within __NEXT_APP_ISR_INDICATOR useEffect: #72362
- Move client build ID to a global variable: #72592
- refactor(turbopack): Remove
swc_css: #72602
- Bypass source map dev middleware for client chunks: #72581
- chore: remove
rc from URL: #72599
- improve
no-img-element lint error message: #72410
- Combine bound
"use cache" closure args into a single parameter: #72587
- [Turbopack] add BackendOptions and allow to disable dependencies, children and storage: #72426
- Omit unused args when calling
"use cache" functions: #72506
- Add experimental
clientSegmentCache flag: #72626
- Add
compiler.define option: #71802
- Fix static indicator with dynamicIO: #72631
- Allow usage of Node.js prereleases: #72635
- improved network url in (dev) cli: #72634
- chore: update
getting-started/react-essentials path: #72250
- Fix static indicator for pure IO case: #72639
- Bump the monorepo packages TypeScript to
5.6.3: #72625
- Bump
@capsizecss/metrics to 3.4.0 for Geist Google Font: #72746
- refactor: remove unused asNotFound property: #72585
- Remove unused
enabled config from server actions transforms: #72755
- Ensure Next.js is ignore-listed when used as external: #72498
- Bump
eslint-plugin-react to 7.37.0: #72759
- upgrade amphtml-validator to 1.0.38: #72645
- fix multi-level redirect in server actions: #72770
- refactor: rename error boundary not-found to http-error-fallback: #72586
- Upgrade React from
5c56b873-20241107 to 7ac8e612-20241113: #72768
- Re-use randomly selected dev server port for automatic restarts: #72771
- Emit build error when
"use cache" is used without dynamicIO enabled: #72781
- fix: not found bounary prop: #72784
- silence sass
legacy-js-api warning: #72632
- [Segment Prefetch] Move access token to route tree: #72775
- Add internal affordances to show ignore-listed stackframes in terminal: #72763
- chore(turbopack): Centralize reqwest TLS feature configs in turbo-tasks-fetch: #72526
- Upgrade React from
7ac8e612-20241113 to 380f5d67-20241113: #72819
- Shorten unsourcemapped absolute locations in terminal stacktraces: #72764
- codemod: replace
revalidate(Tag|Path) to expire(Tag|Path): #72826
- "Fix": Lift type check out of loop: #72840
- hide stack trace in CanaryOnlyError: #72859
- Allow missing CacheNodeSeedData during prefetch: #72857
- Add Segment Cache feature check to
prefetch API: #72861
- Extract shared fetchFromServerResponse logic to separate functions: #72865
- [Segment Cache] Implement behavior on cache miss : #72841
- Emit build error for unknown cache kinds: #72832
- Resolve mdx plugins string format: #72802
- MDX: Only set experimental.turbo if enabled: #72856
- [Turbopack] change persistent caching option to a boolean: #72458
- refactor: generalize next route error helpers: #72774
- Ensure host is in allowed headers: #72867
- refactor: types for collected cache info in route modules: #71434
- feat(turbopack): Enable tree shaking for modules with dynamic imports: #71692
- Fix unhandled rejection in proxy-request: #72530
- chore(build): remove injecting fast refresh to custom loader logs: #72870
- ensure webpack worker exits bubble to parent process: #72921
- Fix sourcemaps for internal client boundaries: #72922
- Turbopack: thread tracing through to resolve results: #72314
- Upgrade vercel og: #72954
- Turbopack NFT: trace manifests and externals: #72316
- Turbopack: NFT followups: #72517
- Support custom servers with minimal node modules: #72966
- Add support for ignore-listing sources in index maps: #72913
- Turbopack: fix loading of externals on Edge: #72349
- Bump SWC used for transpiling Next.js sources: #72993
- fix: ensure HTML validity for the
next-size-adjust meta tag: #72994
- Revert "Support custom servers with minimal node modules": #73003
- Allow CacheNode.loading to be a promise: #72872
- Properly encode dynamic access in segment prefetch: #72874
- [Segment Cache] Send during route prefetch: #72890
- fix(next/image): improve svg heuristic for unoptimized: #72970
- [Segment Cache] Initial implementation: #72875
- Turbopack: Change edge wrapper to proxy exports : #72502
- experimental: css inlining: #72195
- Display where the env was loaded from when enabled
typedEnv: #70951
- create forked impl for Link component: #73019
- remove unnecessary handling in forked Link components: #73020
- Pass down ignored field to error overlay: #72925
- remove locale from app link: #73052
- fix: server action redirects between multiple root layouts: #73063
- Add forbidden and unauthorized APIs: #72785
- chore: rename modules for better meaning and searching: #73067
- fix(next/image): reduce avif sharp effort from 4 to 3 for faster encoding: #73030
- (E2E) Log which config file is used for
next start: #73105
- Remove extra space in envionment log: #73108
- remove inheritance from NextCustomServer: #73005
- Align navigation digest with message: #73074
- refactor: move redirect helpers into separate module: #73118
- Update font data: #73115
- Current behavior for fallbacks with async metadata and prefetching: #73106
- Revert "ensure webpack worker exits bubble to parent process (#72921)": #73136
- Reapply "ensure webpack worker exits bubble to parent process (#72921)": #73138
- Upgrade React from 380f5d67-20241113 to b01722d5-20241114: #73107
- Implement metadata types support for
exactOptionalPropertyTypes: #72936
- Reenable otel test for Turbopack: #73093
- Omit unnecessary cache wrapper import: #73160
- Increase max cache tags to 128: #73124
- Do not inline CSS in RSC payload for dynamic client nav: #73182
- fix(next/image): dpl query string should only be used for local images, not remote images: #73184
- feat(after): unflag unstable_after internals: #73190
- feat(after): allow using unstable_after in generateStaticParams: #73217
- Error on navigation API usage in pages router and middleware: #73100
- Undeprecate revalidate APIs and rename expire APIs: #73193
- Revert "codemod: replace
revalidate(Tag|Path) to expire(Tag|Path)": #73269
- feat(after): wait for after-callbacks before server shutdown: #72590
- Fixed interception on a catch-all route: #72902
- add option to disable experimental CssChunkingPlugin: #73286
- rename cssChunkPlugin experimental options: #73291
- Replace the group frames with button for ignored frames: #72964
- handle pages router ignored frames: #73280
- fix(after): no request APIs in force-static: #73321
- fix(after): allow reading draftMode status in after: #73324
- [Turbopack] reland refactor filesystem writes to an effect based system: #73294
- fix(pages): dynamic css missing style after client navigation: #72959
- Make
notFound() work in "use cache" page: #73210
- refactor(after): remove unnecessary conditionals: #73447
- Bump
@swc/core to 1.9.3: #73420
- fix: running cleanup before server is initialized: #73476
- [edge-runtime] drop node16: #73432
- feat(after): allow request APIs in after (actions/handlers): #73345
- Sourcemap errors logged in Edge runtime: #73438
- refactor: rename ALS instances to prevent bad auto imports: #73480
- Show a proper error if a server function's bound args cannot be serialized: #73471
- remove unnecessary internal middleware header from response: #73482
- Ensure Issue Overlay sourcemaps externals in Turbopack: #73439
- Fix missing error message in terminal for bound args serialization error: #73508
- fix: memory leak from
warnOnce(): #73483
- Upgrade React from
b01722d5-20241114 to 1b1283ad-20241203: #73506
- Fix: Importing an ESM file from next/dist/client/.js fails: #73485
- fix: fixed dedupe response cloning: #73274
- Upgrade React from
1b1283ad-20241203 to de68d2f4-20241204: #73525
- fix(after): improve error message if promise arg rejects: #73524
- feat: added compression to resume data cache using deflate: #73227
- Use React 19 stable in Pages Router: #73562
- Use stable
@types/react: #73563
- Cache the bound args encryption result for inline server functions: #73521
- chore: remove non-existent hash fragments from URLs: #73165
- next-upgrade: Ensure highest versions are used not latest: #73566
- Upgrade React from
de68d2f4-20241204 to 1c9b1387-20241204: #73565
- Use consistent error formatting in terminal: #71909
- [Segment Cache] Interception routes: #73434
- Upgrade to typescript 5.7: #73594
- [Segment Cache] Use LRU to manage cache data : #73486
- [Segment Cache] Add isPartial to segment prefetch : #73528
- Fix missing client reference manifest error when using route groups: #73606
- feat(after): stabilize
unstable_after: #73605
- [Segment Cache] Add isHeadPartial: #73530
- fix: do not add suffix for sitemap under group routes: #73570
- Dynamic IO: Improve error handling: #73607
- fix: Update @swc/helpers: #73666
- Upgrade React from
1c9b1387-20241204 to 7283a213-20241206: #73608
- next-codemod(upgrade): handle absence of scripts in package.json: #73688
- Add inlineCss trade-offs/gotchas and remove canary check: #73609
- Ignore-list stack frames in node_modules even if not explicitly ignore-listed by their sourcemaps: #73689
- Remove ignore for anonymous stack frame: #73610
- test: move HMR Error Recovery test to a separate file: #73592
- test: move HMR basic test to a separate file: #73612
- fixes webpack persistent caching in development and add test case for persistent caching: #73697
- fix: empty generateStaticParams should still create an ISR route: #73358
- Limit the number of concurrently open file watchers on macos: #73741
- fix:
warnOnce() lru: #73742
- [Segment Cache] Respond with 204 on cache miss: #73649
- [Segment Cache] Skip dynamic request if possible: #73540
Example Changes
- example: add more files to
playwright .gitignore: #72447
- examples: update app-dir-i18n-routing to v15: #72636
- chore(example): add example for image optimization with secure compute: #72641
- examples: update app-dir-i18n-routing to v15: #72642
- examples: polish some README.md: #72117
- examples(with-supabase): fix action type error: #72783
- use explicit resource management for sandbox: #72780
- update: remove unnecessary in Dockerfile: #72534
- Fix Mongoose example failed build due to env variable not found: #72918
- (example) using
await params when dynamic routing: #72896
- Updated the example of with-styled-jsx-scss to utilize the App Router.: #70567
- Updated the example of with-styled-jsx-plugins to utilize the App Router: #70663
- Updated the example of with-unstated to utilize the App Router.: #73211
- updated with-react-foundation example to utilize the App router.: #73243
- updated with-plausible example to utilize the app router.: #73255
- updated with-cssed example to utilize the app router.: #73348
- updated with-babel-macros example to utilize the app router.: #73347
Misc Changes
- Revert "[Turbopack] add rocksdb": #72505
- [Docs]: Remove try catch and link to error handling docs: #72500
- [Turbopack] improve performance of the trace server: #71661
- Docs: Move
next.config.js API pages under a config folder, fix headings in TS and ESLint config pages: #72465
- Skip canary checks during internal development with VSCode: #72504
- Devlow snowflake backend: use milliseconds instead of seconds for event time: #72490
- [Turbopack] add TODO comment: #72510
- docs: unify the header deps by removing #: #72451
- fix: remove unnecessary fragment: #72492
- Fix grammatical error: remove unnecessary 'a' in 03-server-actions-and-mutations.mdx: #72496
- docs: fix broken link: #72169
- codemod(turbopack): Replace
return Err(anyhow!()) with anyhow::bail!(): #72487
- Upgrade React from
66855b96-20241106 to 5c56b873-20241107: #72469
- fix(turbopack): Remove self-references from tree shaking results: #72567
- Turbopack: Don't run PostCSS on internal assets: #72579
- Update
swc_core to v5.0.4 from v5.0.1: #72604
Credits
Huge thanks to @sokra, @molebox, @delbaoliveira, @eps1lon, @wbinnssmith, @JamBalaya56562, @hyungjikim, @adrian-faustino, @mottox2, @lubieowoce, @bgw, @mknichel, @wyattjoh, @huozhi, @kdy1, @mischnic, @ijjk, @icyJoseph, @acdlite, @unstubbable, @gaojude, @devjiwonchoi, @cena-ko, @lforst, @devpla, @samcx, @styfle, @ztanner, @Marukome0743, @timneutkens, @JeremieDoctrine, @ductnn, @karlhorky, @reynaldichernando, @chogyejin, @y-yagi, @philparzer, @alfawal, @Rhynden, @arlyon, @MJez29, @Goodosky, @themattmayfield, @tobySolutions, @kevinmitch14, @leerob, @emmanuelgautier, @mrhrifat, @lid0a, @boar-is, @nisabmohd, @PapatMayuri, @ovogmap, @Reflex2468, @LioRael, @betterthanhajin, @HerringtonDarkholme, @bpb54321, @ahmoin, @Kikobeats, @abdelrahmanAbouelkheir, @lumirlumir, @yeeed711, @petter, and @suu3 for helping!