Skip to content
Back to Blog

Monday, July 14th 2025

Next.js 15.4

Posted by

Next.js 15.4 includes updates to performance, stability, and Turbopack compatibility. Highlights for this release include:

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:

Terminal
# 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 unified cacheComponents 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:

next.config.ts
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 to router.prefetch (#77880)
  • [Feature] Add prefetch="auto" as an alias to prefetch={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 for next 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:

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!