Service · App development

Custom React Native app development for iOS & Android.

One codebase, two app stores. We build native-feeling mobile apps in TypeScript on the modern React Native stack — with Fabric, Hermes, Expo and EAS — for founders, product organisations and agencies who want to go mobile quickly without staffing two separate teams.

TypeScriptNew ArchitectureExpo & EASOTA updates

What is React Native and why is it the default choice?

React Native is Meta's open-source framework that runs the React components you write for the web on iOS and Android. Under the hood, it connects JavaScript or TypeScript to genuine native UI elements: Swift and Objective-C on iOS, Kotlin and Java on Android. The result is not a webview or a hybrid app in the old sense, but a native interface driven by React. What the user sees on screen are real UIKit or Android controls; only the logic and orchestration live in JavaScript.

Since version 0.76, the New Architecture is the default: Fabric as the renderer, TurboModules for native modules, and the Hermes engine for fast JavaScript execution. The old asynchronous bridge between JavaScript and native has been replaced by synchronous, type-safe interop. For clients, this means a level of performance that in practice is comparable to native, for the vast majority of business and consumer use cases we build.

Apps such as Facebook, Instagram, Discord, Shopify, Microsoft Office, Walmart and Tesla run parts of React Native. A wide range of Fortune 500 companies use the framework somewhere in their product portfolio. The maturity of the ecosystem, the size of the talent pool and the easy transition for web teams make React Native the pragmatic default for most business apps. Where it is not a good match, we say so honestly; further down this page you will find the cases where we refer you to Flutter or native.

We build React Native apps for founders who want to get to mobile quickly, for product teams with an existing React web platform, and for enterprises that want a phased migration away from a legacy native app. The broader service context, from scoping and architecture to CI/CD and maintenance, is covered on our overarching app development page. For the business variant specifically, see building a B2B app.

When React Native is the right choice.

Four patterns in which we guide clients. If you recognise one of them, React Native is almost always the pragmatic answer.

Shared codebase

You want iOS and Android in one project

A separate Swift and Kotlin app means, in practice, two codebases, two QA pipelines and two release coordinations. With React Native, we share between eighty and ninety-five per cent of the code and build platform-specific exceptions only where necessary for UX or for access to a platform API. The scope is therefore noticeably smaller than a duplicate native build.

React experience

Your web team already knows React

If you already have a React or TypeScript team building the web, that same team can deliver the mobile app without having to hire Swift or Kotlin specialists. Hooks, types, validation schemas and utilities are literally shareable. The talent pool for React developers in the Netherlands is also considerably larger than for native specialists, which simplifies recruitment and long-term maintenance. For longer-term capacity needs, we look at app developer staff augmentation.

Brand-consistent UI

Your brand should feel the same on both platforms

For B2B portals, customer apps and branded e-commerce, you want the app to keep the same look and feel on iOS and Android. React Native uses native controls but leaves room for brand-specific components through libraries such as Restyle, Tamagui or NativeWind. We work with design tokens that your web app can also use, so colours, type scale and spacing rules have a single source of truth.

MVP & cross-platform launch

You want a working MVP on both platforms quickly

With Expo and EAS Build, we can put a testable version on stakeholders' phones early in the project, with no Xcode or Android Studio needed for reviewers. Iteration runs over the air via EAS Update, so feedback reaches users in a short feedback cycle. This measurably speeds up validating product decisions compared with a dual native track.

When React Native is not the right choice.

Honesty saves you an expensive change of direction halfway through. These are the three patterns where we point you towards native or a specialised alternative.

Not 01

Demanding low-level native features

AR applications, real-time vision pipelines, complex camera controls with manual exposure and focus, hardware keys such as YubiKey or smartcard readers, Bluetooth mesh or low-level low-energy IoT pairing: that belongs on native. The right tooling, sample code and documentation live in the Apple and Google SDKs. Anything you built in React Native would end up as a native module with a thin JS wrapper, so you are better off dropping the bridge altogether.

Not 02

Maximum performance for gaming

Heavy-graphics gaming, console-style 3D render pipelines and mobile games that keep the GPU at sixty or one hundred and twenty frames per second are best served by Unity, Unreal or dedicated native rendering with Metal and Vulkan. For occasional animation or a game-like dashboard, we can get a long way with Reanimated and React Native Skia, but for production-grade gaming we would rather recommend the right tools than force what doesn't fit.

Not 03

Native UX perfectionism as a commercial requirement

