Native, cross-platform and web apps
Compare native, React Native, Flutter and web-based (PWA) apps, and learn how to choose between them by team skills, app needs and budget. Know what Expo is before you start building.
You want to build a mobile app. Before you write code, you need to pick an approach, because the choice decides which language you learn, how many people you need and how the app feels. There are three families: native, cross-platform and web-based. This lesson explains each, with the trade-offs, so you can choose on purpose.
The problem: two platforms
Almost every phone in India runs Android. Most of the rest run iOS (iPhones). The two systems have different programming languages, different tools and different design rules. If you built the same app twice, once for each, you would write and maintain two codebases.
Every approach below is a different answer to the question: how do we avoid doing the work twice, and what do we give up?
Approach 1: Native apps
A native app is written with the platform's own tools. For Android that means Kotlin (older apps use Java) with Android Studio and Jetpack Compose. For iOS it means Swift with Xcode and SwiftUI.
The app talks directly to the operating system. New phone features are available on day one, performance is the best you can get and the app looks exactly like the platform. The cost: two codebases, two skill sets, and usually two teams. Building for iOS also needs a Mac.
Approach 2: Cross-platform frameworks
A cross-platform framework lets you write one codebase that runs on both Android and iOS. The two big ones are:
React Native (from Meta): you write JavaScript or TypeScript with React. Your components become real native views on each platform: a Text becomes an Android TextView and an iOS UILabel.
Flutter (from Google): you write Dart. Flutter draws every pixel itself with its own rendering engine, so the app looks identical on all devices. Covered in *Flutter in one lesson: how it compares* later in this track.
Expo is a set of tools and libraries built on top of React Native. It handles the build setup, gives you ready-made modules (camera, location, notifications) and lets you test on your own phone in minutes. This track uses Expo.
Approach 3: Web-based apps
A PWA (progressive web app) is a website that can be added to the home screen, works offline with a service worker and can send some notifications. No app store is needed, and your existing web skills carry over directly. The limits: weaker access to device features, and on iPhones the support is more restricted than on Android.
A hybrid app wraps a website in a native shell (tools such as Capacitor or Ionic). It can be published to the stores, and it can reach device features through plugins. The screen is still a web view, so very smooth animation and heavy lists are harder than in React Native or native code.
Comparing the approaches
| Approach | Language | Codebases | Feels native? | Device access | Best for |
|---|---|---|---|---|---|
| Native | Kotlin / Swift | 2 | Fully | Everything, first | Games, heavy graphics, deep OS features |
| React Native (Expo) | JavaScript / TypeScript | 1 | Yes, real native views | Very good | Most business and consumer apps |
| Flutter | Dart | 1 | Looks the same everywhere | Very good | Custom designs, one pixel-perfect UI |
| PWA / hybrid | HTML, CSS, JavaScript | 1 | Web feel | Limited to good, via plugins | Simple tools, content, quick launches |
This table is a guide, not a ranking. Teams ship good apps with all four.
How React Native works
Your JavaScript code runs inside a JavaScript engine on the phone (Hermes is the default one). When your code says "show this text in a box", React Native tells the platform to create real native views. When the user taps, the native view sends the event back to your JavaScript.
This is why a React Native app does not feel like a web page: scrolling, text input and gestures use the platform's own components.
How to choose
A simple decision path
- 1Ask who builds it. A team of web developers who know React should look at React Native first. A team of Java or Kotlin engineers who only target Android can go native.
- 2Ask what the app needs. Games, AR, advanced camera processing or a feature that is brand new in the OS lean native. Forms, lists, maps, login, payments and chat fit cross-platform very well.
- 3Ask how much budget and time you have. One codebase is usually cheaper to build and to maintain than two.
- 4Ask whether the store is needed. If a simple website that opens from a link is enough, a PWA may be the cheapest answer.
- 5If still unsure, build the smallest useful version in Expo. You can add custom native code later if you need it.
For your first app, and for most portfolio projects, Expo is a good default. You can run it on your own Android phone without installing Android Studio, which saves hours of setup on a slow laptop.
Common misconceptions
"Cross-platform apps are always slow." Most apps are waiting on the network or on the user, not on the CPU. A well-built React Native app is fine for the vast majority of products. Slowness usually comes from how the app is written (very long lists, heavy work on every render), not from the framework.
"React Native is just a website in an app." No. That describes hybrid apps. React Native renders native views.
"With Expo I can never use native code." You can. When you need a library that Expo does not include, you create a development build that contains it. This comes up again when we use device features.
One codebase is not one effort
One codebase does not mean zero platform work. You will still test on both systems, handle small differences (for example the Android back button) and follow each store's rules.
How this comes up in interviews
Interviewers like the question "React Native or native, and why?". A strong answer names the criteria (team skills, device features, performance needs, time and cost) and gives an example on each side rather than saying one is better. Another common question is "how is React Native different from Flutter?": React Native uses native components and JavaScript; Flutter draws its own UI and uses Dart.
Try it: Choose an approach for three apps
For each app below, pick native, React Native, Flutter or PWA, and write two sentences giving your reasons.
1. A college events app with a schedule, notifications and a QR check-in. 2. A 3D racing game. 3. A simple price list for a local shop that the owner wants live next week, without the Play Store.
Key takeaways
- Native means separate Kotlin and Swift codebases: best access and performance, highest cost.
- React Native renders real native views from one JavaScript codebase; Flutter draws its own UI with Dart.
- Expo adds tools and ready-made modules on top of React Native and is the easiest way to start.
- PWAs and hybrid apps reuse web skills but have more limited device access.
- Choose by team skills, what the app needs, and time and budget, not by hype.
Check yourself
Finishing the quiz marks the lesson as done.
1. Which statement describes React Native correctly?
2. A team of web developers who know React wants an Android and iOS app for a shop. What is the most sensible first choice?
3. What is Expo?
4. Which app is the best fit for fully native development?
5. Why can a PWA be a poor choice for an app that needs many device features?
Saved on this device. Create a free account to keep it on every device.
Practise this with Sam
A real mock interview, out loud, with an honest scorecard. Free to start.