What is React Native app development, and who is it for?
React Native app development means writing one JavaScript or TypeScript codebase that renders real native interface components on Android and iOS. It is for companies that want both platforms without paying for two separate apps, and it is strongest for companies that already know React.
The framework is open source, with a large community behind it. Unlike a website wrapped in an app shell, a React Native screen uses the platform's own buttons, lists and text inputs, so scrolling, keyboard behaviour and accessibility settings feel like the rest of the phone. Your developers write components the way they would in React for the web, with View and Text instead of div and span.
For a Canadian buyer, the practical question is not “is React Native good?” but “does it fit what we already run?” Here is how we sort that out during scoping:
- Strong fit: your web app is React, Next.js or Remix, your API is Node or any JSON backend, and your developers read TypeScript daily.
- Reasonable fit: you have no web product yet, but you plan one and want a single language across the whole stack.
- Weak fit: your team works in Dart, Kotlin or Swift already, or the app is mostly custom graphics and animation.
If you land in the weak-fit group, our Flutter guide for Canadian companies covers the other cross-platform option honestly.
Should you choose React Native if your web app already runs on React?
Usually yes. When your web product is already React, React Native app development lets the same mental model, tooling and many of the same files serve mobile, which shortens the build and makes the app easier for your in-house developers to maintain after we hand it over.
The biggest win is not the percentage of shared code; it is shared ownership. A Toronto SaaS team with four React developers can review our mobile pull requests from day one, because the code reads like their own. Hooks, context, React Query or Redux, Zod or Yup validation, date libraries and your API client all work in React Native with little or no change. Linting and formatting rules carry over. Your TypeScript interfaces become the contract both apps compile against.
What does not carry over is anything that touches the DOM or CSS directly. Tailwind classes, CSS modules, component libraries built on HTML elements and browser-only APIs such as localStorage need mobile equivalents. We plan for that in the estimate rather than discovering it in week four.
A good test before you commit: list the five screens your mobile users need most, then ask which of them rely on logic already sitting in your web codebase. If most do, the case for React Native is strong. If the mobile app is a different product with different rules, the reuse argument weakens and the choice becomes a closer call.
How much code can a React Native app share with a web dashboard?
Plan on sharing logic, not layouts. In a typical Canadian B2B product, the shared layer covers data types, API calls, validation, permissions checks, formatting and state management, while screens are written separately for each surface because a phone and a desktop dashboard need different layouts anyway.
We usually set this up as a monorepo with three kinds of package: the web app, the mobile app and one or more shared packages. When your product manager changes a rule, for example “a work order cannot close without a signature”, the developer edits the shared validation once and both apps pick it up in the same pull request. That alone removes a whole class of bugs where the dashboard and the app disagree.
React Native for Web exists and some teams render mobile components in the browser too. We use it selectively: it can work for simple internal tools, but for a customer-facing dashboard with dense tables and keyboard shortcuts, a normal React web interface is usually the better experience. The table below shows how we split a typical product.
Designing the backend at the same time? Our guide to building SaaS from Canada explains multi-tenant APIs that both clients can share.
Expo or bare React Native: which workflow suits a Canadian app?
Start with Expo unless you have a specific reason not to. The official React Native documentation now says that for a new app it recommends using a framework and describes Expo as a production-grade React Native framework, which matches what we see: Expo handles builds, signing and many device APIs so the budget goes into your features.
“Bare” React Native means you manage the native Android and iOS projects yourself. That used to be the only way to add custom native code. Today Expo supports development builds and config plugins, so most native SDKs, such as a payment terminal kit, a mapping SDK or a bank verification library, can be added without leaving Expo. We move to a bare setup only when an SDK has no config plugin and patching the native projects by hand is simpler than writing one.
EAS Build compiles your app in the cloud and signs it with credentials stored under your Expo account, which matters for ownership: the account is yours, and we are invited as members. You can also build locally on your own Mac if you prefer not to use the cloud service.
Choose Expo when
You want faster setup, cloud builds, over-the-air JavaScript updates and a maintained set of device modules for camera, notifications, location, files and secure storage.
Choose bare React Native when
An essential native SDK cannot be added through a config plugin, or your company already maintains native Android and iOS code the app must live inside.
Can a React Native app be updated without waiting for app store review?
Partly. Expo's EAS Update service can push new JavaScript and assets to installed apps, so a copy fix or a small logic bug can reach users on their next launch. Anything that changes native code, permissions or the Expo SDK version still needs a new binary through Google Play and the App Store.
Expo's own documentation lists what an over-the-air update cannot do: change native code or native dependencies, change app permissions such as camera or location, or update the Expo SDK version. We design the release process around that line. Every change is tagged as “OTA-safe” or “needs store build” when it is planned, so nobody promises a customer a same-day fix that actually requires review.
Used carefully, updates are a real advantage for a Canadian team supporting customers across time zones. A bug reported by a Halifax user in their morning can be fixed during our evening overlap and published to a staging channel, tested by your team, and then promoted to production. We keep a rollback plan for each update because a bad bundle reaches everyone quickly too.
- Separate channels for internal testing, staging and production.
- Runtime version rules so an update only reaches builds that can run it.
- A written note in the release log for every OTA push, so store builds and updates stay traceable.
How do in-app payments work in a React Native app for Canadian customers?
It depends on what you sell. Apple's App Review Guidelines require in-app purchase for unlocking digital features or content, and require a different method, such as card entry, for physical goods or services used outside the app. Google Play publishes its own payments policy, so the payment design starts with a product audit.
Here is how that plays out for typical Canadian businesses. A cleaning company taking bookings, a restaurant selling takeout or a clinic collecting deposits sells services consumed outside the app, so card checkout through your processor is the normal route. A fitness studio selling on-demand workout videos, or a SaaS product selling a premium tier inside the app, is selling digital access, and Apple's rule 3.1.1 applies. The App Review Guidelines are the source to read with your team before pricing is set.
On the card side, we integrate the processor you already use for the web product so reporting stays in one place, and we keep card numbers off your servers by using the processor's hosted or tokenised fields. Canadian merchants who already have a local processor can read our page on card-processor integration for Canadian merchants.
For subscriptions sold through Apple and Google, a server-side check of each receipt keeps entitlements accurate across web and mobile, so a customer who pays on the phone is recognised in the dashboard too.
How are push notifications handled in React Native app development?
Push notifications on Android travel through Firebase Cloud Messaging and on iOS through Apple Push Notification service. Expo describes its push service as handling the communication with FCM and APNs so both platforms can be treated the same way, which is what we use for most builds.
The technical part is the easy half. The harder half is deciding what deserves a notification. We plan categories with you, for example “job assigned”, “payment received”, “new message” and “offers”, and let users turn each one off in settings. Transactional alerts and marketing messages should be separate, because a customer who mutes promotions still needs to hear that their appointment moved.
On iOS, the permission prompt appears once, so timing matters. We show a short in-app explanation first and ask at the moment the value is obvious, such as right after a first booking. Asking on the opening screen tends to get a quick “Don't Allow”.
Canada's anti-spam law covers commercial electronic messages, and whether a particular promotional push counts is a question for your own lawyer. What we can do is build the controls: opt-in records with timestamps, clear categories, and an easy way to switch off marketing pushes. Our custom CRM page covers consent fields in more depth for teams that also send email.
How much does React Native app development cost in Canada?
Our React Native builds start at US$600, quoted in USD. The final figure depends on how much already exists: if your API and dashboard are ready, you are paying for the mobile client; if they are not, the backend is quoted separately from US$900.
Quotes from Canadian studios and freelancers vary widely, and the gap usually comes from a handful of drivers rather than hourly rates alone. These are the ones we price line by line:
- Screens and user roles. A customer app with one role is smaller than a marketplace with buyers, sellers and admins.
- Offline behaviour. Field crews in rural Manitoba or northern Ontario may need to work without signal and sync later, which adds local storage and conflict rules.
- Payments. Card checkout, Apple and Google subscriptions, or both.
- Native SDKs. Maps, Bluetooth devices, barcode scanning or identity verification each add integration and testing time.
- Languages. English and French string files are routine; right-to-left layouts or more languages add review time.
- Shared-code setup. Turning an existing web codebase into a monorepo is a one-time task worth budgeting.
The cost table further down maps common scopes to starting prices, and our Canadian app cost breakdown compares other types of apps.
How long does React Native app development take from kickoff to the stores?
Most first releases take 6 to 10 weeks. A companion app for an existing API sits at the short end; an app with offline sync, payments and a new backend sits at the long end or beyond, and we say so in the quote rather than squeezing it.
A typical plan looks like this. Week one covers accounts, repository access and the shared-package setup. Weeks two and three produce clickable screen designs and the app skeleton running on your phone through TestFlight and a Google Play internal testing track. The middle weeks build features in order of business value, with a test build every week. The final stretch is store listings, privacy labels, screenshots, review submissions and fixes from real devices.
Store review time is outside anyone's control. Apple and Google usually respond quickly, but a first submission can be rejected for something as small as a missing account-deletion option or unclear permission text. We build those requirements in early so the release week is about polish, not rework.
If you have a fixed date, such as a trade show in Toronto or a seasonal launch, tell us at the start. We will cut scope to protect the date instead of promising everything and missing it.
React Native vs Flutter: which should a Canadian business pick?
Pick React Native if your web stack is React or your developers live in TypeScript. Pick Flutter if you have no JavaScript product, want pixel-identical design on both platforms, or your team already knows Dart. Both publish real apps to both stores, and we build with either.
The honest difference is less about performance than about people. Both frameworks can produce smooth, fast apps for bookings, dashboards, field work and commerce. What differs is who can maintain the code after launch. A Vancouver company with a React front end and a Node API can hire from the same pool for web and mobile; the same company choosing Flutter would add a second language to its hiring plan.
Flutter draws its own interface, so an app looks identical on every phone. React Native uses the platform's own components, so it looks slightly more “at home” on each operating system. Some brands prefer one, some the other.
Our rule of thumb in scoping: if more than half the mobile features depend on logic you already maintain in JavaScript, React Native wins. If the app is a fresh product with its own logic, the decision is open and we compare quotes for both. Our sibling page on Flutter app development for Canadian companies covers that side.
Building a bilingual English and French React Native app
A React Native app can switch between English and French cleanly if translation is planned from the first screen. We keep every visible string in language files, format dates, currency and numbers by locale, and test layouts with French text, which often runs longer than English.
The typical setup uses a translation library with separate English and French files, a language picker in settings, and a default taken from the phone's language. Push notification text and store listings need both languages too, and App Store Connect and Play Console both let you add a French listing alongside English.
We write English. For French, you supply or approve the translated copy, either from your own team or a translator you trust; we wire it in and check that nothing is cut off or misaligned. If your business serves Quebec, read our pages on Quebec's French-language website rules and bilingual website builds, and confirm your obligations with your own lawyer.
- Strings stored outside components from the first sprint.
- Screens tested with the longest French variants before sign-off.
- Locale-aware formatting for dates, currency and phone numbers.
- Separate English and French store descriptions and screenshots.
PIPEDA and data residency for a React Native app built outside Canada
Building the app in India does not mean your users' data must leave Canada. The code is written remotely, but the database, file storage and backups can live in a Canadian cloud region you own, such as AWS Canada (Central), and we work inside your account with access you control.
The Office of the Privacy Commissioner of Canada says PIPEDA does not prohibit organizations from transferring personal information to another jurisdiction for processing, but the organization stays accountable and should use contracts to keep a comparable level of protection. Its cross-border processing guidance also asks organizations to tell people clearly when data may be processed abroad. Alberta, British Columbia and Quebec have their own private-sector privacy laws, which your lawyer can map to your situation.
On the build side, we collect only the fields you need, store tokens in the phone's secure storage rather than plain app storage, encrypt traffic, restrict admin access by role and keep audit logs for sensitive actions. We use test data during development wherever possible. Compliance itself remains your responsibility, confirmed by your own counsel; our job is to give them a system that makes those obligations practical. The PIPEDA-minded build page goes deeper.
Publishing a React Native app on Google Play and the App Store from Canada
You register both developer accounts in your company's name: Google Play charges a one-time US$25 fee and the Apple Developer Program costs US$99 a year. We are invited as users, prepare the builds and listings, and submit for review, but the apps, reviews and revenue stay with you.
Store rules change every year, and a React Native app has to keep up like any other. Google's documentation states that from August 31, 2026, new apps and app updates must target Android 16 (API level 36) or higher to be submitted to Google Play, with extension requests possible through Play Console. See Google's target API level requirements. Keeping React Native and Expo versions current is how we stay ahead of these deadlines.
Apple has its own checkpoints. If your app offers social sign-in such as Google or Facebook as the main login, guideline 4.8 asks for an equivalent login option that limits data collection to name and email and lets users keep their email private. Privacy nutrition labels, account deletion, permission explanations and screenshots for each device size are all part of the submission checklist we run.
What does React Native app maintenance involve after launch?
Maintenance for a React Native app means keeping three things current: the framework and its libraries, the store requirements, and your own features. Skipping upgrades for a year or two is the most common reason a cross-platform app becomes expensive to change.
Every new build includes two months of free maintenance after launch. During that time we fix bugs, handle crash reports, answer store review questions and apply minor library updates. After that, care plans start at US$120/mo and cover React Native and Expo SDK upgrades, security patches, store policy changes and small improvements. Larger features are quoted separately so you always know what you are paying for.
Because the code sits in your repository and follows the same patterns as your web app, you can also take maintenance in-house at any point. We leave a handover document covering the build commands, environment variables, release channels, where credentials live and how to run the app locally.
- Crash monitoring and a monthly review of the top issues.
- Planned upgrades rather than emergency ones before a store deadline.
- Dependency audits to catch abandoned or vulnerable libraries.
- Release notes your support team can share with customers.
Working with a React Native team in India from Canada
The time difference works in your favour if you plan around it. India is 9.5 hours ahead of Toronto and Montreal during daylight saving time, so a 9 a.m. Eastern call is 6:30 p.m. in India. Vancouver's 8 a.m. is 8:30 p.m. in India. Work you review during your day is often updated by the next morning.
We send an itemised USD quote within about two working days of a scoping call, and nothing is billed before you approve it in writing. Payments go by milestone through Wise, bank wire or PayPal, and you can pay from a CAD account. Contracts spell out scope, milestones and ownership; see our terms for the standard points.
Ownership is simple: your GitHub or GitLab organization, your Expo account, your Apple and Google developer accounts, your cloud account. We are invited as members and removed when you choose.
Days 1–3
Kickoff call in your morning. We confirm the screen list, access to your repository and API documentation, and the accounts you need to create.
Days 4–7
Shared packages extracted from your web code, the mobile project created on Expo, and the first screen designs sent for comments.
Days 8–11
Login and one core screen running against your real staging API, installed on your phone through TestFlight and a Play testing track.
Days 12–14
First milestone demo on a call, a written list of what is done and what is next, and your feedback folded into week three.
How to choose a React Native app development team in Canada or abroad
Choose a team that asks about your existing stack in the first conversation. A good React Native partner wants to see your web repository, your API and your design system before quoting, because reuse is the reason you are choosing the framework in the first place.
Ask each candidate these questions and compare the answers side by side:
- Will the app live in our repository and publish under our store accounts from the first build?
- Do you default to Expo, and when would you move to a bare setup?
- Which code will you share with our web app, and how will shared packages be versioned?
- How do you decide between card checkout and Apple or Google billing for our products?
- What is OTA-safe in your release process, and how do you roll back?
- What happens after launch, and what does maintenance cost?
- Who exactly writes the code, and will we talk to them directly?
Red flags include a quote with no screen list, an insistence on publishing under the developer's own account, no mention of store policies, and vague answers about upgrades. Marketplaces such as Upwork and Toptal can connect you with individual React Native developers; with a single freelancer, you take on the project management and testing yourself. Our page on outsourcing app development safely lists more checks.
Worked example: a Calgary property manager adds a React Native tenant app
This is a hypothetical scenario to show how scoping works. Say a Calgary property management business already runs a React web portal where staff track units, leases and maintenance requests, backed by a Node API. Tenants currently email or phone in repairs, and staff want a mobile app so tenants can log requests with photos.
In scoping we would find that the web code already defines the maintenance-request type, its statuses and the validation rules. Those move into a shared package. The tenant app then needs login, a request form with camera access, a request history, push notifications when status changes and a French option for tenants who prefer it. Staff keep using the web portal; nothing about their workflow changes except that requests now arrive with photos and unit numbers filled in.
The quote would list the mobile app from US$600, a small API extension for photo uploads and push tokens, and the monorepo setup. There is no payment feature in version one, which keeps the scope tight. A first release could reach the stores in roughly six to eight weeks, with rent payments or a chat feature considered only after tenants use the app.
The lesson is not the numbers; it is the order. Reuse what exists, ship the one workflow tenants need most, then let real usage decide what comes next.