For premium consumer apps where every detail of the iOS or Android Material experience must be pixel-perfect, down to haptics, system fonts in every state and platform-native motion, native is the sensible answer. React Native comes very close, but the last few percent of difference between "feels native" and "is native" is immediately noticed by a professional reviewer or a design-conscious client. That route is more expensive in both worlds, and more honest in native.

React Native, Flutter or native: a sober comparison.

The three options at a glance. In the first conversations we help you choose the one that fits your existing stack, team and product ambitions.

Criterion
React Native
Flutter
Native (Swift / Kotlin)
Language
TypeScript / JavaScript
Dart
Swift & Kotlin (two teams)
Dutch talent pool
Large, shared with web
Small, growing slowly
Scarce, expensive
UI rendering
Native controls via Fabric
Own Skia engine, every pixel drawn by the framework
Fully native per platform
Code sharing with web
High, React components and hooks
No native code sharing with web
None
iOS/Android code sharing
Eighty to ninety-five per cent
Comparable, often slightly higher
None, two codebases
OTA updates
EAS Update, in-app updates
Shorebird, more limited availability
None (store releases only)
Best for
B2B, portals, MVPs, e-commerce
Brand-consistent UI, animation-heavy
AR/VR, gaming, hardware IoT, premium UX
Ecosystem
Large, broad production track record
Growing fast, younger
Full platform SDKs, everything available

The modern React Native stack in 2026.

Our default configuration for production apps. Depending on your scope we swap out components, but these are the building blocks we start with by default.

Core & runtime

React Native 0.76+, Hermes, New Architecture

We start on a recent React Native release with Fabric and TurboModules enabled by default, and Hermes as the JavaScript engine. Hermes is optimised for mobile, with fast start-up and lower memory use than the older JavaScriptCore runtime. TypeScript is always part of the setup, in strict mode, with types generated from your back end for end-to-end type safety.

Tooling & build

Expo SDK, EAS Build, EAS Update

Expo (managed workflow) is our default for most projects, thanks to its developer experience and the production-grade build and update infrastructure provided by EAS. We only switch to the bare workflow where native modules are required that cannot be handled through Expo Modules, which is rare these days. EAS Build delivers cloud builds of iOS and Android binaries without the need for our own Mac runners, and EAS Update replaces the now-retired Microsoft App Center for over-the-air updates.

Data, state & UI

MMKV, TanStack Query, Reanimated

MMKV as fast on-device key-value storage instead of AsyncStorage, TanStack Query for server state and cache invalidation, Zustand or Redux Toolkit for client state depending on complexity, and Reanimated 3 with Gesture Handler for animations that run on the UI thread. For forms we use React Hook Form with Zod for type-safe validation, and for styling NativeWind or Tamagui, depending on your design requirements.

Navigation & lists

Expo Router, Shopify FlashList

File-based routing with Expo Router, built on React Navigation v7. For high-performance lists we use Shopify's FlashList rather than the standard FlatList, which noticeably improves scroll performance on large datasets and makes better use of memory. To keep re-renders in check we rely on React.memo, useMemo and useCallback, and we use React DevTools and the Hermes profiler to catch hotspots early.

Quality & testing

Jest, Maestro, Detox, Reactotron

Jest for unit tests, Maestro or Detox for end-to-end flows on real devices or simulators, and Reactotron for local state and network inspection during development. Accessibility is considered from the start of the build: semantic roles, focus management, contrast checks and screen reader testing with VoiceOver and TalkBack are standard QA steps, not something ticked off once at the end.

CI/CD & monitoring

Fastlane, EAS Build, Sentry

Fastlane for the release pipelines to App Store Connect and Google Play Console, EAS Build for the binaries, and GitHub Actions as the orchestration layer that tests every pull request on iOS and Android. For production monitoring we set up Sentry, bringing native crashes, JavaScript errors and performance traces together in one dashboard, with source maps and symbolication configured automatically. Feature flags via PostHog or LaunchDarkly enable staged rollouts.

Three kinds of React Native projects.

Depending on where you stand and what it will deliver. We'll advise which flavour suits you in the first conversation: no fixed format, but clear outlines.

MVP · fixed sprint budget

Cross-platform MVP in a single project

A first working app for both platforms from a single Expo project. Ideal for founders and product organisations who want to quickly validate whether the concept works, with OTA updates for rapid iteration and EAS Build for TestFlight and Internal Testing distribution. The architecture is production-grade from the outset, so the MVP won't need rebuilding later.

Expo managedEAS BuildTypeScriptTestFlight
Production app · fixed sprint budget

B2B or B2C app on an existing stack

