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

  1. Remove `experimental.ppr` and set `cacheComponents: true` at the top level to keep PPR behavior
  2. 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

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


AI-assisted analysis of vercel/next.js@0ae8c72462 (2026-08-06). Data as JSON: /api/errors/6cc9279b7ef92db4. Report an issue: GitHub.