At install

Something refuses to install

The install just stops with an error. You, or your AI agent, see it immediately. This is the easiest kind to catch, because it cannot be missed.

At build

Your code calls something that's gone

Building the app fails because it uses a piece of ReactDOM.render, findDOMNode, or another feature that got removed. Still visible, still an error you can see.

At runtime

The dangerous one

The build succeeds. The page looks the same. But something quietly changed in how the app behaves, and you will not notice unless you actually try the things that used to work.

We're using a real React update as the example, but this happens with any library.

Did the update break what already worked?

Direct answer

An install that finishes and a build that succeeds do not answer this question. The only real way to know is to make a copy, apply the update there, and try the same things you already know work, like logging in, checking out, or saving something. If any of those break, the update is not safe yet. If you never tried them again, you simply do not know yet.

Last verified 18 August 2026React facts from the official 19 upgrade guide

The three ways an update can break your app

Every real library update can break your app in one of three ways. Apps built by AI tools break the same way. Under the hood you are usually running React plus a handful of other libraries your AI agent picked for you, and updating any of them counts as shipping a new version, whether you meant to or not.

1. Installing: something refuses to go together

One library you did not even know you were using refuses to work with the new version of another. Your AI agent might "fix" this by forcing the install through anyway. That does not mean the two libraries actually work together. It means the tool that would have warned you got told to be quiet.

The technical detailReact 19 plus an old @types/react, or a UI kit that still peers react@^18, is the usual form. The agent may "fix" this with --legacy-peer-deps, which silences the installer rather than resolving the conflict.

2. Building: your code calls something that's gone

React 19 removed a handful of older features that a lot of AI-generated code still relies on. If your app, or a library it depends on, still uses one of those, the build fails outright. That is actually good news: you find out immediately instead of shipping something broken.

The technical detailReactDOM.render is gone, migrate to createRoot. findDOMNode is gone, migrate to refs. defaultProps on function components is gone, migrate to default parameters. unmountComponentAtNode is gone, call root.unmount().

3. Using it: everything looks fine, until it isn't

This is the one that actually ships to real users. The build finishes with no errors, and the homepage looks exactly the same. But something about how the app behaves has quietly changed, maybe a value that used to fill in automatically now doesn't, or an error that used to get logged now goes silent. Nothing in your install log will warn you about this.

Worked example

What React 19 actually removed

Cited from the React 19 Upgrade Guide (25 April 2024). This is not a complete changelog. It is the set that shows up in generated React apps.

NoteThe rest of this section gets specific about the exact code that changed. If you are not writing code yourself, the sections above already told you what matters: try the things that used to work.

Removed: ReactDOM.render

This was deprecated in React 18 and fully removed in 19. If your AI tool generated code from an older tutorial, or pulled in a library that still uses the old way, your build fails right here. The fix is createRoot, shown below.

// Before
import { render } from 'react-dom';
render(<App />, document.getElementById('root'));

// After
import { createRoot } from 'react-dom/client';
const root = createRoot(document.getElementById('root'));
root.render(<App />);

Removed: findDOMNode

This has been on its way out since 2018 and is now gone for good, replaced by something called a ref. If your generated code used the old approach, it will not run.

Removed: defaultProps on function components

Most AI-generated components are function components, and this one is sneaky: your code might still run, but a default value that used to fill in automatically can silently disappear instead, becoming blank. That is the dangerous kind of break, the one your build will not catch for you.

// Before
function Heading({ text }) { return <h1>{text}</h1>; }
Heading.defaultProps = { text: 'Hello, world!' };

// After
function Heading({ text = 'Hello, world!' }) {
  return <h1>{text}</h1>;
}

A note on "weird" bugs after upgrading

If something feels like it is running twice while you are developing, but not for real users, that is very likely expected behavior React has had since version 18, not a new bug from this upgrade. Before you assume the upgrade broke something, rule out that expected double-run, a missing cleanup step, or a default value that quietly disappeared.

The technical detailOn the double render, useMemo and useCallback reuse the first render's memo; ref callbacks are double-invoked on initial mount to simulate replacement by a Suspense fallback. This is Strict Mode's documented development behaviour, not a new break.

Errors can now fail silently

In React 19, an error while rendering no longer necessarily surfaces the way it used to. If you rely on an error-tracking tool to catch problems in production, check that it is still catching things after this upgrade, because it may have gone quiet without you noticing while the build still passed.

The technical detailReact 19 reports uncaught render errors to window.reportError and caught ones to console.error, without the old re-throw.

How to check this yourself, no tools required

  1. Make a separate copy or branch of your project. Do not apply the update directly to your real, working version.
  2. Read the library's own upgrade guide before asking your AI agent to just do it. For React specifically, update to 18.3 first so you see warnings about what is about to break, then move to 19. That is React's own recommended order.
  3. Install the update. If you get a conflict error, write it down instead of forcing past it. If you do force past it, make sure you complete step 5 below afterward.
  4. Build the app. Fix anything that errors out until it builds cleanly.
  5. Try every real task that used to work: use a private browser window, a real test account, and check it on your phone. The question is not whether the homepage loads. It is whether checkout, login, and everything else still actually work, start to finish.
  6. If anything that used to work now fails, do not apply the update to your real project yet. And if you never actually tried these things before the update either, you cannot know if the update broke them. You can only start checking now. See how to test.

That is the whole method. Trying the things that used to work is the only real answer to "did it break." Everything else is a guess.

Where PeerRun is today

We can help you plan an update. We can't yet re-check it for you automatically.

PeerRun can help you plan a library update today. What we cannot yet claim is a fully automatic version of the process above: trying the update on a copy and re-running everything for you. Until we can prove that works end to end, we will not claim it. The honest line is: an update you do not re-check is one you do not actually know is safe. Here is how to check it yourself.

What PeerRun can already do is open your project in a real browser and try the journeys that matter, and tell you honestly if one fails. So after you apply an update yourself, bringing us the folder again and having us try those same journeys answers the same question a fully automatic version would.

What this page will not say

  • "PeerRun makes updates safe."
  • "We certify your new set of dependencies."
  • That the automatic try-it-and-recheck feature described above is available today. It is not, as of 18 August 2026.
  • A verdict for an app you have not brought us. Anything behind your sign-in stays Unknown until you give us access. A robot-check is Blocked, not Broken.

Nothing gets updated just by being on this page. Clicking through only tells us you came here to bring a project.

Sources

  1. 01React 19 Upgrade Guide, Ricky Hanlon, 25 April 2024. Removed render, findDOMNode, function-component defaultProps, unmountComponentAtNode. Strict Mode notes. Error reporting change.
  2. 02React 18 Upgrade Guide, for the original deprecation of ReactDOM.render.
  3. 03PeerRun planning path versus the ungated copy-and-reprove loop: internal honest-gate audit, 18 August 2026. The gap is ours, so this page does not outrun it.