(Cross Multi) Platform - leotm/react-native-template-new-architecture GitHub Wiki
Which now?
- team comp
- existing app? (brownfield)
- product requirements
- company resources
- maturity (lindy effect)
- devXP (buildtime / debugging / error monitoring)
- js/npm eco
- platforms
- simplicity
- arch (lifecycle)
- (declara/impera)tive/both
- (iteration) speed
- perf
- typing: static analysis / unsound/dynamic (build/compile) / sound/static (run/exec)
- accessibility
- ai integration support
Native (Google/Apple)
2013 Xamarin (Microsoft)
- C# -> native(+Windows)
- succeeded by .NET MAUI, 2024 ☠️
2014 NativeScript (Telerik)
- js/ts -> native
- 2015 official
- 20:15 angular ☠️ 19 vue 20 svelte 23 react/solid
2015 React Native RN (Meta)
- js/ts -> bridge new arch -> native
- build: JSI codegen TurboModule(lazy) jsi::HostObject's
- js/ts TurboModule(APIs)/FabricComponent(UI) type spec (codegen) -> JSI(C++) -> native
- (e.g. onPress) native UI event (main/UI thread) Fabric -> ...
- (e.g. battery) native event sub (native thread) TurboModule -> ...
- (e.g. app logic) js event (js thread) -> JSI(C++) -> TurboModule -> ...
- ... JSI(C++) -> event loop [React Fiber (async): update tree state/props, logic, new WIP tree, diff algo... RN Fabric (JSI): new shadow(C++) tree in RAM] (js thread) -> Fabric: yoga shadow tree diff, calc mutations queued (shadow/bg thread) -> Fabric: native UI update (main/UI thread)
- js OTA: codepush expo eas)
- js VM: debug: V8, prod: JSC/(Static)Hermes/any
2017 Flutter (Google)
- Dart <-> native bridge
- no VM (prod)
- UI: canvas (component updates have no effect)
- Material Design (Android/iOS)
- Cuptertino (native iOS)
2019 Svelte Native
- TODO
2020 KMM (JetBrains)
- write native ez
- no VM
- shared logic
- keep native UI
- no eco, works w native platform eco's
- SwiftUI / Jetpack Compose
- no intermediate layer
- no interop bottlenecks
2020 .NET Multi-platform App UI (.NET MAUI) Microsoft
- C#, XAML -> native(+Windows/macOS)
- 2022 official
2025 LynxJS (ByteDance)
- TODO
2025 Valdi (SnapChat)
- TODO
2026 Angular Native
- web: Angular
- RN Fabric
- Expo (go, eas, rn-screens)
- e.g. @ng-native/components: rn-gesture-handler, rn-reanimated, rn-safe-area-context, rn-keyboard-controller, @rn-masked-view/masked-view
- comparison