React Native Roadmap 2026-W25
Week of June 15βJune 21, 2026
Items This Week
| # | Title | Label | Link |
|---|---|---|---|
| 1 | React Native 0.86 β Edge-to-Edge & React Foundation move | π¦ RN | Read |
| 2 | Introducing EAS Observe β Performance monitoring for Expo apps | π§ EXPO | Read |
| 3 | iOS Widgets & Live Activities stable in Expo SDK 56 | π§ EXPO | Read |
| 4 | react-native-livechart β GPU-accelerated charts with Skia | π¦ RN | Read |
| 5 | EAS Workflows β Automate iOS internal device registration | π§ EXPO | Read |
| 6 | React Compiler in Rust merged (React Status #479) | βοΈ REACT | Read |
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-nativeto0.86.xinpackage.json - Remove
react-native-edge-to-edgeand its config plugin fromapp.json/app.config.js - Verify
KeyboardAvoidingView,Dimensions, andStatusBarbehave 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-edgeremains inpackage.jsonor config files StatusBarupdates correctly while aModalis openKeyboardAvoidingViewlifts 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-observeSDK 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-widgetsto the project and configure its config plugin inapp.json - Create a
widgets/TodayWidget.tsxcomponent using theWidgetandWidgetTextprimitives fromexpo-widgets - Define a
WidgetConfigurationwith 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 `π¦ 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-livechartand its peer dependencies (@shopify/react-native-skia,react-native-reanimated@3,react-native-gesture-handler) - Create a
components/PriceChart.tsxcomponent 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.Textlabel 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 `π§ 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.ymlwith aregister-devicesjob step that runs before the EAS build - Configure the
internalbuild profile ineas.jsonwith"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.jsoninternal profile correctly specifies"distribution": "internal"
Estimated effort: S
Β