React Native Roadmap 2026-W25

Week of June 15–June 21, 2026

Items This Week

#TitleLabelLink
1React Native 0.86 β€” Edge-to-Edge & React Foundation move🟦 RNRead
2Introducing EAS Observe β€” Performance monitoring for Expo apps🟧 EXPORead
3iOS Widgets & Live Activities stable in Expo SDK 56🟧 EXPORead
4react-native-livechart β€” GPU-accelerated charts with Skia🟦 RNRead
5EAS Workflows β€” Automate iOS internal device registration🟧 EXPORead
6React Compiler in Rust merged (React Status #479)βš›οΈ REACTRead

5-Day Action Plan

Β 


🟦 Chunk 1 β€” Upgrade to React Native 0.86 & Remove react-native-edge-to-edge

Goal: Eliminate the community polyfill react-native-edge-to-edge now that RN 0.86 ships native edge-to-edge support on Android 15+, reducing bundle size and ensuring long-term maintenance alignment.

Scope:

  • Bump react-native to 0.86.x in package.json
  • Remove react-native-edge-to-edge and its config plugin from app.json / app.config.js
  • Verify KeyboardAvoidingView, Dimensions, and StatusBar behave correctly with and without a modal open
  • Run the app on an Android 15 emulator and confirm no content sits behind the gesture bar
  • Test dark/light mode toggle via DevTools (cmd+shift+P β†’ appearance)

Out of scope: Migration to the New Architecture, changes to navigation libraries, or iOS-specific safe-area work.

Dependencies: None β€” RN 0.86 has zero breaking changes (second consecutive release).

Acceptance criteria:

  • App builds successfully on Android 15 (API 35) without layout shifts
  • No reference to react-native-edge-to-edge remains in package.json or config files
  • StatusBar updates correctly while a Modal is open
  • KeyboardAvoidingView lifts content above the software keyboard without overlap

Estimated effort: S

Β 

Copy/paste this prompt: Implement the following React Native chunk for your mobile app: Upgrade `react-native` to version 0.86.x in `package.json`. Remove the `react-native-edge-to-edge` package and its config plugin from `app.json`/`app.config.js`. Then verify the following: (1) run on an Android 15 emulator and confirm no content hides behind the system bars; (2) open a `Modal` and check `StatusBar` visibility updates correctly; (3) verify `KeyboardAvoidingView` behavior with the software keyboard open; (4) check `Dimensions` returns correct window sizes. Files to modify: `package.json`, `app.json` or `app.config.js`. Acceptance checklist: [ ] `react-native` is at ^0.86.0, [ ] `react-native-edge-to-edge` is removed from all config files, [ ] Android 15 layout passes visual QA, [ ] No JS bridge errors on startup.

🟧 Chunk 2 β€” Integrate EAS Observe for Real-Time Performance Monitoring

Goal: Add Expo Observe to the production app so the team can track crash-free sessions, startup time, and JS thread performance without writing custom telemetry.

Scope:

  • Sign up for the EAS Observe open beta at expo.dev/blog/introducing-observe
  • Install the expo-observe SDK package following the beta integration guide
  • Initialize Observe in app/_layout.tsx (or the app entry point) before the root navigator renders
  • Configure a basic dashboard view: startup time, crash-free rate, and JS thread frame drops
  • Trigger a test crash in development to verify the event appears in the Observe dashboard

Out of scope: Custom event instrumentation, A/B testing integration, or advanced alerting rules.

Dependencies: Expo SDK 56 project; EAS account with Observe beta access.

Acceptance criteria:

  • Observe initializes without errors on both iOS and Android
  • A test session appears in the Expo dashboard within 60 seconds of launch
  • Startup time metric is populated after a cold launch
  • No measurable increase in JS bundle size (< 5 KB overhead)

Estimated effort: S

Β 

Copy/paste this prompt: Implement the following React Native chunk for your mobile app: Integrate EAS Observe (https://expo.dev/blog/introducing-observe) into an Expo SDK 56 project. Steps: (1) follow the beta sign-up and install instructions from the Expo Observe documentation; (2) initialize the Observe client in `app/_layout.tsx` before the root navigator renders; (3) add the required config plugin to `app.json`; (4) run an EAS development build on both iOS and Android; (5) trigger a deliberate JS error (e.g. `throw new Error("test")` in a useEffect) to verify it surfaces in the Observe dashboard. Files to create/modify: `app/_layout.tsx`, `app.json`, `package.json`. Acceptance checklist: [ ] `expo-observe` initializes without uncaught errors, [ ] session appears in the Expo dashboard, [ ] crash event is captured and visible, [ ] startup time metric is shown after a cold launch.

🟧 Chunk 3 β€” Build an iOS Home Screen Widget with expo-widgets (SDK 56)

Goal: Ship a home screen widget that shows a key app metric (e.g. today's streak, account balance, or latest notification count), demonstrating the now-stable expo-widgets API with no SwiftUI required.

Scope:

  • Upgrade to Expo SDK 56 if not already done
  • Add expo-widgets to the project and configure its config plugin in app.json
  • Create a widgets/TodayWidget.tsx component using the Widget and WidgetText primitives from expo-widgets
  • Define a WidgetConfiguration with a single timeline entry fetched from AsyncStorage or a lightweight API endpoint
  • Run an EAS Development Build and add the widget to the iOS home screen for QA

Out of scope: Android widgets, Lock Screen Live Activities, interactive widget buttons (iOS 17+), or Dynamic Island integration.

Dependencies: Expo SDK 56 project; EAS Development Build (widgets do not work in Expo Go).

Acceptance criteria:

  • Widget appears in the iOS widget picker under the app's name
  • Widget displays correct data from the app (not placeholder text)
  • Tapping the widget deep-links into the correct screen inside the app
  • No manual SwiftUI or Xcode edits required

Estimated effort: M

Β 

Copy/paste this prompt: Implement the following React Native chunk for your mobile app: Add an iOS home screen widget using the stable `expo-widgets` package from Expo SDK 56 (https://expo.dev/blog/ios-widgets-and-live-activities-in-expo). Steps: (1) ensure the project uses Expo SDK 56 β€” run `npx expo install expo-widgets`; (2) add the `expo-widgets` config plugin to `app.json` under `plugins`; (3) create `widgets/TodayWidget.tsx` that renders a small widget showing a stat (e.g. "Today's count: 42") using `` and `` primitives; (4) define `widgetConfigurations` in `app.json` pointing to this component; (5) run `eas build --profile development --platform ios`; (6) install the build, long-press the home screen and add the widget. Files to create/modify: `widgets/TodayWidget.tsx`, `app.json`, `package.json`. Acceptance checklist: [ ] Widget appears in iOS widget gallery, [ ] Widget renders correct data, [ ] Tap opens the correct app screen, [ ] Build succeeds with no manual Xcode edits.

🟦 Chunk 4 β€” Add react-native-livechart for Interactive Data Visualization

Goal: Replace a static chart (or add a first chart) with react-native-livechart to deliver smooth, GPU-accelerated line or candlestick charts driven by SharedValue β€” ensuring animations run entirely on the UI thread.

Scope:

  • Install react-native-livechart and its peer dependencies (@shopify/react-native-skia, react-native-reanimated@3, react-native-gesture-handler)
  • Create a components/PriceChart.tsx component rendering <LiveChart> in line mode
  • Wire a SharedValue<{ timestamp: number; value: number }[]> to the chart using a static JSON mock
  • Enable crosshair scrubbing and display the selected value in an Animated.Text label above the chart
  • Verify 60 fps rendering on a mid-range Android device using RN DevTools profiler

Out of scope: Real-time WebSocket data feed, degen/momentum mode, multi-series charts, or native module linking for Skia on RN < 0.74.

Dependencies: React Native 0.74+ (Skia compatibility); Reanimated 3.x already installed.

Acceptance criteria:

  • Chart renders without JS thread frame drops (DevTools profiler shows consistent 60 fps)
  • Scrubbing with a finger updates the value label in real time
  • No JS bridge traffic during animation (confirmed via Reanimated useSharedValue)
  • Component builds cleanly on both iOS and Android

Estimated effort: M

Β 

Copy/paste this prompt: Implement the following React Native chunk for your mobile app: Integrate `react-native-livechart` (https://github.com/brandtnewlabs/react-native-livechart) for interactive GPU-accelerated line charts. Steps: (1) install `react-native-livechart`, `@shopify/react-native-skia`, `react-native-reanimated@3`, and `react-native-gesture-handler`; (2) wrap the app root with `` if not already done; (3) create `components/PriceChart.tsx` that imports `LiveChart` and renders it with a static `data` array of `{ timestamp: number; value: number }` objects; (4) add a `useSharedValue(0)` and pass it as the `value` prop to show the selected data point; (5) display the selected value in an `Animated.Text` label above the chart using `useAnimatedProps`; (6) profile on Android with RN DevTools to confirm UI thread rendering at 60 fps. Files to create/modify: `components/PriceChart.tsx`, `App.tsx` or the screen that hosts the chart, `package.json`. Acceptance checklist: [ ] Chart renders at 60 fps, [ ] Scrubbing updates the label without JS bridge calls, [ ] Build succeeds on iOS and Android, [ ] No console errors on mount.

🟧 Chunk 5 β€” Automate iOS Internal Device Registration in EAS Workflows

Goal: Eliminate the manual "register device β†’ download provisioning profile β†’ rebuild" cycle for internal testers by configuring EAS Workflows to auto-register new iOS devices on every internal distribution build.

Scope:

  • Create .eas/workflows/internal-build.yml with a register-devices job step that runs before the EAS build
  • Configure the internal build profile in eas.json with "distribution": "internal" and "autoIncrement": true
  • Trigger a test workflow run from the Expo dashboard and verify a new device is registered without manual intervention
  • Verify the build artifact installs on the newly registered device
  • Document the updated internal tester onboarding steps in the project README

Out of scope: Android device management, App Store distribution profiles, or external beta distribution via TestFlight or Firebase App Distribution.

Dependencies: EAS account with Workflows enabled; project already building with EAS Build.

Acceptance criteria:

  • New iOS device UDID is added to the provisioning profile automatically during the workflow run
  • Build artifact installs on the newly registered device without a manual profile download
  • Workflow run completes without manual approval steps in the Expo dashboard
  • eas.json internal profile correctly specifies "distribution": "internal"

Estimated effort: S

Β 

Copy/paste this prompt: Implement the following React Native chunk for your mobile app: Configure EAS Workflows to automatically register iOS internal build devices (https://expo.dev/changelog/eas-internal-ios-ci-workflows). Steps: (1) create `.eas/workflows/internal-build.yml` with a job that calls `eas device:create --non-interactive` as a pre-build step using the EAS CI runner; (2) update `eas.json` to ensure the `internal` profile has `"distribution": "internal"` and `"ios": { "simulator": false }`; (3) push a commit to trigger the workflow from the Expo dashboard; (4) on a device not yet registered, open the install link and verify it installs without an "untrusted developer" or provisioning error; (5) update the project README with the new tester onboarding install URL. Files to create/modify: `.eas/workflows/internal-build.yml`, `eas.json`, `README.md`. Acceptance checklist: [ ] Workflow YAML passes the EAS linter, [ ] New device UDID appears in EAS device list after the run, [ ] Build installs on the newly registered device, [ ] No manual Xcode or Apple Developer Portal steps required.