React Native lets you write mobile apps for iOS and Android using JavaScript and React. Instead of maintaining two separate native codebases, you share most of the code between platforms. React Native combines React's component model with actual native UI — so the buttons, lists, and animations feel native because they are.
We needed a way to build for both iOS and Android without doubling the team. React Native let us use JavaScript (which we already knew) and still produce real native interfaces. The tradeoff is real — you give up some control over platform-specific behavior — but for most apps, the shared codebase pays for itself quickly.
React Native has a large community and an active package ecosystem. State management, navigation, push notifications, maps — there are well-maintained libraries for most of what you need. That said, not every package stays current, and you will occasionally hit a dependency that hasn't been updated in months. Checking issue trackers before committing to a library saves time later.
React Native isn't without friction. Two areas come up repeatedly:
If you already know JavaScript and React, the jump to React Native is manageable. The official React Native tutorial covers setup and core concepts well. Familiarity with Git and GitHub is worth having too, since most React Native projects rely on community packages pulled from GitHub.
Every project teaches you something specific. With React Native, the biggest lesson was that cross-platform doesn't mean write-once-run-everywhere. It means write-mostly-once, then handle the edge cases per platform. That's still a significant win over maintaining two fully separate apps — but it's honest to say the gap between "demo" and "production" is wider than it looks at first.