Skip to content

chore: React Native 0.88, Re.Pack 5.4.3 canary, react-native-skia rename - #178

Draft
dannyhw wants to merge 2 commits into
mainfrom
chore/rn-0.88-repack-canary-skia-rename
Draft

dannyhw wants to merge 2 commits into
mainfrom
chore/rn-0.88-repack-canary-skia-rename

Conversation

@dannyhw

@dannyhw dannyhw commented Oct 22, 2026 •

Copy link
Copy Markdown
Collaborator

What

Upgrades the showcase to React Native 0.88 and Re.Pack 5.4.3-canary-20261022172059, renames Skia to the new react-native-skia package, moves to victory-native 43, and drops react-native-edge-to-edge now that RN owns edge-to-edge.

Everything was verified end to end on the iOS Simulator and an Android emulator (details below).

Core

React Native 0.87.1 → 0.88.0
React 19.2.8 → 19.3.1
@react-native/* 0.87.1 → 0.88.0
Re.Pack + repack-plugin-reanimated 5.4.2 → 5.4.3-canary-20261022172059
@rspack/core 2.2.6 → 2.2.9
@module-federation/enhanced / error-codes 2.9.1 → 2.9.2

The canary sits on ...172059 specifically because it carries the Fastify FSTDEP023 fix: @callstack/repack-dev-server now passes disableRequestLogging through a LogController instead of the deprecated top-level option. Verified against a live dev server — the banner reports 5.4.3-canary-20261022172059, powered by Rspack and no [FSTDEP023] deprecation is emitted, while non-request logs (Server listening…, app console forwarding) still flow. Reproduced the warning against the same Fastify 5.12.7 using the old top-level shape, so the negative result is meaningful rather than a suppressed warning.

Skia rename + charts

  • @shopify/react-native-skia → react-native-skia. Same code, new package name (pod name changes too, so Podfile.lock is refreshed).
  • Skia is pinned to 2.15.1, not 3.x: victory-native 43 declares react-native-skia >=2.15.1 <3.0.0, so 3.7.x is still unsupported by the charting layer. Worth revisiting when victory-native ships Skia 3 support.
  • victory-native 42.0.1 → 43.0.1. 43 builds paths with Skia.PathBuilder, which lets us delete the SkPath.addPath() deprecation-warning shim that 41/42 needed.

Edge-to-edge

react-native-edge-to-edge is removed and AppTheme goes back to Theme.AppCompat.DayNight.NoActionBar (the RN 0.88 template value, and the same base as Theme.BootSplash). edgeToEdgeEnabled=true stays in gradle.properties — RN core handles the insets, and content draws behind both bars on device.

Fix: invisible chart labels on Android

Found while testing this branch: the price chart drew fine on Android but its y-axis labels were missing (they rendered on iOS). Root cause is in app code, not the bump — matchFont() defaults to the family "System", which Skia's Android font manager does not expose (listFontFamilies() returns sans-serif, arial, …), so it resolves a glyph-less typeface (measureText('$82.1k').width === 0) and victory-native measures a zero-height label and skips it. packages/trading/src/screens/AssetDetailsScreen.tsx:130 now asks for sans-serif on Android and keeps System elsewhere. The old @shopify/react-native-skia@2.14 matchFont JS is byte-identical, so this was a latent bug rather than a regression.

Smaller changes

  • Deleted patches/react-native-bottom-tabs@1.4.0.patch — obsolete against RN 0.88.
  • Deleted the @babel/plugin-syntax-typescript catalog entry; the canary declares it as a dependency now.
  • Added @react-native/metro-config to the catalog and packages — without it align-deps pulls a second react-native peer copy and instantiates it twice.
  • Aliased expo-font to false in packages/auth/rspack.config.ts, matching the host: vector-icons 14 probes it behind a try/catch on web only, and the native font is always bundled.
  • allowBuilds / minimumReleaseAgeExclude updated for the renamed Skia package and the new Re.Pack + bottom-tabs versions.

Deliberately not updated

  • Reanimated 4.7.1 / worklets 0.13.0 are already the newest stable — only nightly builds are newer, so there was nothing further to move.
  • Babel stays on 7.x (@react-native/babel-preset peers ^7), Jest on ^29, ESLint on ^9.39.5, TypeScript on ^6.0.3 (typescript-eslint caps at <6.1).

Verification

pnpm install, pnpm peers check (clean), pnpm -r typecheck, pnpm -r lint, pnpm -r test, pnpm format:check, pnpm check-deps all pass. Production rspack bundles build for host + trading + wallet + auth on both iOS and Android. bundle exec pod install is clean, xcodebuild Debug builds, and ./gradlew assembleDebug succeeds including the renamed :react-native-skia module.

Runtime, on an iPhone 17 simulator and a Pixel emulator, through the full demo: auth sign-in → live Markets prices → asset details (Skia chart with axis labels on both platforms) → trade bottom sheet → wallet holdings → account → sign out → sign back in. All four dev servers (host 8081, trading 9001, wallet 9002, auth 9003) served /{platform}/mf-manifest.json for both platforms, the host dev bundle built to ~11.6 MB for iOS and Android, and every container reported Compiled ios/Compiled android.

Dev-loop check on the new canary: editing a screen in the auth container triggered a watch rebuild in 0.6s/0.7s, the rebuilt __federation_expose_*.chunk.bundle served the new code, and the running app picked it up. HMR sockets stayed connected to the host, auth and trading servers concurrently, and SIGINT shuts each server down in ~100ms.

Known upstream noise (pre-existing, unchanged by this PR)

  • @gorhom/bottom-sheet passes a deps array to useAnimatedStyle, so Reanimated logs Dependencies should only be used on the web… repeatedly while the sheet is mounted.
  • Re.Pack's canary added a plugin check, so the auth dev server logs a ReanimatedPlugin advisory because auth lists react-native-reanimated in dependencies (trading/wallet use peerDependencies, which is why only auth warns). Auth has no animations, so it is harmless, and auth never configured the plugin on main either — not a regression. Tidying that dep is out of scope here.
  • Could not find generated setter for class com.reactnative.skia.Skia*ViewManager on Android — benign, from the new package id.
  • On shutdown, @rspack/core's Node bindings print ObjectRef is not unref, it considered as a memory leak — cosmetic, does not delay exit.
  • RN 0.88 prebuilt-core pitfall (Re.Pack-unrelated, hit locally): after a fresh pod install, a Debug build fails to link with Undefined symbols: facebook::react::Sealable::Sealable(), and if an stale bundle is reused the app then dies at launch with Symbol not found: ...hermes::cdp::CDPDebugAPI::addConsoleMessage.... pod install stages the Release React.xcframework and hermesvm, but replace-rncore-version.js / replace_hermes_version.js skip their swap when Pods/<pod>/.last_build_configuration is absent, because they assume the staged artifact is Debug. Workaround: write Release into Pods/React-Core-prebuilt/.last_build_configuration and Pods/hermes-engine/.last_build_configuration, then rebuild — both print Replacing … / Done replacing hermes-engine and the build succeeds. Worth reporting upstream.
  • pod install intermittently dies with CocoaPods ArgumentError - pathname contains null byte (known pnpm-monorepo flake, cocoapods#12866); re-running succeeds.

Core upgrades:
- React Native 0.87.1 -> 0.88.0, React 19.2.8 -> 19.3.1 and the
  matching @react-native/* toolchain packages
- Re.Pack + repack-plugin-reanimated 5.4.2 -> 5.4.3-canary-20261022091009,
  rspack 2.2.6 -> 2.2.9, Module Federation 2.9.1 -> 2.9.2

Skia rename + charts:
- @shopify/react-native-skia -> react-native-skia 2.15.1 (pinned below 3.x,
  which victory-native 43 does not support yet)
- victory-native 42.0.1 -> 43.0.1

Edge-to-edge:
- drop react-native-edge-to-edge; RN 0.88 owns edge-to-edge via
  edgeToEdgeEnabled, so AppTheme goes back to the AppCompat parent

Fixes / chores:
- resolve an Android font family in matchFont() so victory-native's chart
  axis labels are no longer invisible on Android
- delete the react-native-bottom-tabs 1.4.0 patch and the
  @babel/plugin-syntax-typescript workaround, both obsolete now
- alias expo-font to false in the auth container (vector-icons' web-only probe)
- add @react-native/metro-config so align-deps keeps one react-native peer
- bump the remaining compatible catalog deps (screens, gesture-handler,
  reanimated, safe-area-context, bottom-tabs, @legendapp/list,
  vector-icons 14, navigation, align-deps 5, bootsplash)
Picks up the Fastify FSTDEP023 fix (dev-server now passes
disableRequestLogging through LogController instead of the deprecated
top-level option). Verified no deprecation warning on a live dev server.

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