Skip to content

Update react-native to v0.87.0 - #61

Closed
dfalling wants to merge 1 commit into
mainfrom
renovate/react-native
Closed

Update react-native to v0.87.0#61
dfalling wants to merge 1 commit into
mainfrom
renovate/react-native

Conversation

@dfalling

@dfalling dfalling commented Jul 24, 2026

Copy link
Copy Markdown
Owner

This PR contains the following updates:

Package Change Age Confidence
@react-native/babel-preset (source) 0.86.00.87.0 age confidence
@react-native/jest-preset (source) 0.86.00.87.0 age confidence
@react-native/metro-config (source) 0.86.00.87.0 age confidence
@react-native/new-app-screen (source) 0.86.00.87.0 age confidence
@react-native/typescript-config (source) 0.86.00.87.0 age confidence
react-native (source, changelog) 0.86.00.87.0 age confidence

⚠️ react and react-test-renderer are coupled to this release but are not in this group — they must exactly match the react-native-renderer bundled in react-native, a version Renovate can't read, so they're pinned by hand (mismatch crashes the app at launch). Read the bundled version with grep -rhoE '19\.[0-9.]+' node_modules/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js | sort -u, set both packages in package.json to that exact version, and run bun install.


Release Notes

react/react-native (@​react-native/babel-preset)

v0.87.0: 0.87.0

Compare Source


Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

v0.86.2: 0.86.2

Compare Source

⚠️ React Native 0.86.1 has not been published because of an issue with Maven. ⚠️

Fixed
  • Layout: Fixed display: contents nodes having hasNewLayout set incorrectly (36f69eff0d by j-piasecki)
Android
  • Runtime: Use explicit ReactInstanceManager.mHasStartedDestroyingLock instead of using ReactInstanceManager.mHasStartedDestroying (cdfba520fa by jingjing2222)
  • Runtime: Do not synchronize on java.lang.Boolean. (821045a24f by Yqwed)
Changed

Hermes dSYMS:

Hermes V1 dSYMS:

ReactNativeDependencies dSYMs:

ReactNative Core dSYMs:


You can file issues or pick requests against this release here.


To help you upgrade to this version, you can use the Upgrade Helper ⚛️.


View the whole changelog in the CHANGELOG.md file.

v0.86.1

Compare Source


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate.

@dfalling
dfalling force-pushed the renovate/react-native branch from 949e4f7 to cc089ad Compare July 28, 2026 07:02
@dfalling dfalling changed the title Update react-native to v0.86.1 Update react-native to v0.86.2 Jul 28, 2026
@dfalling
dfalling force-pushed the renovate/react-native branch from cc089ad to 906e40c Compare August 11, 2026 06:25
@dfalling
dfalling force-pushed the renovate/react-native branch from 906e40c to e2a0527 Compare August 12, 2026 06:37
@dfalling dfalling changed the title Update react-native to v0.86.2 Update react-native to v0.87.0 Aug 12, 2026
@dfalling

Copy link
Copy Markdown
Owner Author

Superseded by #73, which combines this with the jest 30 upgrade (#42) — neither lands alone, since jest 30 needs overrides against RN's preset and 0.87 needs an Android toolchain bump that jest is indifferent to. #73 also carries the 0.87 migration this branch was missing: ViewInstance/TextInputInstance refs, Gradle 9.4.1 + AGP 9 opt-outs, and in-range bumps for maplibre-react-native and react-native-screens (the pinned versions don't compile against 0.87).

@dfalling dfalling closed this Aug 17, 2026
@dfalling dfalling mentioned this pull request Aug 17, 2026
1 task
dfalling added a commit that referenced this pull request Aug 17, 2026
Renovate raised react-native 0.87 (#61) and jest 30 (#42) separately, but
neither can land alone: jest 30 needs overrides that only make sense
alongside RN's preset, and RN 0.87 needs the same Android toolchain bump
that jest is indifferent to. Combined so CI can go green on one commit.

react-native 0.87
  - `View`/`TextInput` are function components now, so those names no
    longer double as their instance types. Refs move to the dedicated
    `ViewInstance`/`TextInputInstance` aliases RN 0.87 exports for exactly
    this.
  - AGP 9.2.1 comes with RN 0.87 and wants Gradle >= 9.4.1, so the wrapper
    goes to 9.4.1 — the version RN's own gradle-plugin ships. AGP 9 also
    registers its own `kotlin` extension and rejects the `-dontoptimize`
    default proguard file; both need the opt-outs RN 0.87's template uses.
  - kotlinVersion 2.2.0 matches the Kotlin the RN gradle-plugin is built
    with, which is what lets Gradle 9.4's bundled stdlib be read at all.
  - maplibre-react-native and react-native-screens are moved to their
    latest in-range releases; the pinned ones fail to compile against
    0.87 (`getReactTag()` and a `Bitmap?` nullability error).
  - react/react-test-renderer stay at 19.2.3 — still the renderer version
    bundled in react-native, checked per renovate.json's instructions.
  - view-shot 5.1.1 has no 0.87 support yet and is typechecked from source
    via its "react-native" export condition, so tsc reads its published
    declarations instead. Metro still bundles from src/, so runtime is
    unchanged.

jest 30
  - @react-native/jest-preset 0.87 still asks for jest-environment-node,
    babel-jest and @jest/create-cache-key-function at ^29.7.0. Its
    testEnvironment extends whichever jest-environment-node sits next to
    the preset, so a v29 environment met jest-runtime 30 and every suite
    died on `clearMocksOnScope is not a function`. Overridden to v30.

Babel 8 (#55) is not included: @react-native/babel-preset's plugin chain
asserts `^7.0.0-0`, so under @babel/core 8 it throws before any suite runs.
Metro, babel-jest and the preset each vendor their own @babel/core 7, so a
top-level v8 only shadows them — held at v7 in renovate.json until RN moves.
That also pins @babel/plugin-transform-export-namespace-from, which
babel.config.js applies directly but only had a transitive install.

The Gradle ceiling in renovate.json moves 9.4 -> 9.7 for the same reason it
existed: Gradle 9.7 bundles Kotlin 2.4.0 and RN's 2.2.0 plugin reads
metadata only to 2.3.0. 9.5.1 and 9.6.1 were verified to configure cleanly.

Verified: tsc, biome, 51 tests, clean `assembleDebug`, and a
`--dev false` release bundle.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
@dfalling
dfalling deleted the renovate/react-native branch August 18, 2026 06:15
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.

2 participants