My Profile Photo

Chang Min Park


Senior Software Engineer at Yahoo!



Cross-Platform Mobile Frameworks: Flutter, RN, and the WebView Trap

One codebase — two very different architectures

“Cross-platform” usually means “write once, run on iOS and Android.” That promise hides a fork: does your UI run in a WebView, or does JavaScript/Dart/C# call into native widgets (or draw its own)? Teams that miss this distinction budget for React Native and ship something closer to Cordova — then wonder why scroll and keyboard feel wrong.

In 2022 the question for small teams was cost and reuse across Flutter, Xamarin, React Native, and Titanium. The comparison still holds on intent; the market moved on status. Xamarin became .NET MAUI; Appcelerator Titanium is effectively legacy. Flutter and React Native absorbed most greenfield cross-platform work. What has not changed is the hybrid-vs-native-bridge confusion — still the most common misunderstanding in mobile architecture threads.

The comparison table

Comparison table of Flutter, Xamarin, React Native, and Titanium cross-platform frameworks

Figure 1. Language, UI model, and platform linkage for four cross-platform options (2022 snapshot).

Flutter (Google, Dart)

Renders its own widget tree via Skia/Impeller — no platform UI components by default. UIs look identical on iOS and Android, which helps design systems and reduces “why does this look different on Pixel?” bugs.

Tradeoff: platform-specific polish (SF Symbols quirks, Material motion on older Android) takes extra work. Plugins that wrap native SDKs often require platform-specific code that does not share across iOS and Android.

React Native (Meta, JavaScript/TypeScript)

Maps React components to native views through the bridge (and increasingly the New Architecture’s JSI). Feels closer to platform defaults; accessibility and text often inherit OS behavior for free.

Tradeoff: bridge overhead and layout surprises on complex lists; heavy reliance on npm means you inherit native module quality from the community.

Xamarin / .NET MAUI (Microsoft, C#)

Xamarin.Forms mapped C# to native controls — similar linkage model to React Native. Microsoft has consolidated the story into .NET MAUI; new enterprise Microsoft shops should start there, not greenfield Xamarin. Strength: deep .NET ecosystem and enterprise tooling; weakness: smaller mobile-native hiring pool than JS or Dart.

Titanium (Appcelerator, JavaScript)

Also bridged JS to native APIs without WebView, popular in enterprise a decade ago. Maintenance and community have shrunk; treat it as a historical reference when reading older comparisons, not a 2026 default.

Third-party libraries — where “shared code” stops

Class-library-heavy apps (maps, payments, analytics, ML) hit the same wall on every bridge framework: the shared layer ends at the plugin boundary. Flutter’s federated plugins and React Native’s native modules both push you to write Swift/Kotlin for anything non-trivial. Flutter’s table in Figure 1 is optimistic about reuse; in production, plan for platform folders.

Symptom: the demo compiles in a week; the payment SDK integration takes a month per platform.

Hybrid WebView is not cross-platform native-bridge

This is the confusion worth a whole section:

  React Native / Titanium / Flutter (mostly) Ionic / Cordova / PhoneGap
UI runtime Native views or custom engine HTML/CSS/JS in WebView
Scroll/lists Platform or engine recycling Browser layout
Typical pain Bridge, plugin gaps Scroll jank, keyboard, memory

All may use JavaScript. Only the second column is a hybrid app in the sense of Types of Mobile Apps. Marketing pages that lump “JavaScript mobile” together cause teams to pick the wrong tool.

User tap
   │
   ├─ RN/Titanium ──► JS bundle ──► native view tree
   │
   └─ Ionic/Cordova ──► JS ──► WebView ──► browser layout engine

How to choose (2026-aware)

Team / product Reasonable first pick
Strong web/React, startup speed React Native
Custom UI, design-system control Flutter
Microsoft stack, enterprise LOB .NET MAUI
Web app already shipped, thin native shell Ionic/Capacitor (know the WebView ceiling)
List-heavy, ads, platform text fields Native Compose/SwiftUI (cross-platform may fight you)

References