docs/01-app/03-api-reference/05-config/01-next-config-js/cacheComponents.mdx
Cache Components enables component and function-level caching using the use cache directive. Data fetching is dynamic by default, and you choose what to cache at the page, component, or function level. Next.js prerenders a static HTML shell that is served immediately while dynamic content streams in when ready, letting you mix static and dynamic content within a single route.
To enable the cacheComponents flag, set it to true in your next.config.ts file:
import type { NextConfig } from 'next'
const nextConfig: NextConfig = {
cacheComponents: true,
}
export default nextConfig
When cacheComponents is enabled, you can use the following cache functions and configurations:
use cache directivecacheLife function with use cachecacheTag functionGood to know: If you used
experimental.useCacheorexperimental.dynamicIO, migrate using the Version 16 upgrade guide. To migrate route segment configs and other caching patterns, see Migrating to Cache Components.
Additionally, cacheComponents implements Partial Prerendering (PPR) as the default behavior in the App Router. This means the experimental.ppr configuration flag and the experimental_ppr route segment configuration are no longer necessary and have been removed.
Read How rendering works for how the static shell and streaming fit together.
Good to know: If you used experimental PPR in Next.js 15, refer to the Partial Prerendering (PPR) section of the Version 16 upgrade guide when migrating.
When cacheComponents is enabled, Next.js uses React's <Activity> component to preserve component state during client-side navigation.
Rather than unmounting the previous route when you navigate away, Next.js sets the Activity mode to "hidden". This means:
This behavior improves the navigation experience by maintaining UI state (form inputs, or expanded sections) when users navigate back and forth between routes.
Good to know: Next.js uses heuristics to keep a few recently visited routes
"hidden", while older routes are removed from the DOM to prevent excessive growth.
Some UI patterns behave differently when components stay mounted instead of unmounting. See the Preserving UI state guide for handling common patterns like dropdowns, dialogs, and testing.
| Version | Change |
|---|---|
| 16.0.0 | cacheComponents introduced. This flag controls the ppr, useCache, and dynamicIO flags as a single, unified configuration. |