In short
Seriously in the running today are React Native and Flutter, plus .NET MAUI in houses that work in C#. The difference between the first two is less about performance than about construction: React Native uses the system's controls, Flutter draws its own. In practice the deciding factor is usually the language your team already knows.
- Seriously in the running
- Two or three
- Usually decides it
- The language
- Our choice
- React Native
-
They use what the system provides
React Native and .NET MAUI produce the actual controls of iOS and Android. A list there is a system list. That feels right on each platform and automatically inherits whatever Apple and Google change about interaction and accessibility.
-
They draw everything themselves
Flutter brings its own drawing layer and paints every control itself. The result is exactly the same picture on both platforms, independent of the system. That is an advantage when a distinct visual language matters, and a drawback when the app should feel native to the platform.
-
They show a website in a shell
Ionic and Cordova run an embedded browser. That is the shortest path from an existing website to something in the store, and the longest to something that feels like an app.
| Cross-platform frameworks by language, construction, backer and status | Language | Construction | Backed by | As of |
|---|---|---|---|---|
| React Native | JavaScript, TypeScript | The system's own controls | Meta, plus a large community | Active |
| Flutter | Dart | Its own drawing layer | Active | |
| Ionic mit Capacitor | Web technologies | Embedded browser | Ionic | Active |
| .NET MAUI | C# | The system's own controls | Microsoft | Active, successor to Xamarin |
| Apache Cordova | Web technologies | Embedded browser | Apache | Rare in new projects |
| Xamarin | C# | The system's own controls | Microsoft | Support ended 1 May 2024 |
-
The language your team already knows
TypeScript runs across our web, backend and app work. Developers for it are easier to find than for Dart or C#, and knowledge carries between projects.
-
Fixing things past the store
With Expo, corrections at the JavaScript layer can ship without waiting for another store review. For everything that does not touch the native layer, that shortens the route considerably.
-
We run it ourselves
Our own products run on this stack, for years now and in the stores. We do not recommend anything whose maintenance we are not paying for ourselves.
-
Flutter, when the interface should be identical everywhere
Flutter draws its controls itself instead of using the system's. That produces exactly the same picture on both platforms, and it is the better choice when a distinct visual language matters more than the feel of each platform. The price is Dart.
-
.NET MAUI, if you already work in C#
If your backends run on .NET and the team knows C#, one language throughout counts for more than React Native's larger community.
-
Ionic, when it is a website at heart
If your content comes from the web anyway and just needs to be available as an app as well, the embedded browser is the shortest path. The moment the app should feel like an app, that advantage is gone.
Which framework is the best?
There is no general answer, and anyone who gives one is selling something. React Native and Flutter are both sound. In practice the deciding factors are the language your team knows and who you will be able to hire in two years.
What is the actual difference between React Native and Flutter?
React Native uses the system's controls, Flutter draws its own. Almost everything else follows from that: React Native feels more natural on each platform, Flutter looks exactly the same on both. On top of that comes the language, TypeScript against Dart.
How big are the performance differences?
Between React Native and Flutter they are not decisive for ordinary applications. The gap only becomes clear against the embedded-browser frameworks. If you come across finely graded percentages online, ask about the measurement method, and usually there is none.
Is Xamarin still an option?
No. Microsoft ended support on 1 May 2024. The successor is .NET MAUI. Existing Xamarin apps should be moved there.
Can I change framework later?
The interface has to be rebuilt, there is no way around it. What you can salvage depends on how cleanly business logic, data access and interface are separated. Separate them from the start and a switch becomes a project rather than a rewrite.
Can cross-platform apps reach every device function?
React Native, Flutter and .NET MAUI reach everything, if necessary through a native module of your own. With the embedded-browser frameworks, access is narrower and depends on additional plugins.
Which language does my team have to learn?
React Native: JavaScript or TypeScript, usually already there. Flutter: Dart, a new language for almost every team. .NET MAUI: C#, already there if you work in .NET anyway. Ionic: web technologies.
What do you work with?
With React Native and Expo, including for our own products. If a project fits another path better, we say so in the first conversation instead of making it fit.