Hydration Proof

Search documentation

Find a page or section

Minified React error codes for hydration

What each production code stands for, in React 18 and React 19.

Minified React error 418, 423, 425, and the other codes below are production forms of React's hydration messages. #418 and #425 describe mismatches; #423 describes a root that React rendered again. Find your code below, then follow its page for a fix.

The error

A React 19 production build prints:

Minified React error #418; visit https://react.dev/errors/418?args[]=HTML&args[]= for the full message or use the non-minified dev environment for full errors and additional helpful warnings.

React 18 links to the old decoder instead:

Minified React error #423; visit https://reactjs.org/docs/error-decoder.html?invariant=423 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.

The number identifies the message. args[] supplies words used in the full message, but does not identify the changed element.

Minified React error 418, 423, 425 and the rest, decoded

  • #407 — missing server snapshot. useSyncExternalStore needs a getServerSnapshot for server rendering. Both React 18 and 19 use this code. Start with the snapshot guide. hydration-proof may report HP2003 or HP2004 if React switches to client rendering.
  • #418 — HTML or text differs. React 18 calls this an initial UI mismatch; React 19 says the server-rendered HTML or text did not match the client. Start with the #418 guide. hydration-proof usually reports the actual difference, such as HP1001 or HP1007.
  • #419 — server render failed inside Suspense. The server could not finish the boundary, so React renders it in the browser. Check the server log and HP2006.
  • #421 — update before a Suspense boundary hydrated. This is a React 18 code; React 19 no longer reports it. See early updates and HP2005.
  • #422 — React rendered a Suspense boundary again. Both versions use this recovery code, with different wording. Find the earlier error that caused it; see HP2003.
  • #423 — React rendered the whole root again. The failure was outside a Suspense boundary. See the #423 guide and HP2004.
  • #424 — update before the root hydrated. Both versions use this code. See early updates and HP2005.
  • #425 — text differs in React 18. React 19 reports text mismatches as #418 instead. See the #425 guide and HP1001.

The mismatch codes: #418 and #425

#418 points to a mismatch. React 18 uses #425 specifically for text.

The recovery codes: #422 and #423

These describe recovery after an earlier error. Minified React error #422 means React rendered a Suspense boundary again; #423 means it rendered the root again. Find the preceding error for the cause. See there was an error while hydrating.

The server code: #419

Minified React error #419 means the server could not finish a Suspense boundary. Check server logs for the underlying error.

The early update codes: #421 and #424

Minified React error #421 describes an early update to a Suspense boundary; minified React error #424 describes one at the root. See early updates during hydration.

The API code: #407

The server snapshot argument for useSyncExternalStore is missing. See Missing getServerSnapshot.

Why React minifies its errors

Production builds use short codes. Development builds include fuller messages, component stacks, and sometimes a diff.

That is why a production console may show #418 followed by #423 without the warning that named the element.

How to get the full message

  1. Open the decoder link in the error for the full wording.

  2. Reproduce the page in development for the element and diff.

  3. If production is different, check both builds:

    npx hydration-proof test --mode both

    The report marks findings unique to either mode. See errors only in production.

Find every instance

Run checks on your routes in CI to find mismatches before users encounter them. See CI and the issue codes.