weshipit.today — React Native Newsletter — 2026-W07

Week of February 9, 2026 – February 15, 2026

Items This Week

#TitleLabelLink
1React Native 0.84 stable — Hermes V1 by default, iOS prebuilt binaries, WASM🟦 RNRead
2Gesture Handler 3 beta — Hook-based API, deeper Reanimated integration🟦 RNRead
3Rozenite — Plugin framework for React Native DevTools (post-Flipper)🟦 RNRead
4Expo SDK 55 launch imminent — What to expect🟧 EXPORead
5Building Bulletproof React Components — Defensive patterns for production⚛️ REACTRead

Sources: This Week In React #268 (Feb 11, 2026) · React Status #462 (Feb 13, 2026)


5-Day Action Plan


🟦 Chunk 1 — Upgrade to React Native 0.84 Stable

Goal: Ship the React Native 0.84 stable upgrade to production, unlocking Hermes V1 as the default engine, faster iOS builds via prebuilt binaries, and a cleaner codebase with Node.js 22 as the new baseline.

Scope:

  • Bump react-native to 0.84.0 in package.json
  • Upgrade Node.js requirement to 22.11+ in .nvmrc, .node-version, and CI matrix
  • Verify Hermes V1 is active (check Metro startup logs for Using Hermes)
  • Enable iOS prebuilt binaries in Podfile and measure pod install time before/after
  • Run the full test suite and smoke test on both platforms
  • Document breaking changes and migration notes in the project README

Out of scope: Enabling WebAssembly in this chunk (separate initiative), production release of RC builds, full legacy architecture cleanup.

Dependencies: Xcode ≥ 16, Android Studio Meerkat, Node.js 22.11+, CocoaPods ≥ 1.15.

Acceptance criteria:

  • App builds and runs without warnings on iOS and Android
  • Using Hermes (V1) confirmed in Metro logs on both platforms
  • iOS pod install time is measurably reduced thanks to prebuilt binaries (benchmark in PR)
  • All existing CI checks (unit tests, type check, lint) pass on Node.js 22
  • A non-technical stakeholder can open the app and navigate all core flows without issues

Estimated effort: M


🟦 Chunk 2 — Migrate Gestures to Gesture Handler 3 Hook-Based API

Goal: Upgrade to Gesture Handler 3 beta and migrate the most-used gesture implementations from the legacy GestureDetector / imperative API to the new useGesture hook — unlocking deeper Reanimated 4 integration and New Architecture-native performance.

Scope:

  • Bump react-native-gesture-handler to the latest 3.x beta
  • Identify all GestureDetector, PanGestureHandler, TapGestureHandler usages in the codebase
  • Migrate 3–5 gesture components to the new useGesture(Gesture.Pan()) hook API
  • Validate gesture interactions on both iOS and Android physical devices
  • Confirm no regressions in swipe-to-dismiss, pull-to-refresh, or drag-and-drop flows

Out of scope: Full codebase gesture migration, custom native gesture recognizers, Reanimated 4 migration (can follow separately).

Dependencies: React Native 0.84, New Architecture enabled, react-native-reanimated ≥ 4.x.

Acceptance criteria:

  • Migrated gesture components use only the useGesture hook API (no legacy handler imports)
  • Gestures respond at native frame rate with no JS-thread jank on a mid-range Android device
  • Swipe and drag interactions feel identical to the previous implementation for end users
  • A non-technical stakeholder cannot detect any regression during a hands-on review

Estimated effort: M


🟦 Chunk 3 — Set Up a Rozenite DevTools Plugin for Custom Debugging

Goal: Replace the old Flipper plugin workflow with a Rozenite-powered custom debugging panel in React Native DevTools, giving the team in-app visibility into app state, feature flags, or API responses — with no extra windows or servers required.

Scope:

  • Install rozenite and configure it in metro.config.js
  • Create one custom panel (e.g. a feature-flag inspector or a network log viewer)
  • Enable the panel in the React Native DevTools sidebar
  • Document how to add a new panel in the project's CONTRIBUTING.md

Out of scope: Multiple plugin panels (ship one, iterate later), Rozenite Agent integration (separate chunk), production builds (DevTools panels are dev-only).

Dependencies: React Native 0.84+, Metro DevTools enabled, Rozenite @callstackincubator/rozenite.

Acceptance criteria:

  • The custom Rozenite panel appears in React Native DevTools without opening a separate Flipper window
  • The panel displays live, device-scoped data (e.g. current feature flag state or last 10 API calls)
  • A new developer can add their own panel by following the CONTRIBUTING.md guide
  • Panel has zero impact on production bundle size (verified via Metro bundle analysis)

Estimated effort: S


🟧 Chunk 4 — Prepare the Codebase for Expo SDK 55

Goal: Complete all pre-flight checks and deprecation fixes so the team can upgrade to Expo SDK 55 on launch day with zero surprises.

Scope:

  • Run npx expo install --check to identify all packages incompatible with SDK 55
  • Review the Expo SDK 55 changelog and tag all breaking changes affecting the current project
  • Resolve deprecation warnings currently surfaced in Metro and Xcode build logs
  • Bump expo to ~55.0.0 in a dedicated branch and verify the app boots on both platforms
  • Update app.json / app.config.js for any renamed or removed config fields

Out of scope: Adopting new SDK 55 features (Widgets, Compose UI) — handled in separate chunks once stable, store submission.

Dependencies: Expo SDK 54 currently installed, EAS Build account, Node.js 22.

Acceptance criteria:

  • npx expo install --check reports zero incompatible packages on the SDK 55 branch
  • App boots and core flows work on both iOS and Android simulators
  • No warnings about deprecated app.json keys in the Expo CLI output
  • A non-technical stakeholder can run the staging build from the SDK 55 branch

Estimated effort: S


⚛️ Chunk 5 — Harden Components with Bulletproof Defensive Patterns

Goal: Audit the 5 most-reused React Native components and apply defensive production patterns — error boundaries, prop validation, loading/error/empty states, and accessibility — so they are resilient in every runtime condition.

Scope:

  • Identify the 5 most reused components (via import count or usage frequency)
  • Wrap each in a typed ErrorBoundary with a fallback UI
  • Add explicit loading, error, and empty state rendering to all async-data components
  • Validate props with TypeScript strict types (no any, required vs optional clearly defined)
  • Add accessibilityLabel and accessibilityRole to all interactive elements in target components
  • Write or update unit tests to cover each state variant

Out of scope: Full codebase component audit, design system changes, backend error handling.

Dependencies: React 19 (for improved error boundary ergonomics), existing Jest/Testing Library setup.

Acceptance criteria:

  • Each of the 5 target components renders a graceful fallback UI on thrown errors
  • Loading, error, and empty states are visually verified by a non-technical stakeholder
  • TypeScript strict mode reports zero errors in the target components
  • All new state variants are covered by at least one unit test

Estimated effort: M