One Expo codebase, five targets — iOS, Android, web (via react-native-web), Linux (AppImage), and Windows (NSIS). The desktop variant ships through Electron with its own application menu and keyboard shortcuts; everything else rides the same hooks and API layer the mobile app uses.
One codebase, five targets
Screens, hooks, types, and the API layer are shared across mobile, web, and Electron. Platform-specific branches are deliberately confined to two places: a small fork in useCurrentLocation that swaps in an IP-based lookup for Electron (Chromium needs a Google Maps key for navigator.geolocation), and the electron folder itself for the application menu, keyboard shortcuts, and preload bridge.
Offline-aware everywhere
React Query is wired into NetInfo through onlineManager.setEventListener so queries pause and resume with connectivity. AsyncStorage transparently falls back to localStorage on web and Electron. Reanimated 4 with worklets drives the entrance cascade, the forecast row expand, and the offline banner — all on the UI thread on native, all on Reanimated’s web build elsewhere.