vercel/next.js · error · HardDeprecatedConfigError
`experimental.ppr` has been merged into `cacheComponents`. T
Error message
`experimental.ppr` has been merged into `cacheComponents`. The Partial Prerendering feature is still available, but is now enabled via `cacheComponents`. Please update your ${configFileName} accordingly. What it means
The `experimental.ppr` flag (Partial Prerendering) has been hard-deprecated and merged into `cacheComponents`. Normalization throws a `HardDeprecatedConfigError` (not a plain Error) if `experimental.ppr` is truthy, telling you to use `cacheComponents` instead. The PPR behavior itself is still available via cacheComponents.
Source
Thrown at packages/next/src/server/config.ts:575
`Please add \`reactCompiler: true\` in ${configFileName}.`
)
}
}
if (result.experimental.cachedNavigations && !result.cacheComponents) {
throw new Error(
`\`experimental.cachedNavigations\` requires \`cacheComponents\` to be enabled. Please update your ${configFileName} accordingly.`
)
}
if (result.partialPrefetching && !result.cacheComponents) {
throw new Error(
`\`partialPrefetching\` requires \`cacheComponents\` to be enabled. Please update your ${configFileName} accordingly.`
)
}
if (result.experimental.ppr) {
throw new HardDeprecatedConfigError(
`\`experimental.ppr\` has been merged into \`cacheComponents\`. The Partial Prerendering feature is still available, but is now enabled via \`cacheComponents\`. Please update your ${configFileName} accordingly.`
)
}
if (result.output === 'export') {
if (result.i18n) {
throw new Error(
'Specified "i18n" cannot be used with "output: export". See more info here: https://nextjs.org/docs/messages/export-no-i18n'
)
}
if (!hasNextSupport) {
if (result.rewrites) {
Log.warn(
'Specified "rewrites" will not automatically work with "output: export". See more info here: https://nextjs.org/docs/messages/export-no-custom-routes'
)
}
if (result.redirects) {View on GitHub (pinned to 0ae8c72462)
Solutions
- Remove `experimental.ppr` and set `cacheComponents: true` at the top level to keep PPR behavior
- If PPR is not wanted, simply remove the ppr key
Example fix
// before
module.exports = { experimental: { ppr: true } }
// after
module.exports = { cacheComponents: true } Defensive patterns
Strategy: validation
Validate before calling
if (config.experimental?.ppr) {
delete config.experimental.ppr
config.cacheComponents = true
} Prevention
- After upgrading Next.js, grep config for experimental.ppr and migrate to cacheComponents
- Treat HardDeprecatedConfigError as a hard stop, not a warning
When it happens
Trigger: Setting `experimental: { ppr: true }` (or any truthy value) in next.config. Thrown during the cacheComponents/guard block in loadConfig.
Common situations: Upgrading from an older Next.js where experimental.ppr was the toggle. Following outdated tutorials or copy-pasting an old experimental block.
Related errors
- `experimental.cachedNavigations` requires `cacheComponents`
- `partialPrefetching` requires `cacheComponents` to be enable
- `experimental.useCache` cannot be disabled when `cacheCompon
- `experimental.turbopackGenerateComponentChunks` has been mov
- `experimental.turbopackChunkingHeuristics` has been renamed
AI-assisted analysis of vercel/next.js@0ae8c72462 (2026-08-06).
Data as JSON: /api/errors/6cc9279b7ef92db4.
Report an issue: GitHub.