Monday, July 14th 2025
Next.js 15.4
Posted byNext.js 15.4 includes updates to performance, stability, and Turbopack compatibility. Highlights for this release include:
- Turbopack Builds: 100% integration test compatibility for
next build --turbopack
- Stability Improvements: Numerous stability and performance improvements to Next.js and Turbopack
This blog post also includes an early preview of what's coming in Next.js 16, our next major release.
Upgrade today, or get started with:
# Use the automated upgrade CLI
npx @next/codemod@canary upgrade latest
# ...or upgrade manually
npm install next@latest react@latest react-dom@latest
# ...or start a new project
npx create-next-app@latest
Turbopack Builds
next build --turbopack
now passes all 8298 integration tests for production builds and now powers vercel.com
. This is a crucial milestone towards marking Turbopack in Next.js stable.
The team's current priority is to finish the swing on bundling optimizations via production chunking and to fix reported bugs from early adopters of the Alpha release. We've also made numerous stability and performance improvements to Turbopack under the hood.
We are confident that Turbopack will soon be ready for production use, and we're working towards a beta release in Next.js 16. If you had tried Turbopack previously, now is a good time to try again. If you run into any issues let us know on GitHub Issues.
Looking Ahead: Next.js 16
Over the past few months, we've been iterating on major improvements to Next.js, focusing on both the developer experience with Turbopack and the core capacities of the App Router with PPR
and use cache
. While we are not ready to enable those features on by default, we are looking to lay the groundwork for our users to try it out in Next.js 16 this summer.
Here’s a preview of what's coming in Next.js 16:
- Cache Components (beta): Consolidates experimental caching features (Dynamic IO,
use cache
, and Partial Prerendering) into a unifiedcacheComponents
flag, simplifying performance optimization strategies. The Next.js 16 blog post will detail our vision. - Turbopack Builds (beta): Introduces
next build --turbopack
, fully passing integration tests, and validated internally on high-traffic sites like vercel.com. Ready for expanded public beta use in Next.js 16. - Optimized Client-Side Routing: Enhances App Router navigation with smarter prefetching, improved cache invalidation strategies, and reduced bandwidth usage, resulting in faster and more responsive navigation.
- DevTools & Debugging: Adds Route Info to inspect app structure and toggle components like
loading.tsx
. Adds experimental browser log forwarding to the terminal to support AI-powered debugging workflows. - Node.js Middleware (stable): Promotes the previously experimental Node.js runtime support for Middleware, initially introduced in Next.js 15.2, to stable status.
- Deployment Adapters (alpha): Enables developers to create custom deployment adapters for finer control over build and deploy targets.
- Minor Deprecations: Deprecates Node.js 18 support, AMP, and select legacy
next/image
APIs with appropriate migration guidance.
Our goal is to make this update as smooth and straightforward as possible. We're managing these changes carefully to minimize disruption and will provide clear guidance and tools to support your transition to Next.js 16.
Preview Upcoming Features
You can start experimenting with many of these features today by using the canary
channel and enabling the following flags in your next.config.js
:
import type { NextConfig } from 'next';
const nextConfig: NextConfig = {
experimental: {
// Forward browser logs to the terminal for easier debugging
browserDebugInfoInTerminal: true,
// Enable new caching and pre-rendering behavior
dynamicIO: true, // will be renamed to cacheComponents in Next.js 16
// Activate new client-side router improvements
clientSegmentCache: true,
// Explore route composition and segment overrides via DevTools
devtoolSegmentExplorer: true,
// Enable persistent caching for the turbopack dev server and build.
turbopackPersistentCaching: true,
},
};
export default nextConfig;
Notable Changes
- [Improvement] Preserve RSC query during redirects (#77963)
- [Improvement] Graceful error fallback for bots (#77916)
- [Improvement] Disallow
unstable_rootParams
in client components (#79471) - [Improvement] Fix
bodySizeLimit
errors and non-multipart actions (#77746) - [Improvement] Respond with 404 for unknown action IDs (#77012)
- [Improvement] Check cache-busting params on RSC requests (#80669)
- [Improvement] Upgrade Vercel OG to 0.7.2 (#81447)
- [Improvement] List
assert/strict
as external (#80884) - [Improvement] Omit searchParam data from
FlightRouterState
before transport (#80734) - [Improvement] Render streaming metadata on the top level (#80566)
- [Fix] Clone the config module to avoid mutation (#80573)
- [Fix] Bugfix: Propagate
staleTime
to seeded prefetch entry (#81263) - [Fix] Reinstate vary (#79939)
- [Fix] Fix interestingness detection for React Compiler (#79558)
- [Fix] Fix react compiler usefulness detector (#79480)
- [Fix] Better handle edge-case file paths in launchEditor (#79526)
- [Fix] Client router should discard stale prefetch entries for static pages (#79362)
- [Feature] Add
onInvalidate
torouter.prefetch
(#77880) - [Feature] Add
prefetch="auto"
as an alias toprefetch={undefined}
to Link (#78689) - [Feature] Support metadata in global-not-found (#78961)
- [Feature] Restart dev server from error overlay (#80060)
- [Feature] Restart dev server from indicator preferences (#80072)
- [Feature] Add
--debug-prerender
option fornext build
(#80667) - [Feature] Add htmlrewriter to server externals (#80819)
- [Feature] Allow partially prerendering intercepted dynamic routes (#80851)
- [Performance] Check files with SWC before React Compiler (#75605)
- [Performance] Improve static path generation performance and parameter handling (#81254)
- [Misc] Fix
NEXT_CPU_PROF
usage during development to allow capturing CPU traces (#81248)
Share your feedback and help shape the future of Next.js:
Contributors
Next.js is the result of the combined work of over 3,000 individual developers. This release was brought to you by:
- The Next.js team: Andrew, Ben, Hendrik, Janka, Jiachi, Jimmy, Jiwon, JJ, Josh, Jude, Rob, Sam, Sebastian, Sebbie, Wyatt, and Zack.
- The Turbopack team: Benjamin, Donny, Josh, Luke, Maia, Niklas, Tim, Tobias, and Will.
- The Next.js Docs team: Delba, Rich, Ismael, Joseph, and Lee.
Huge thanks to @sokra, @huozhi, @Marukome0743, @mischnic, @wbinnssmith, @eps1lon, @razzeee, @delbaoliveira, @kdy1, @wyattjoh, @acdlite, @ztanner, @bgw, @jantimon, @lubieowoce, @Fonger, @ospira, @gnoff, @styfle, @Cy-Tek, @timneutkens, @raunofreiberg, @devchaudhary24k, @Neschadin, @OreQr, @drewlong314, @ijjk, @praizjosh, @unstubbable, @lukesandberg, @ScriptedAlchemy, @sqidermad, @Juneezee, @devjiwonchoi, @Kamitenshi, @feedthejim, @leerob, @mauerbac, @miki-tebe, @gaearon, @mrbadri, @luwes, @lucacasonato, @M4xymm, @jirihofman, @vicb, @jackwilson323, @SyMind, @kevva, @xyf7, @gaojude, @dario-piotrowicz, @mastoj, @nicole0707, @lourd, @Karibash, @chipit24, @icyJoseph, @xusd320, @fireairforce, @GenhaoLi, @igas, @Macw07, @amannn, @bcdipesh, @r34son, @ivasilov, @lpalmes, @imskyleen, @teamleaderleo, @vitaliemiron, @agadzik, @chdeskur, @nakanoh, @luiscobot, @GameRoMan, @dferber90, @maurobonfietti, @navandstokes, @sajadtorkamani, @bobziroll, @lumirlumir, @KkOoSsTtAa, @msabramo, @sommeeeer, @schoenwaldnils, @remcohaszing, @HerringtonDarkholme, @nebrelbug, @RobPruzan, @lmammino, @MohammedYehia, @extoci, @padmaia, @aacosta11, @vercel-release-bot, @maral, @ethanniser, @MichalMoravik, @rajrawat37, @kidonng, @dnhn, @kristian240, @rachnac-emeritus, @rortan134, and @nick20name17 for helping!