A React Native app that belongs to an existing product. Deep integrations with your back end, identity provider (SSO, biometrics), payment flows and analytics. We build on the production stack above from day one and deliver with monitoring, alerting and a release pipeline your own team can run.

SSOSentryEAS UpdateFlashList
Brownfield migration · fixed sprint budget

Phased migration of an existing native app

If you already have a Swift or Kotlin app and want to move to React Native in phases, the model Meta itself uses, we add React Native as a brownfield module, starting with a single screen or feature and expanding where it makes sense. Production stability is maintained throughout the project, with no big-bang release.

BrownfieldModule-by-moduleNative bridgeCo-existence
Not yet sure about a large project?

Test your idea first: a working prototype in 1 day

With OneDayBuild, we turn your idea into something tangible in one day for €1,150, so you can see whether further development is worth the investment. Decide to go ahead with the full build? Then we credit the full cost.

Explore OneDayBuild →

What you get at the end.

A production-ready React Native project, plus everything around it needed to manage and continue developing the app yourself.

  • The app itself, iOS and AndroidBoth builds published to App Store Connect and Google Play Console, under your own developer accounts. You are the legal owner of the listings.
  • Codebase with TypeScript and CIFull source code, monorepo setup where appropriate, GitHub Actions for pull request checks, and EAS configuration for builds and over-the-air updates.
  • Documentation and architectureBuild instructions, a deployment runbook, architecture decision records for the key architectural choices, and an overview of all third-party services in use.
  • Monitoring from day oneSentry for crashes and JavaScript errors, performance traces for slow flows, and a logging pipeline that you can extend yourself.
  • Handover to your teamTwo knowledge transfer sessions, a short video walkthrough of the codebase, and a week of pair programming with your developers who will be taking over maintenance.
  • Maintenance contract (optional)Ongoing monitoring, dependency updates, security patches and further development. Fixed monthly fee, with clear response-time levels per ticket priority.

How a React Native project works.

1

Introduction and scoping

A conversation in which we understand what you want to build, for whom, and which stack suits it. We test whether React Native is the right answer for your case, and we will tell you honestly when Flutter or native is the better fit. By the end of this conversation you will have a direction, a first outline of scope and an idea of the project's shape.

2

Planning and design sprint

We draw up a sprint plan, sketch the architecture, choose the specific stack components and, where it makes sense, run a short design sprint for the key screens. For production apps, a spike runs in parallel on the most demanding performance screen, so the assumptions are validated up front rather than during the build.

3

Building in sprints with OTA updates

Each sprint produces a working build on TestFlight and Internal Testing. You test along with it, as do stakeholders, and feedback is incorporated via EAS Update over the air. The team works incrementally: core flows first, edge cases later. Code reviews, automated tests and performance checks are part of the cycle, not something done once at the end.

4

Store publication and rollout

Preparation of the App Store and Google Play listings, screenshots, privacy disclosures and review submission. We guide the first publication and the reviewer questions that come with it. For B2B apps we often choose a phased rollout: internal distribution first, then limited production, then a full rollout.

5

Operations and ongoing development

After go-live, the team keeps monitoring sharp, handles the first feedback and makes sure dependencies and OS targets stay current. OTA updates for small fixes and JavaScript changes, store releases for new native modules or permissions. Further development runs in new sprints, with clear prioritisation based on data and user feedback.

Who we build React Native apps for.

Four target groups for whom React Native, and the way we work with it, delivers proven value.

Founders

Fast to production

You want a working app on both platforms without setting up a duplicate native team. We work to a fixed sprint cadence, use OTA updates for rapid iteration and build a production-grade foundation from the first commit. No MVP that you will have to rebuild entirely later.

Teams with React experience

Web developers moving into mobile

Your team knows React, TypeScript and modern front-end tooling. With React Native you share components, hooks, validation schemas and design tokens with the web app. The move into mobile extends existing knowledge rather than building a new specialism.

B2B organisations

Apps with shared branding

For business users, where the app is an extension of your brand and iOS and Android need to feel consistent. Can be combined with SSO, identity providers and your existing back office, as set out on building a B2B app.

Enterprise and brownfield

Phased migration from native

You already have a production app in Swift or Kotlin and want to move to React Native without a big-bang rewrite. We add RN as a module to the existing app, start with a single screen and expand where it makes sense — the same model Meta itself uses.

Fabian van Dijk Business Developer · Appfront

Appfront's first point of contact for React Native projects. Reach fabian.vandijk@appfront.nl for a no-obligation conversation about when React Native fits your stack — and when Flutter or native is the honest answer.

Frequently asked questions about React Native.

What clients usually want to know before we start.

