A Feature Comparison Table

All five are free and open source; the differences are in how they work and what surrounds them.

Five cross-platform frameworks side by side (September 2026)
Feature Capacitor 8.5 243,123 Cordova 13 129 React Native 0.87 36,878 Flutter 3.47 16,720 Tauri 2.11 126,184
Language JS/TS, any web framework JS/TS JS/TS with React 7,897 Dart JS/TS front end, Rust core
UI drawn by System WebView System WebView Platform views Impeller System WebView
JS engine The WebView's The WebView's Hermes V1 11,328 , bundled None (AOT Dart) The WebView's
Native calls Async bridge, Promises Async exec() JSI, sync or async Platform channels invoke() to Rust
Native projects android/, ios/, committed platforms/, regenerated android/, ios/ or Expo 6,418 prebuild android/, ios/ src-tauri/gen/
Same code on the web Yes, unchanged Mostly Via react-native-web Canvas-based web build Yes
Fast iteration Live reload (Live Reload) None built in Fast Refresh Stateful hot reload Dev server HMR
Live updates Capawesome 178,914 Live Update Few maintained EAS Update 6,418 Shorebird 24,513 (paid tiers) Updater is desktop-only
License MIT Apache-2.0 MIT BSD-3-Clause Apache-2.0 or MIT

Two rows decide most comparisons. "UI drawn by" sets how native the app looks and how much a web team can reuse; "Native calls" sets how expensive a trip to the platform is. The rest (tooling, updates, licenses) are close enough that team skills usually settle the choice.