Description
react-native@0.85.3 declares this peer dependency:
That allows package managers to install react@19.2.6, but the embedded React Native renderer in the same package appears to require react@19.2.3 exactly at runtime.
In Libraries/Renderer/implementations/ReactNativeRenderer-dev.js from react-native@0.85.3:
var isomorphicReactPackageVersion = React.version;
if ("19.2.3" !== isomorphicReactPackageVersion)
throw Error(
'Incompatible React versions: The "react" and "react-native-renderer" packages must have the exact same version. Instead got:\n - react: ' +
(isomorphicReactPackageVersion +
"\n - react-native-renderer: 19.2.3\nLearn more: https://react.dev/warnings/version-mismatch")
);
The renderer internals also report:
version: "19.2.3",
rendererPackageName: "react-native-renderer",
reconcilerVersion: "19.2.3"
So the install-time contract says react@19.2.6 is acceptable, while the runtime contract rejects it.
Steps to reproduce
- Install
react-native@0.85.3.
- Install
react@19.2.6 and react-dom@19.2.6.
- Launch a React Native app.
Expected behavior
The package metadata should prevent installing a React version that the embedded renderer will reject at runtime, or tooling/docs should make this exact-version requirement explicit enough to catch before app launch.
For example, one of these would avoid the mismatch:
- narrow
react-native@0.85.3's peerDependencies.react to the exact renderer-compatible version, 19.2.3, or
- add install/doctor guidance that
react must exactly match the embedded react-native-renderer version, not just satisfy the semver peer range.
Actual behavior
react@19.2.6 satisfies ^19.2.3, but the app fails at runtime because the embedded react-native-renderer is 19.2.3.
Environment
Observed from package contents:
{
"reactNativeVersion": "0.85.3",
"reactPeer": "^19.2.3",
"rendererCheck": "19.2.3",
"rendererVersion": "19.2.3"
}
This came up in a pnpm monorepo where web packages resolve react@19.2.6 and an Expo/RN mobile app correctly needs react@19.2.3. The monorepo context made the mismatch more visible, but the underlying issue seems to be that the package metadata permits a React patch version that the renderer rejects.
Description
react-native@0.85.3declares this peer dependency:{ "react": "^19.2.3" }That allows package managers to install
react@19.2.6, but the embedded React Native renderer in the same package appears to requirereact@19.2.3exactly at runtime.In
Libraries/Renderer/implementations/ReactNativeRenderer-dev.jsfromreact-native@0.85.3:The renderer internals also report:
So the install-time contract says
react@19.2.6is acceptable, while the runtime contract rejects it.Steps to reproduce
react-native@0.85.3.react@19.2.6andreact-dom@19.2.6.Expected behavior
The package metadata should prevent installing a React version that the embedded renderer will reject at runtime, or tooling/docs should make this exact-version requirement explicit enough to catch before app launch.
For example, one of these would avoid the mismatch:
react-native@0.85.3'speerDependencies.reactto the exact renderer-compatible version,19.2.3, orreactmust exactly match the embeddedreact-native-rendererversion, not just satisfy the semver peer range.Actual behavior
react@19.2.6satisfies^19.2.3, but the app fails at runtime because the embeddedreact-native-rendereris19.2.3.Environment
Observed from package contents:
{ "reactNativeVersion": "0.85.3", "reactPeer": "^19.2.3", "rendererCheck": "19.2.3", "rendererVersion": "19.2.3" }This came up in a pnpm monorepo where web packages resolve
react@19.2.6and an Expo/RN mobile app correctly needsreact@19.2.3. The monorepo context made the mismatch more visible, but the underlying issue seems to be that the package metadata permits a React patch version that the renderer rejects.