What is React Native?
React Native is an open-source framework developed by Meta (Facebook) for building native iOS and Android mobile applications using JavaScript and TypeScript, with the React component model. Unlike hybrid web apps wrapped in a WebView, React Native renders using actual native platform UI components iOS UIKit components on iOS, Android Material components on Android via a bridge (Legacy Architecture) or directly via JSI (New Architecture). The result is apps that look, feel, and perform like native apps while sharing a single JavaScript/TypeScript codebase across both platforms. React Native is used in production by Meta, Instagram, Discord, Shopify, and Microsoft. Its primary advantage over Flutter is language familiarity any React web developer can contribute to a React Native project with minimal ramp-up.
What is the React Native New Architecture?
The React Native New Architecture is a complete re-engineering of how React Native's JavaScript layer communicates with native iOS and Android code, shipped as default in React Native 0.76 (2024). It consists of three components: JSI (JavaScript Interface) a direct C++ bridge between JavaScript and native code that enables synchronous calls without JSON serialisation, eliminating the asynchronous message-passing overhead of the Legacy Architecture; Fabric the new React Native UI renderer that replaces the legacy UIManager with a C++ implementation that renders synchronously and supports React 18's concurrent features; and TurboModules lazy-loaded native modules that initialise only when first called, reducing app startup time. The New Architecture delivers significantly improved performance for animations, reduces bridge latency, and enables React Native to support React 18 features like Suspense and automatic batching.
Should I use Expo or bare React Native?
Expo Managed Workflow is the right choice for: projects where all required APIs exist within the Expo SDK, teams without native iOS/Android expertise, MVPs where development speed matters more than native customisation, and projects that benefit from OTA updates (EAS Update pushes JavaScript bundle changes without App Store review). Bare React Native (or Expo Bare) is the right choice for: apps requiring native code that is not in the Expo SDK, custom native module development, enterprise apps requiring specific MDM configuration, and projects where the team includes native mobile developers who need direct access to Kotlin/Swift. EAS Build works with both the CI/CD advantage of Expo (cloud iOS builds without macOS) is available regardless of whether you use the Managed or Bare workflow.
How much does React Native app development cost?
React Native app development costs range from $2,000 for a scoping session to $70,000 for a full enterprise app with SSO, offline-first architecture, and custom TurboModule development. A React Native MVP costs $15,000-40,000 depending on whether Expo Managed or Bare is used and the feature scope. A full consumer app costs $25,000-60,000. An enterprise app with offline-first data, SSO, and MDM compatibility costs $28,000-70,000. New Architecture migration of an existing legacy React Native app costs $10,000-35,000. Both stores are included as standard on all engagements.
What is EAS Build and do I need it?
EAS (Expo Application Services) Build is Expo's cloud build service for React Native apps it compiles iOS and Android builds in the cloud without requiring a macOS machine for iOS builds. It is not strictly required for React Native development (you can build iOS locally with Xcode and a Mac, and Android locally with Android Studio), but it significantly reduces CI/CD complexity and cost: no macOS runners in CI, automatic certificate and provisioning profile management, and one-command distribution to TestFlight and Google Play. ClickMasters uses EAS Build for all React Native projects regardless of whether Expo Managed or Bare workflow is used it is the most cost-effective path to automated iOS builds in a CI/CD pipeline.
What is WatermelonDB and why use it instead of AsyncStorage?
WatermelonDB is a high-performance SQLite database library for React Native, designed for building offline-first applications with large data sets. It uses lazy loading (only data that is actually rendered is loaded into memory), reactive queries (database queries return Observable results that automatically update the UI when underlying data changes), and is optimised specifically for React Native's bridge (or JSI in New Architecture). AsyncStorage is React Native's original built-in key-value storage it stores serialised JSON strings and has no querying capability. AsyncStorage has been deprecated as a default package and extracted to @react-native-async-storage it is appropriate only for simple key-value configuration data. For any app storing structured data (user records, orders, inventory, content), WatermelonDB delivers superior performance and query capability. MMKV (from WeChat's team) is the recommended replacement for AsyncStorage for simple key-value storage it is synchronous, encrypted, and 10x faster.
How do you test React Native apps?
React Native testing uses a layered approach. Unit tests with Jest and React Native Testing Library (RNTL): test individual components in isolation, render components and assert on their output, mock native modules via jest.mock. API mocking with MSW (Mock Service Worker) intercept network requests in tests rather than mocking fetch/Axios directly. E2E tests with Detox: grey-box testing (Detox has knowledge of React Native's JavaScript state, enabling more deterministic tests than pure black-box UI automation), runs on real iOS Simulators and Android Emulators, tests the actual app binary. Maestro: YAML-based E2E flows that are faster to write than Detox tests, good for smoke testing critical paths. ClickMasters maintains a minimum of 70% code coverage on business logic and Detox tests for all critical user flows before production release.
Can React Native apps access hardware like Bluetooth and NFC?
Yes. React Native accesses platform hardware via Native Modules (Legacy Architecture) or TurboModules (New Architecture). For common hardware APIs, mature community libraries exist: Bluetooth LE via react-native-ble-plx (most feature-complete BLE library for React Native), NFC via react-native-nfc-manager, camera via react-native-vision-camera (New Architecture compatible, supports frame processors for real-time image processing), GPS via @react-native-community/geolocation or Expo Location, and biometrics via react-native-biometrics. For hardware-specific SDKs without community packages (industrial scanner SDKs, payment terminals, proprietary peripherals), ClickMasters writes custom TurboModules using the New Architecture Codegen specification type-safe, JSI-based native modules that call platform SDKs directly from the JavaScript thread without bridge serialisation overhead.