Backport React 19 root error callbacks - #31
Draft
christopher-buss wants to merge 5 commits into
Draft
Conversation
Expose configurable caught, uncaught, and recoverable handlers on ReactRoblox roots and route Fiber errors through the owning root. Preserve React 17 internal renderer throw behavior while public roots use the React 19 global reporting model. Port the applicable upstream callback tests and document the pinned source ledger and capability exclusions. Co-authored-by: Codex <noreply@openai.com>
Pin stable source links to the annotated v19.2.0 tag commit and distinguish it from its scheduler-version parent. Co-authored-by: Codex <noreply@openai.com>
christopher-buss
marked this pull request as draft
August 31, 2026 21:23
Keep React 17's synchronous internal-renderer console and throw contract while public roots retain React 19 error callbacks. Document the upstream deviations and preserve callback error identity. Co-authored-by: Codex <noreply@openai.com>
Record that React 17 performs hydration fallback at the retry callers rather than inside the modern recovery helper. Co-authored-by: Codex <noreply@openai.com>
Store React 19 recovery bookkeeping on the existing private module table and avoid extra WorkLoop imports so Roblox Studio can load the reconciler. Co-authored-by: Codex <noreply@openai.com>
christopher-buss
force-pushed
the
backport-react-19-root-error-callbacks
branch
2 times, most recently
from
September 6, 2026 17:20
2c1efee to
7958fe6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
onCaughtError,onUncaughtError, andonRecoverableErroroptions toReactRoblox.createRootreportGlobalErrorsubstrate and preserve legacy synchronous throwing for internal React 17 renderersUpstream sources
Pinned to the React 19.2.0 annotated tag commit (
ae74234eae6ebd62f19190731278e20bc1c37d51) and the error-reporting series:6786563f3cbbc9b16d5a8187207b5bd904386e53(#28627)a0537160771bafae90c6fd3154eeead2f2c903e7(#28641)e10a7b5cd541882a78ff659147c1a0294413ccb0(#28665)6090cab099a8f7f373e04c7eb2937425a8f80f80(#28736)The relevant source trees are identical between the tag commit and its scheduler-version parent (
861811347b8fa936b4a114fc022db9b8253b3d86). The port excludes hydration, Fizz/server rendering, DOM events, View Transitions, and React 19actqueue behavior, which do not have corresponding React-Luau capabilities. Roblox global reporting uses a deferred thread error because the host has no browserreportError/errorevent.Verification
7958fe635c98a4afa8f5147584183c7f51302776d8cce65c650c94414c59adf06c04790021123a4cReactRobloxConfigurableErrorLogging6/6 andSetStateInConstructor21/21; 27/27 total with 0 failures and 0 skippedF6F70094, projectD93D6C7D, config803C3D1E, JestF361BCAAstylua --check modules bin WorkspaceStaticselene modules WorkspaceStatic(0 errors/warnings)luau-compile --only-parse modules/react-reconciler/src/ReactFiberWorkLoop.new.luaR188git diff --checkGenerated with Codex.