Skip to content

chore: update to React Native 0.87 and Re.Pack 5.4 canary - #175

Open
dannyhw wants to merge 3 commits into
mainfrom
chore/update-rn-0.87
Open

dannyhw wants to merge 3 commits into
mainfrom
chore/update-rn-0.87

Conversation

@dannyhw

@dannyhw dannyhw commented Sep 22, 2026

Copy link
Copy Markdown
Collaborator

Summary

Updates the workspace to React Native 0.87.1 and the Re.Pack 5.4 canary, plus every other dependency that can move while staying compatible with the RN toolchain.

Core toolchain

  • react-native 0.86.2 → 0.87.1, all @react-native/* packages (babel-preset, eslint-config, typescript-config, jest-preset) → 0.87.1
  • @callstack/repack + repack-plugin-reanimated → 5.4.0-canary-20260831210904
  • @rspack/core 2.1.7 → 2.2.1, @module-federation/enhanced + error-codes 2.8.1 → 2.9.0

Libraries

  • react-native-reanimated 4.6.0 + react-native-worklets 0.12.1 (reanimated 4.6 requires worklets 0.12.x and supports RN 0.87)
  • react-native-gesture-handler 3.2.1, react-native-screens 4.27.0, react-native-safe-area-context 5.9.1, @shopify/react-native-skia 2.11.1
  • victory-native 41.26.0 → 42.0.1 — the only breaking change is a raised Skia/reanimated floor; no API change to CartesianChart/Line
  • @legendapp/list 3.3.9, @react-navigation patch bumps, typescript-eslint ^8.69.0, @rnx-kit/align-deps ^4.0.6

Native (RN 0.87 template, android-only per the official upgrade diff)

  • compileSdk/buildTools 36 → 37, Kotlin 2.1.20 → 2.2.0, Gradle 9.3.1 → 9.4.1
  • proguard-android-optimize.txt, edgeToEdgeEnabled=true (new template default; the app already uses react-native-edge-to-edge), AGP 9 opt-outs
  • Podfile.lock regenerated for the 0.87.1 pods

Fixes

  • Extended the reanimated Jest mock in packages/host/jest.setup.js with a default export and createAnimatedComponent — gesture-handler 3.2's v3 GestureDetector accesses Reanimated?.default.createAnimatedComponent(...) at import time
  • Synced sdk/lib/dependencies.json and devDependencies.json (the MF shared-singleton manifest / align-deps preset) with the catalog; the dev file had drifted and still pinned repack 5.2.5
  • Dropped the minimumReleaseAgeExclude entries — all listed versions are now past the release-age gate
  • Updated version tables in README and the MF demo guide

Deliberately not updated

  • eslint 9 (not 10) and Babel 7 (not 8) — not yet supported by the RN toolchain
  • Jest 29 — RN 0.87's jest-preset still depends on jest 29 internals
  • TypeScript ^6.0.3 — typescript-eslint caps at <6.1.0

Test plan

  • pnpm typecheck, pnpm lint, pnpm test all pass
  • pnpm peers check clean, rnx-align-deps clean, pnpm format:check clean
  • pod install completes against RN 0.87.1

- react-native 0.86.2 -> 0.87.1 with all @react-native/* packages
- @callstack/repack + repack-plugin-reanimated -> 5.4.0-canary-20260831210904
- @rspack/core 2.2.1, @module-federation/enhanced + error-codes 2.9.0
- reanimated 4.6.0 + worklets 0.12.1, gesture-handler 3.2.1,
  screens 4.27.0, safe-area-context 5.9.1, skia 2.11.1,
  victory-native 42.0.1, @legendapp/list 3.3.9, react-navigation patches,
  typescript-eslint ^8.69.0, align-deps ^4.0.6
- apply RN 0.87 android template changes: compileSdk/buildTools 37,
  Kotlin 2.2.0, Gradle 9.4.1, proguard-android-optimize,
  edgeToEdgeEnabled=true, AGP 9 opt-outs
- regenerate Podfile.lock for RN 0.87 pods
- extend reanimated jest mock with default export and
  createAnimatedComponent (required by gesture-handler 3.2 v3
  GestureDetector at import time)
- sync sdk dependencies.json/devDependencies.json with catalog versions
- drop stale minimumReleaseAgeExclude entries
- update version tables in README and MF demo guide
- @callstack/repack + repack-plugin-reanimated -> 5.4.0-canary-20260913172854
- @rspack/core 2.2.6, @module-federation/enhanced + error-codes 2.9.1
- reanimated 4.7.0 + worklets 0.13.0, gesture-handler 3.3.0,
  screens 4.28.0, safe-area-context 5.10.0, skia 2.12.0
- @react-navigation/native 7.4.1, native-stack 7.19.2, @legendapp/list 3.4.0
- patch bumps: edge-to-edge, bootsplash, vector-icons, typescript-eslint,
  align-deps, prettier, @prettier/plugin-oxc
- bump peer catalog ranges (worklets 0.13 is outside ^0.12)
- sync sdk dependencies.json/devDependencies.json with catalog versions
- regenerate Podfile.lock
- update version tables in README and MF demo guide
- update React-Core-prebuilt pod lock entry from 0.86.2 to 0.87.1; the
  stale entry kept the old artifact layout without Headers/module.modulemap
- patch react-native-bottom-tabs with the RCTConversions.h and
  RCTImagePrimitivesConversions.h include guards merged upstream in
  callstack/react-native-bottom-tabs#571 and #575 (unreleased as of 1.4.0)
- set recycleItems={false} explicitly on LegendList (warns since 3.4.0);
  keeps existing behavior since rows own per-asset animation state

This branch has not been deployed

No deployments
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