Core Changes
- Turbopack: switch to a single client components entrypoint: #59352
- Update
swc_core to v0.86.98 and turbopack: #59393
- Fix cases for the
optimize_server_react transform: #59390
- Use new JSX transform: #56294
- loading.tsx should have no effect on partial rendering when PPR is enabled: #59196
- Update font data: #59426
- Remove CacheNode.status field: #59472
- Rename CacheNode.data → .lazyData : #59473
- Generate Params Cleanup: #59431
- Fix webpack chunks handling in traces: #59498
- Rename CacheNode.subTreeData -> .rsc : #59491
- fix NODE_OPTIONS=inspect: #59530
- Add CacheNode.prefetchRsc field: #59537
- allow passing wildcard domains in serverActions.allowedDomains: #59428
- Page Info Cleanup: #59430
- Fix force-static and fetch no-store cases: #59549
- Should not show no index for client rendering bailout: #59531
- Enable build worker by default: #59405
- Fork navigateReducer into PPR and non-PPR versions: #59538
- cleanup magic segment strings: #59552
- chore: update Turbopack: #59589
- Fix another magic segment string constant: #59591
- Make CacheNodeSeedData match FlightRouterState more closely: #59590
- transpilePackages should override default settings for external packages: #59385
- move segment constants to separate file: #59587
- Revert "Page Info Cleanup (#59430)": #59592
- Fix useOptimistic in server components bug. Add tests for invalid React server APIs: #59621
- Partial Pre Rendering Headers: #59447
- Add tests for invalid React server APIs: #59622
- Refactor setup-dev-bundler to make Turbopack/Webpack split clearer: #59650
- refactor and simplify app dynamic components: #59658
- Change manifestPath to pagesManifestPath: #59657
- Fix issue with outputFileTracingExcludes and pages/api edge runtime: #59157
- Update font data: #59722
- Remove path normalization logic when uploading .next/trace traces: #59305
- LayoutRouter: Support segment value of Promise to asynchronously bail out and trigger a server patch: #59724
- fix: Allow start turbopack dev server for a project using middleware: #59759
- fix: gracefully shutdown server: #59551
- Revert "fix: gracefully shutdown server (#59551)": #59792
- Optionally bundle legacy react-dom/server APIs based on usage: #59737
- fix
default handling in route groups that handle interception: #59752
- Transpile all code on app browser layer: #59569
- Initial implementation of PPR client navigations: #59725
- fix(turbopack): prevent edge entrypoint from becoming an async module: #59818
- Ensure we validate revalidate configs properly: #59822
- Update error check in validateRevalidate: #59826
- Rename confusing loaders: #59827
- Upgrade og dependencies: #59541
- [PPR Navs] Bugfix: Dynamic data never streams in if prefetch entry is stale: #59833
- fix parallel catch-all route normalization: #59791
- fix router prefetch cache key to work with route interception: #59861
- Alias nextjs api entry to esm version for app router: #59852
- Remove duplicate standalone check: #60085
- Remove return on void function: #60087
- Ensure NextBuildContext is only used during build: #60099
- Add PageExtensions type: #60108
- Ensure instrumentation file does not affect middleware count: #60102
- Use WebpackError type instead of any: #60105
- Remove root parameter: #60112
- Remove extra duplicate pages warning: #60113
- Add MappedPages type: #60106
- Always call createPagesMapping for root paths: #60107
- Fix path issues on linux machines when build created on windows: #60116
- fix: Fix wrong cjs detection of
auto-cjs pass: #60118
- chore: update Copyright time from 2023 to 2024: #60071
- Filter out duplicate paths in build output: #59858
- chore: align webpack config node version: #59862
- gracefully handle client router segment mismatches: #60141
- Fix start build log being overwritten by logs from page: #60122
- Allow using ESM pkg with custom incremental cache: #59863
- Fix emitting ESM swc helpers for 3rd parties CJS libs in bundle: #60169
- Move cacheDir logic to getCacheDir: #60133
- Refactor to unify writeFile, readFile, and add readManifest: #60137
- chore: bump
@vercel/nft@0.26.2: #60172
- fix:
<Script> with beforeInteractive strategy ignores additional attributes in App Router: #59779
- Fix invalid comment: #60182
- Refactor: Separate RSC renderer from SSR wrapping component: #59676
- fix: cache next font during development to avoid FOUC: #60175
- Add writeManifest: #60138
- Add writePrerenderManifest: #60158
- Add writeStandaloneDirectory: #60162
- Always write FunctionsConfigManifest: #60163
- Upgrade @vercel/og: #60205
- Improve consistency of issues and diagnostics for napi calls: #60198
- Change server actions cache default to no-store: #60170
- Allow undefined environment variables in config: #58247
- Add writeFullyStaticExport: #60200
- fix: Mark file as ESM if it has an export from
auto-cjs pass: #60216
- log a dev warning when a missing parallel slot results in a 404: #60186
- Fix: Throw an error for empty array return in
generateStaticParams with output:export: #57053
- Ensure appPathsManifest variable is inside if block: #60210
- Remove NEXT_TURBO_FILTER_PAGES internal variable: #60217
- fix: add
node-web-audio-api to server-external-packages.json: #60243
- Disable 2mb limit for custom incrementalCacheHandler: #59976
- [PPR Nav] Fix: Page data should always be applied: #60242
- Add writeImagesManifest: #60209
- feat(next-core): apply rsc transform in turbopack: #59629
- Move buildId logic to getBuildId: #60132
- fix catch-all route normalization for default parallel routes: #60240
- micro fix of the cache limit check: #60249
- parallel routes: fix @children slots: #60288
- Bump webpack-bundle-analyzer: #58442
- docs: Add docs for
next dev --experimental-https: #60357
- Update React from 0cdfef19b to f1039be4a: #60368
- Simplify if condition: #60250
- Fix dynamic sitemap detection: #60356
- chore(font): enable minification: #60319
- chore(precompile): remove obsolete precompiled assets : #60316
- refactor: simplify the call in lib.picocolors: #60386
- chore(precompile): re-add
watchpack to the precompile: #60309
- refactor(dev-overlay): remove
chalk: #60317
- Fix: HMR in multi-zone handling 🌱: #59471
- HMR development stats: include
updatedModules for App Router and Turbopack changes: #59785
- Change color of output bundle size: #60385
- Fix TypeError when using params in
RootLayout with parallel routes: #60401
- Fix missing source code display for some jsx errors: #60390
- Refactor
unstable_cache implementation: #60403
- Missing Postpone Detection Fix: #59891
- refactor(next/core): reorganize next.js custom transforms for next-swc/turbopack: #60400
- Fix custom cache handler importing on windows: #60312
- Display original failed fetch trace: #60274
- feat(app-router): introduce
experimental.missingSuspenseWithCSRBailout flag: #57642
- update turbopack: #60208
- update turbopack: #60478
- feat(turbopack): support named client references properly: #59578
- Fix intercepted segments with basepath: #60485
- parallel routes: fix client reference manifest grouping for catch-all segments: #60482
- Group small chunks in shared js section of output: #60479
- filter default segments from prerender manifest: #60499
- Add experimental options for more parallelization in webpack builds: #60177
- move custom allocator flag and add rustls-tls comment: #60128
- fix: redirect logic missing basePath in App Render: #60184
- Revert "feat(app-router): introduce
experimental.missingSuspenseWithCSRBailout flag": #60508
- add retry logic to loadClientReferenceManifest: #56518
- Turbopack hmr: record forwarded client spans: #60500
- chore(turbopack): check for unsupported next config options instead of supported ones: #58781
- Handle non server action post requests safely: #60526
- Fix global-error for nested routes: #60539
- chore(examples): use default prettier for examples/templates: #60530
- Update default error rate for client filter: #60542
- Enable windowHistorySupport by default: #60557
- Fix logging order of build jobs: #60564
- propagate notFound errors past a segment's error boundary: #60567
- Tracing: attach Turbopack session value to root span: #60576
- [PPR Nav] Fix flash of loading state during back/forward: #60578
- Fix react-refresh for transpiled packages: #60563
- Ensure client filter with basePath is correct: #60580
- Update React from f1039be4a to 60a927d04: #60619
- Add cache reason for using fetch with noStore: #60630
- chore: remove unused export: #60647
- remove next build turbopack version: #60655
- fix breakpoints on reload: #60507
- Fix hmr updates with rebuilding for build errors: #60676
- graceful shutdown: #60059
- refactor(next-swc): remove unused crashreporter: #60593
- chore(eslint-plugin-next): upgrade glob dependency: #60732
- Fix client reference keys of barrel-optimized files: #60685
- Fix recursive ignoring case in build traces: #60740
- Telemetry: allow disabling of fetch tracing: #60588
- chore: typo, responseCookes to responseCookies: #60654
- Telemetry code load: #60594
- allow to pass available chunk items when creating a chunk group: #60554
- separate chunking per layout parts: #60569
- feat(next-core): port remaining next.js custom transforms: #60498
- Reapply "feat(app-router): introduce
experimental.missingSuspenseWithCSRBailout flag" (#60508): #60751
- Skip postcss config location resolving in node_modules: #60697
- apply page transforms only on pages: #60779
- fix layout segment key to match up with manifest: #60783
- Fix locale domain public files check: #60749
- Stabilize custom cache handlers and changing memory size.: #57953
- feat: stabilize
unstable_getImgProps() => getImageProps(): #60739
- Fix Server Actions compiler bug: #60794
- Dev Server: Preserve globals overwrites in the initialization hook: #60796
- add missing function call to
normalize-catchall-routes test case: #60777
- Use snapshots for component-stack tests: #60768
- Support next/og usage in ESM nextjs app: #60818
- fix(ts): auto-complete
next/headers: #60817
- Remove the warning for build worker when custom webpack present: #60820
- chore(deps): update
browserslist and caniuse-lite: #60827
- feat: support custom image loaders in turbopack: #60736
- Ensure request specific caches for revalidate are reset: #60810
- Add metrics names for unstable_cache: #60802
- Fix: respect init.cache if fetch input is request instance: #60821
- Revert "Fix: Throw an error for empty array return in
generateStaticParams with output:export": #60831
- turbopack: rename custom cache handler configs: #60828
- dx: warn the deprecated cache configs are used: #60836
- Enable missing suspense bailout by default: #60840
Documentation Changes
- Docs: Update Server Actions Docs: #59080
- Docs: Polish Server Actions Page 💅🏼 : #59400
- Update 10-route-handlers.mdx: #59443
- docs: remove broken link: #59487
- Docs: Add App Router Testing Guides and update /examples: #59268
- docs: fix bad closed tag: #59575
- Fix closing tags for jest docs: #59579
- Docs: Fix formatting in testing docs and update examples dependencies: #59572
- Docs: Add missing closing tag: #59581
- Docs: Review and update
getServerSideProps page: #59545
- docs: add note for environment variables on Vercel deployment: #59237
- docs(accessibility): updates WCAG version to 2.2: #59646
- docs: small tweaks: #59638
- docs: fix broken backtick for link: #59717
- Docs: Document
generateSitemaps: #59626
- Docs: Polish testing section: #59618
- docs: improve docs around geolocation and IP headers: #59719
- Docs: Review and Typo Fix - getServerSideProps: #59616
- docs: fix vitest example link in testing with vitest:
Example Changes
- Updates the
with-vitest example. Unlocks the tests passing with server-only usage: #58902
- Add text-wrap: balance to CNA template for card descriptions: #59384
- fix: Invalid next version tag name in with-cypress example: #59647
- Fix: Add matcher for middleware: #59651
- examples: Add new NextAuth.js example: #56914
- examples: add required env vars to auth example.: #59901
- examples: update Redis to App Router: #59311
- examples: remove broken deploy button: #58794
- examples: progressive enhancement for Redis example: #59937
- Update .env.local.example of with-firebase example: #59954
- Upgrade
with-algolia-react-instantsearch example to latest major version and use app router: #59961
- Rename .env.local.example to .env.example: #59984
- Update Convex Example: #59789
- examples: Update next-forms example: #60052
- chore(cms-contentfu): fix contentful instructions: #60050
- examples: improve typings for i18n app dir: #60160
- chore(examples): migrate
image-component example to App Router: #60289
Misc Changes
- Revert "Skip latest commit check for stable release": #59401
- ci(workflow): restore publish wasm binary: #59414
- ci: only run release commit check on canary releases: #59423
- test(runner): preserve browser tracing if test fails: #59469
- Adding Google analytics to next/third-parties: #58418
- ci(test): upload playwright artifacts seperately: #59496
- fix integration test workflow: #59508
- Fix third party typings: #59503
- test(fixture): try to include sources in the snapshot: #59499
- chore: bump typescript-eslint to 6.14: #59514
- Update Deployment Testing: #59448
- fix(playwright): teardown when global quit force terminates browser: #59548
- chore(create-next-app): bump prompts to v2.4.2: #59006
- types: cover the tests with root tsconfig.json: #59550
- Fix test/tsconfig.json alias for internal test utils: #59570
- test(integration): adjust fixture to work with turbopack: #59595
- Add test for importing client components from server actions: #59615
- chore: extends from shared base tsconfig: #59776
Credits
Huge thanks to @delbaoliveira, @OlehDutchenko, @sokra, @huozhi, @shuding, @kwonoj, @ztanner, @eps1lon, @acdlite, @ebidel, @leerob, @janicklas-ralph, @wyattjoh, @ijjk, @JohnPhamous, @chentsulin, @akawalsky, @BlankParticle, @timneutkens, @ForsakenHarmony, @dvoytenko, @smaeda-ks, @kenji-webdev, @rv-david, @icyJoseph, @dijonmusters, @A7med3bdulBaset, @jenewland1999, @mknichel, @kdy1, @housseindjirdeh, @max-programming, @redbmk, @SSakibHossain10, @jamesmillerburgess, @minaelee, @officialrajdeepsingh, @LorisSigrist, @yesl-kim, @StevenKamwaza, @manovotny, @mcexit, @remcohaszing, @ryo-manba, @TranquilMarmot, @vinaykulk621, @haritssr, @divquan, @IgorVaryvoda, @LukeSchlangen, @RiskyMH, @ash2048, @ManuWeb3, @msgadi, @dhayab, @ShahriarKh, @jvandenaardweg, @DestroyerXyz, @SwitchBladeAK, @ianmacartney, @justinh00k, @tiborsaas, @ArianHamdi, @li-jia-nan, @aramikuto, @jquinc30, @samcx, @Haosik, @AkifumiSato, @arnabsen, @nfroidure, @clbn, @siddtheone, @styfle, @zbauman3, @gnoff, @anthonyshew, @alexfradiani, @CalebBarnes, @adk96r, @pacexy, @hichemfantar, @michaldudak, @redonkulus, @k-taro56, @mhughdo, @tknickman, @shumakmanohar, @vordgi, @StephDietz, @hamirmahal, @gaspar09, @JCharante, @sjoerdvanBommel, @mass2527, @N-Ziermann, @tordans, @davidthorand, @rmathew8-gh, @chriskrogh, @shogunsea, @auipga, @SukkaW, @agustints, @wbinnssmith, @feedthejim, @OXXD, @clarencepenz, @better-salmon, @808vita, @coltonehrman, @tksst, @hugo-syn, @JakobJingleheimer, @Willem-Jaap, @brandonnorsworthy, @jaehunn, @balazsorban44, @kooya3, @wan2land, @AugustinMauroy, and @williamli for helping!