React Native is a powerful tool, but at scale it reveals its rough edges. We have shipped consumer-facing mobile apps for major media companies — apps with live video streaming, push notifications, user authentication, and complex navigation hierarchies. Here is what we learned.
Architecture Decisions That Compound
The navigation library you choose on day one will shape your architecture for years. We have moved from React Navigation to Expo Router on newer projects and have not looked back. File-based routing reduces bugs and makes onboarding new developers faster.
Video Streaming is a Different Beast
Integrating live and on-demand video in React Native requires native modules. There is no getting around it. We use a combination of react-native-video and custom native code for DRM, subtitle rendering, and background audio. Do not underestimate the testing surface here — bitrates, network conditions, device fragmentation, codec support.
Performance: Where React Native Gets Honest
JavaScript-driven animations in React Native are notoriously janky. Reanimated 3 with its worklet system has solved most of this, but it requires a mindset shift — you are writing animation logic that runs on the UI thread, not the JS thread.
The new Architecture (Fabric + JSI) has made bridging calls dramatically faster, and migrating to it was one of the best decisions we made on a recent project.