Skip to content
PN Scripts

Development

React Native or Flutter: how to choose, and when to go native

  • PN Scripts Team
  • 6 min read

Choose React Native if your team already works in JavaScript or TypeScript and React, or if you want the app to use each platform's own interface components. Choose Flutter if you want a highly custom interface that looks the same on iOS and Android, and your team is willing to work in Dart. Both are mature enough for production apps, so the deciding factors are usually the people who will maintain the code and the interface you need. Go fully native, with Swift on iOS and Kotlin on Android, when the app depends heavily on device hardware, platform extensions or the newest operating system features.

#How React Native and Flutter differ

Both frameworks let you write most of an app once and ship it to iOS and Android. They take different routes to the screen.

React Native, started by Meta and maintained with its community, uses JavaScript or TypeScript and the React programming model. Its components map to native platform views, so a button or a text field in a React Native app is a real iOS or Android view. Many teams use Expo, a set of tools and services around React Native, for builds, updates and common device APIs.

Flutter, maintained by Google, uses the Dart language and draws its own widgets with its own rendering engine. It does not use the platform's interface components, which gives it precise control over every pixel and consistent rendering across devices. It ships widget sets that follow Material Design and the iOS style.

React NativeFlutter
LanguageJavaScript or TypeScriptDart
How the interface is drawnNative platform viewsIts own widgets, drawn by Flutter's engine
Default lookFollows each platformThe same on both platforms
Overlap with a web teamReact skills and some TypeScript code carry overMostly separate from a typical web stack
Access to native codeNative modulesPlatform channels and plugins

#Start with your team's skills

The framework your team can maintain is usually a better choice than the one that wins a feature comparison. An app lives for years after launch, and every OS update, store policy change and new feature has to be handled by someone.

  • If your web product is built with React, React Native lets the same developers read and change the mobile code, and you can share validation rules, API clients and types written in TypeScript.
  • If your team already writes Dart, or is starting fresh and prefers one toolkit that controls the whole interface, Flutter is a strong option.
  • If you have no developers in-house and will rely on a supplier, ask who will maintain the app after launch and in which language. Pick the framework the maintainers know well.

#Decide what the interface should feel like

Ask whether the app should feel like a standard iPhone app on iOS and a standard Android app on Android, or look like your brand everywhere.

Because React Native uses platform views, default controls, text input, scrolling and accessibility features behave the way users of each platform expect. That suits apps built around forms, lists and account screens, such as customer portals, booking apps and internal tools.

Flutter's own rendering suits interfaces with custom visuals, heavy animation or a strong brand identity that must look identical on every device. The trade-off is that platform conventions have to be matched on purpose where you want them. When Apple or Google change the look of their system controls, a Flutter app does not pick up the change on its own.

#Check the native features before you commit

Most apps need the camera, push notifications, location, secure storage or in-app payments, and both frameworks have established packages for these. The risk is in less common needs. Before choosing, list every device feature and third-party SDK the app will use, and check each one:

  • whether a maintained package exists for the framework, and when it was last updated;
  • whether the vendor's SDK officially supports React Native or Flutter, or only Swift and Kotlin;
  • whether the feature runs outside the app itself, like home-screen widgets, watch apps or share extensions, which are typically written in native code whichever framework the app uses;
  • how much native code your team is willing to write and maintain to fill the gaps.

Both frameworks let you write your own native modules when no package exists. Plan for that code: it needs developers who know Swift and Kotlin, and it has to be kept compatible with each new OS release.

#Think about hiring and long-term maintenance

JavaScript and React are widely used in web development, so developers who can work on React Native code are generally easier to find. Dart is used mainly with Flutter, so the pool of experienced developers is more specialized. This matters less if you work with a supplier who stays on the project, and more if you plan to bring development in-house later.

Maintenance costs effort in both frameworks. Framework upgrades can require changes to your code and to third-party packages, and a package that is no longer maintained can block an upgrade. Keep dependencies few, prefer packages with active maintainers, and upgrade on a regular schedule instead of letting versions pile up. The stores add their own pressure: Apple and Google periodically raise the SDK and tooling versions they accept for new releases, so an app that is never updated eventually cannot ship a fix.

#When fully native is the right call

Cross-platform frameworks save the most when the iOS and Android apps are largely the same. Native development in Swift and Kotlin makes sense when:

  • the app is built around device hardware, such as Bluetooth accessories, advanced camera processing, sensors or long-running background work;
  • you need new OS features as soon as Apple and Google release them, before cross-platform packages catch up;
  • the product relies on platform extensions such as widgets, watch apps or in-car integrations;
  • performance requirements are strict, for example real-time audio or video processing;
  • you only need one platform, which removes the main reason to share code.

Native means two codebases, and usually two sets of skills, for every feature that exists on both platforms. That is the cost of the closest fit to each platform. Some teams mix the approaches: a cross-platform app, with native modules for the few features that need them.

Whichever route you take, the app is only part of the product. It needs an API that returns clear errors, pages through long lists and keeps older app versions working after you release new ones. Include that work when you plan the budget; what drives the cost of a custom application explains what to account for.

#How PN Scripts can help

PN Scripts builds iOS and Android apps in React Native, Flutter, Swift and Kotlin, together with the API behind them and the releases to the App Store and Google Play. The code and the store accounts are in your name from day one. Our iOS and Android app development page describes how a project runs.

Keep reading

Keep reading

Comments

Comments

Be the first to leave a comment.

Leave a comment

Next step

pnscripts.com/contact

Talk to the team

Ask about an article, or tell us about a project you want built. We reply within one business day.

Write to us

The PN Scripts family

Other PN Scripts sites

Hosting, games and the blog each have their own site, run by the same company.

  • pnscripts.com

    PN Scripts

    Software engineering

    Custom web, mobile, API and game development, plus our open-source products and plugins.

  • games.pnscripts.com

    Games

    Games and game servers

    The home for PN Scripts games and game servers. The catalog is empty for now and fills up as titles and servers go live.

  • hosting.pnscripts.com

    Hosting

    Hosting and infrastructure

    Shared hosting, KVM VPS, dedicated servers and domains, from the same company that builds your project.

  • blog.pnscripts.com

    Blog

    Articles and field notes

    Plain articles on hosting, servers, domains and security, written by the people who work with them.

    You are here