React Native or Flutter: which should we choose?
React Native is our default, unless there is a strong case for Flutter. React Native has the largest ecosystem, the most Dutch developers and the easiest transition for web teams. We choose Flutter when heavy graphics, complex animations or a strong preference for Dart are involved — for example for game-like UIs or teams already working with Flutter. A third consideration is brand uniformity: Flutter draws every pixel itself, whereas React Native uses native controls that differ slightly per platform.
React Native or native (Swift / Kotlin) — what is the difference in practice?
Native remains the right choice for AR/VR, real-time vision, complex camera flows, hardware-sensitive IoT, Bluetooth mesh, or where premium platform UX is a commercial requirement. For everything else — portals, dashboards, e-commerce, healthcare, field service — React Native is often faster and cheaper, because you don't build twice or maintain two teams. We often work in a hybrid way: about ninety-five per cent React Native, with the few performance-critical parts as a native module.
Is React Native fast enough for our app?
For the vast majority of business and consumer apps, yes. With the New Architecture (Fabric and TurboModules) and the Hermes engine, baseline performance is close to native. For specific heavy-graphics screens we can use React Native Skia or build those screens as a native module locally, without touching the rest of the app. When in doubt, we run a short performance probe on the most demanding screen beforehand, so you have certainty before committing to a project.
Use Expo or "bare" React Native?
In practice we start by default with Expo (managed workflow). The developer experience is by far the best, EAS Build and EAS Update are production-grade, and you can run "prebuild" at any moment to add native code. We only choose bare RN when native modules are needed that don't work via Expo Modules — nowadays rare, as Expo now supports most popular native modules first-class.
How do OTA updates work via EAS Update?
EAS Update lets you roll out JavaScript and asset changes over the air without a new app store build. Bug fixes and small features can reach users quickly, and you can differentiate updates by release channel (beta, staging, production). Native changes — new permissions, new native modules, new iOS or Android target versions — still require a new binary in the App Store or Play Store, as Apple and Google always review those. Microsoft App Center has now reached end-of-life; EAS Update is the modern successor.
How do you handle performance and re-renders?
We work with React.memo, useMemo and useCallback where it makes sense, use Shopify FlashList instead of the standard FlatList for long lists, and MMKV instead of AsyncStorage for fast synchronous storage. Animations run via Reanimated on the UI thread, not the JS thread. We profile using the Hermes profiler and React DevTools, and we catch performance issues in production via Sentry traces. It is not a separate "optimisation phase" but a continuous track running alongside the build.
What about accessibility in React Native?
Accessibility is built in from day one. Semantic roles via accessibilityRole, focus management via accessibilityState, contrast checks against WCAG 2.2 AA, and screen reader testing with VoiceOver on iOS and TalkBack on Android. For B2B apps subject to public procurement or accessibility legislation (EN 301 549), we also deliver an accessibility report covering known issues and mitigations.
Can we migrate our existing native app in phases?
Yes. We add React Native as a brownfield module to an existing Swift or Kotlin app, starting with one screen or feature and expanding where it makes sense. This is the model Meta itself uses, and it significantly reduces migration risk compared with a full rewrite. You keep production stability while the modernisation proceeds at its own pace, without a big-bang release or a months-long feature freeze.
Does React Native also work for a single-page web app alongside the mobile app?
Yes, and more than that: for teams that have or are building a React-based single-page application, React Native is often the logical extension. Components, hooks and validation schemas can be shared between web and mobile in a monorepo. In that case we use Solito or Expo Router for Web to unify routing as much as possible, and share design tokens through a shared design system package.
What is the approach to TypeScript, Jest and Detox / Maestro?
TypeScript is the default in every new React Native codebase, in strict mode, with generated types wherever the back end provides them. Jest for unit tests, Detox or Maestro for end-to-end flows on real devices and simulators, depending on the setup you want. We use Reactotron during development to inspect state, network traffic and async storage. The goal is for regressions to be caught by automated tests, not by manual regression testing just before a release.
Do you work together with our in-house developers?
Almost always. We carry out knowledge transfer throughout the project, plan pair-programming sessions with your developers, and make sure the codebase is understandable to anyone who works on it after us. For longer-term support, we can look at capacity questions via hiring app developers. The ultimate aim is always for your team to be able to manage and further develop the app itself, with us as a fallback for specific specialisms where needed.

Talk to us about your React Native app.

A free, no-obligation half-hour introductory call. We listen to what you want to build, look at how it fits your existing stack and team, and give you honest advice (React Native, Flutter or native) rather than automatically selling our own work.

Edit content