Mobile development approaches

Approach Description

Pure Native

Flutter

React Native

PWA

Proprietary SDK and development tool chain for proper native capabilities (OS and hardware) utilization

2D rendering platform for custom widget-style cross-platform development aiming smooth UI visualization

React JS & JSX approach adopted for cross-platform development, with bridging JS calls to native APIs and leveraging native UI components (not browser)

Building HTML/CSS/JS application, "installable" as a mobile native app and leveraging ServiceWorker model to run offline-ready background tasks locally on the device

Benefits

Pure Native

Flutter

React Native

PWA

(tick) Dedicated team has unlimited access to all platform specific features for desired UI, without cross-platform coding performance tradeoff.

(tick) Dedicated team is concentrated on maximizing dev skills on the target platform, able to optimize a feature implementation according to platform capabilities.

(tick) In a case of a massive legacy framework or libraries usage, it may be the only feasible approach for development

(tick) Due to the Flutter's nature as a custom UI rendering platform, it allows to build designed UI, for any screen size and ratio factor, still capable to show high Frame Rate metrics for complex animations (after optimizations)

(tick) Skia 2D engine based, same pixel-perfect UI may be completely reused across platforms and form-factors, covering even older devices.

(tick) With the widget UI in-code development style with leveraging Dart syntax, learning curve is smooth for new developers - no need to learn a separate layout language. This is the only platform which is friendly for either native or web developers.

(tick) React Native gives an opportunity to reuse web developers skills, especially with React JS, on cross-platform mobile.

(tick) UI is mapped into true native UI components - app is able to show familiar look & feel while implemented in a Web dev paradigm.

(tick) Same UI layout may be reused across platforms

(tick) PWA does not depend on digital app distribution platforms like AppStore or Play Market, and can be published or updated at any time,

(tick) With no limitations on JS frameworks and UI approaches, PWA enable easiest project Team / Infrastructure / Assets / UI / Code reuse for Mobile + Web development.

(tick) With no extra costs

Cons

Pure Native

Flutter

React Native

PWA

(warning) Dedicated teams introduce multiple projects with own lifecycle but common external dependencies and almost no room for sharing code and app architecture

(warning) Compared to some cross-platform approaches, hot code reload is not possible yet. This impacts development speed.

(warning) Flutter community depends on existing widgets to build high-quality apps - Flutter does not use native UI components but instead renders own with Skia 2D engine on target platforms.

(warning) Currently Flutter shows memory and CPU overhead for simple apps.

(warning) There's a relatively higher performance penalty while passing messages through React Native Bridge - native & JS sides sync mechanism. This issue is visible while scrolling big lists (but will be fixed with the new JSI architecture)

(warning) Due to the nature of transforming declarative JSX UI into native UI, there's some sort of degradation of demanded native look & feel

(warning) Being fully browser-dependent, only limited set of mobile capabilities is available. On iOS, some major issues are still presented. On Android, even Chrome versus Android UX inconsistency is possible yet.

(warning) Is some cases for consumer apps, publisher may want to present PWA on App Stores which is not easy and requires tricks (lead to higher rejection risks)

(warning) Custom interoperability with native APIs and 3rd party libraries seems to be not possible.

(warning) Extra effort to re-test PWA on different browsers. iPadOS can run in mobile or desktop mode enabling different UX - which also increases QA efforts

Last updated