Skip to content

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

Merged
dannyhw merged 2 commits into
mainfrom
chore/update-rn-0.87
Oct 9, 2026
Merged

dannyhw merged 2 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

dannyhw pushed a commit that referenced this pull request Oct 9, 2026
Updates Re.Pack from the 5.4 canary to the stable 5.4.2 release, on top
of #175. It also fixes the Release builds and gets the app building and
launching on Xcode 27.

Re.Pack 5.4.2
- Bumps @callstack/repack and @callstack/repack-plugin-reanimated to
5.4.2 in the catalog, host, sdk preset and docs. They're added to
minimumReleaseAgeExclude until they clear the release-age gate.
- Switches react-native.config.js to @callstack/repack/commands, because
/commands/rspack is deprecated.
- Adds @react-native/js-polyfills and @babel/plugin-syntax-typescript as
direct devDependencies. Before, they only resolved through pnpm's
NODE_PATH, so bundling from Xcode and Gradle failed.
- @babel/plugin-syntax-typescript is a workaround until
callstack/repack#1483 is released; there's a TODO next to it.

Release build fixes
- iOS: the bundle build phase now uses the community CLI, so Re.Pack
bundles instead of RN's Metro-only scripts/bundle.js.
- Android: hermesc is now found through hermes-compiler via
react-native, because pnpm doesn't link it into the app's node_modules.
The path includes .exe on Windows.

Xcode 27 / iOS 27
- Raises pod deployment targets that Xcode 27 rejects (SDWebImage,
AsyncStorage).
- Adopts the UIScene lifecycle. Without it, the app crashes on launch
when built with the iOS 27 SDK.

Test plan

- pnpm typecheck, pnpm lint, pnpm test, pnpm peers check and pnpm
format:check pass.
- pnpm pods then build and run:
  - iOS Debug / Android Debug, with pnpm start running the dev servers.
- iOS Release / Android Release, with production builds of the mini apps
(react-native bundle --dev false) served on ports 9001–9003.
- In each of the 4 builds, from a clean install, check:
  - sign in as the demo user
  - Trading list with live prices
  - BTC detail with chart, then open and close the trade sheet
  - Wallet portfolio
  - Account, then sign out
@dannyhw dannyhw changed the title chore: update to React Native 0.87 and Re.Pack 5.4 canary chore: update to React Native 0.87 and Re.Pack 5.4.2 Oct 9, 2026
dannyhw and others added 2 commits October 9, 2026 16:49
- react-native 0.86.2 -> 0.87.1 with all @react-native/* packages
- @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,
  victory-native 42.0.1, @legendapp/list 3.4.0,
  @react-navigation/native 7.4.1, native-stack 7.19.2
- 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)
- 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, including the
  React-Core-prebuilt entry; the stale 0.86.2 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
- extend reanimated jest mock with default export and
  createAnimatedComponent (required by gesture-handler 3.x
  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
Updates Re.Pack from the 5.4 canary to the stable 5.4.2 release, on top
of #175. It also fixes the Release builds and gets the app building and
launching on Xcode 27.

Re.Pack 5.4.2
- Bumps @callstack/repack and @callstack/repack-plugin-reanimated to
5.4.2 in the catalog, host, sdk preset and docs. They're added to
minimumReleaseAgeExclude until they clear the release-age gate.
- Switches react-native.config.js to @callstack/repack/commands, because
/commands/rspack is deprecated.
- Adds @react-native/js-polyfills and @babel/plugin-syntax-typescript as
direct devDependencies. Before, they only resolved through pnpm's
NODE_PATH, so bundling from Xcode and Gradle failed.
- @babel/plugin-syntax-typescript is a workaround until
callstack/repack#1483 is released; there's a TODO next to it.

Release build fixes
- iOS: the bundle build phase now uses the community CLI, so Re.Pack
bundles instead of RN's Metro-only scripts/bundle.js.
- Android: hermesc is now found through hermes-compiler via
react-native, because pnpm doesn't link it into the app's node_modules.
The path includes .exe on Windows.

Xcode 27 / iOS 27
- Raises pod deployment targets that Xcode 27 rejects (SDWebImage,
AsyncStorage).
- Adopts the UIScene lifecycle. Without it, the app crashes on launch
when built with the iOS 27 SDK.

Test plan

- pnpm typecheck, pnpm lint, pnpm test, pnpm peers check and pnpm
format:check pass.
- pnpm pods then build and run:
  - iOS Debug / Android Debug, with pnpm start running the dev servers.
- iOS Release / Android Release, with production builds of the mini apps
(react-native bundle --dev false) served on ports 9001–9003.
- In each of the 4 builds, from a clean install, check:
  - sign in as the demo user
  - Trading list with live prices
  - BTC detail with chart, then open and close the trade sheet
  - Wallet portfolio
  - Account, then sign out
@dannyhw
dannyhw force-pushed the chore/update-rn-0.87 branch from b6b4fc0 to d7ae821 Compare October 9, 2026 15:49
@dannyhw
dannyhw merged commit b94be55 into main Oct 9, 2026
5 checks passed
@dannyhw
dannyhw deleted the chore/update-rn-0.87 branch October 9, 2026 16:00
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