vercel/next.js · error · Error
The router state header was sent but could not be parsed.
Error message
The router state header was sent but could not be parsed.
What it means
parseAndValidateFlightRouterState wraps JSON.parse of the decoded header plus a superstruct schema assert in a try block; this error is thrown when the header cannot be decoded/parsed or the state does not match the FlightRouterState schema, i.e. the client sent a malformed router state.
Source
Thrown at packages/next/src/server/app-render/parse-and-validate-flight-router-state.tsx:40
'Multiple router state headers were sent. This is not allowed.'
)
}
// We limit the size of the router state header to ~40kb. This is to prevent
// a malicious user from sending a very large header and slowing down the
// resolving of the router state.
// This is around 2,000 nested or parallel route segment states:
// '{"children":["",{}]}'.length === 20.
if (stateHeader.length > 20 * 2000) {
throw new Error('The router state header was too large.')
}
try {
const state = JSON.parse(decodeURIComponent(stateHeader))
assert(state, flightRouterStateSchema)
return state
} catch {
throw new Error('The router state header was sent but could not be parsed.')
}
}
View on GitHub (pinned to 0eb3775416)
Solutions
- The `next-router-state-tree` header contained invalid JSON; ensure nothing tampers with it in proxies or custom servers.
- Upgrade Next.js so client and server versions match.
Defensive patterns
Strategy: try-catch
When it happens
Trigger: Thrown at packages/next/src/server/app-render/parse-and-validate-flight-router-state.tsx:40 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of vercel/next.js@0eb3775416 (2026-08-19).
Data as JSON: /api/errors/eb9c14b2e4721582.
Report an issue: GitHub.