Skip to content

fix(mobile): match react version to react-native 0.85.3 vendored renderer (19.2.3) - #1

Closed
KrzysztofMoch wants to merge 1 commit into
mainfrom
t3code/fix-mobile-react-mismatch
Closed

KrzysztofMoch wants to merge 1 commit into
mainfrom
t3code/fix-mobile-react-mismatch

Conversation

@KrzysztofMoch

Copy link
Copy Markdown
Owner

Problem

pingdotgg#4643 (commit 108e01746) bumped react/react-dom from 19.2.3 to 19.2.6 in apps/mobile. react-native@0.85.3 vendors a renderer built against react 19.2.3, and the legacy (Paper) renderer performs a module-scope exact-version check against React.version (ReactNativeRenderer-prod.js, ~line 10922). This app evaluates the Paper renderer during initial bundle evaluation (via the lazy RendererProxy bindings), so every fresh native build crashes at startup (signal 6), before the splash screen resolves:

*** Terminating app due to uncaught exception 'RCTFatalException: Unhandled JS
Exception: [runtime not ready]: Error: Incompatible React versions: The "react" and
"react-native-renderer" packages must have the exact same version. Instead got:
  - react:                  19.2.6
  - react-native-renderer:  19.2.3

This also affects any OTA bundle built from current main — the fingerprint runtime policy won't save existing binaries from a JS-only mismatch, so an OTA push would crash already-shipped apps.

Fix

Revert react and react-dom to 19.2.3 in apps/mobile/package.json (exact pre-pingdotgg#4643 versions) and update pnpm-lock.yaml. No react-native 0.85.x patch release with a 19.2.6 renderer exists (0.85.3 is the latest), so pinning react back is the only correct fix. Patching the renderer version string is not an option — the exact-match check exists because ReactSharedInternals may differ between patch releases.

apps/web intentionally stays on react 19.2.6 (the workspace resolves react per app; the lockfile still resolves 19.2.6 there).

Verification

  • react resolved from apps/mobile is 19.2.3, matching the only version string in the vendored ReactNativeRenderer-prod.js.
  • Mobile tsc --noEmit and repo lint pass with no new issues.
  • Built APP_VARIANT=production + Release for the iOS simulator, launched it: app gets past startup and renders the Threads screen; no Incompatible React versions exception in simulator logs.

Note (pre-existing, unrelated): a plain expo run:ios --configuration Release targeting a simulator fails because the vendored GhosttyKit.xcframework simulator slice is arm64-only while Release builds all archs (arm64 x86_64); verification used ONLY_ACTIVE_ARCH=YES. Device/EAS Release and Debug simulator builds are unaffected.

…erer (19.2.3)

Commit 108e017 (pingdotgg#4643) bumped react/react-dom to 19.2.6 in apps/mobile,
but react-native 0.85.3 vendors a renderer built against react 19.2.3. The
Paper renderer performs a module-scope exact-version check against
React.version and throws at startup, crashing every fresh native build.

Revert react and react-dom to 19.2.3 for the mobile app only; apps/web
stays on 19.2.6.
@KrzysztofMoch

Copy link
Copy Markdown
Owner Author

Closing — opened without explicit request.

@KrzysztofMoch
KrzysztofMoch deleted the t3code/fix-mobile-react-mismatch branch July 28, 2026 08:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant