An independent tool for teams moving their source to React 19
React 19 Source DeskReactDOM.render, forwardRef, Button.defaultProps, useRef(). The mechanical changes happen right here; the hand-off items get a review.
Paste one React source file - a component, a hook module or the entry point. Your browser rewrites what React 19 changes mechanically: ReactDOM.render becomes createRoot (and hydrate hydrateRoot), an untyped forwardRef becomes a component that takes ref as a prop, defaultProps on a function component move into default parameters, useRef() gets null, and propTypes get the React 19 note. It flags what needs a hand: findDOMNode, unmountComponentAtNode, typed forwardRef, legacy context and string refs. Then the review, and the whole file.
The source file free
The scan free
What the scan found
The skill's React 19 table
The React 19 file free
What the page changed itself - render to createRoot(...).render and hydrate to hydrateRoot with the react-dom/client import, an untyped forwardRef to a component that takes ref as a prop, function-component defaultProps to default parameters, useRef() to useRef(null), and the propTypes note. Everything that needs a decision is left as it was.
Component.jsx
The review metered
Pricing as soon as the session is ready...
Sign inThe reply could not be read. Here it is as it came back:
Caveats
Caveats
The page's check of this reply
Saved reviews
How it works - and what it cannot see
The scan reads the JSX itself: comments, strings, template literals and regex literals are masked, every call is matched to its closing bracket, and each rewrite is a set of small edits that never overlap - so a forwardRef around a component whose body also holds a useRef() comes out right on both counts. It follows the skill's table, with one correction from React itself: class components keep static defaultProps in React 19 - only function components lost them - so the page leaves those alone.
It cannot see where a root is kept for unmounting, what a findDOMNode call really measures, or whether the build uses the automatic JSX runtime - that is the review. The page re-scans the rewritten file, so a removed API left behind is flagged rather than trusted, and every component keeps its name. It does not compile, type-check or run the file - run your build and tests on React 19 before you merge.