Cross-platform development is one of the most dynamically evolving areas of mobile engineering. According to Statista (2025), 42% of mobile developers use Flutter or React Native in their projects. Platform channels, bridges and native modules are the foundation of cross-platform architecture.
Key takeaways
Flutter is Google's framework for creating native applications from a single Dart codebase. To interact with platform code (Kotlin, Swift), Flutter uses Platform Channel. It is a bridge through which Dart code calls native functions and gets the result. Cross-platform mobile app development with Flutter is the fastest growing segment of mobile development in 2025–2026.
Method Channel is the main Flutter <-> Native communication channel. On the Dart side: MethodChannel('com.example/channel').invokeMethod('getBatteryLevel'). The message is encoded in StandardMethodCodec (binary). On the native side, a MethodChannel is registered and handles the call. MethodChannel is asynchronous — the result is returned via Future. Alternative: EventChannel for event streams.
BasicMessageChannel is a lower-level channel for sending strings/bytes without a "method-args" structure. Used for custom protocols. All Platform Channel API goes through Flutter Engine, which serializes/deserializes messages.
dart:ffi (Foreign Function Interface) — direct call of C functions from Dart without platform channels. FFI is faster than Method Channel (0 serialization overhead). Used for performance-intensive operations: audio processing, cryptography, graphics engines. Skia is Flutter's render engine (2D graphics). Impeller is Flutter's new render engine replacing Skia. Impeller compiles shaders ahead-of-time, eliminating jank (frame stuttering) on first launches. At IT Sectr we switched to Impeller in 2025 — the difference in animation smoothness is immediately noticeable.
React Native is Meta's framework for cross-platform mobile app development in JavaScript/TypeScript. React Native renders components into native UI elements. The architecture has evolved: old Bridge → new Fabric with JSI.
Bridge is the old React Native architecture. The JS thread serializes messages to JSON and sends them through an async queue to the native thread. This creates delays (bridge round-trip ~1 ms). Fabric is the new architecture where JS and native UI threads communicate synchronously through JSI (JavaScript Interface). Fabric injects native views directly, without a bridge. Fabric is a key milestone in cross-platform development, accelerating rendering up to 2x.
JSI (JavaScript Interface) is a C++ API that allows JavaScript to directly call native functions and share memory. JSI replaced Bridge's JSON serialization. The new JSI-based architecture is a crucial achievement in cross-platform development, defining mobile app performance. Turbo Module is a new way of writing native modules for React Native. Unlike old Native Modules, Turbo Module is loaded lazily and uses JSI.
Hermes is a JavaScript engine from Meta, optimized for React Native. Hermes compiles JS code to bytecode at build time, speeding up mobile app startup and reducing memory consumption in cross-platform development. Codegen is a native code generator based on TypeScript types. Codegen automatically creates native modules and JSI bindings, reducing manual work.
| Parameter | Flutter | React Native | KMP |
|---|---|---|---|
| Language | Dart | JavaScript/TypeScript | Kotlin |
| Architecture | Skia/Impeller (custom render) | Fabric + JSI (native UI) | Native SDK (each module) |
| Native bridge | MethodChannel (Dart ↔ Native) | JSI (JS ↔ C++ ↔ Native) | expect/actual (Kotlin ↔ Native) |
| UI | Custom (Skia/Impeller) | Native components (UIKit/Android Views) | Native UI (Jetpack Compose, SwiftUI) |
| Render engine | Skia or Impeller | Native (UIView/View) | Native |
Flutter renders everything itself via Skia/Impeller — this gives a unified UI on both platforms. React Native uses native UI components — it looks like a native app. KMP does not handle UI — it only shares business logic, UI remains native. The choice depends on the priority: unified UI (Flutter) or maximum nativity (React Native/KMP).
Kotlin Multiplatform (KMP) is JetBrains technology for shared code between Android and iOS. Unlike Flutter and React Native, KMP is an alternative approach to cross-platform development: it does not replace UI, but shares business logic, network requests, data models and repositories. UI remains native: Jetpack Compose for Android, SwiftUI for iOS.
expect — declaration of a function or class in the common module (commonMain) that has a platform implementation. Cross-platform development with KMP uses expect/actual: actual is the concrete implementation for each platform (androidMain, iosMain). Example: expect fun getDeviceId(): String — actual on Android uses Settings.Secure, on iOS — UIDevice.current.identifierForVendor.
Kotlin/Native — a Kotlin compiler into a native binary (iOS framework). It allows running Kotlin code on iOS without JVM. Kotlin/Native uses LLVM for compilation, providing performance close to Swift. Kotlin/JS — compilation of Kotlin to JavaScript for web and React Native projects.
Build tools of cross-platform mobile app development — the bridge between code and final binary. Gradle KTS manages the Android part, CocoaPods Plugin manages KMP iOS dependencies, XCFramework manages native library distribution.
Gradle KTS — Gradle configuration using Kotlin DSL instead of Groovy. KTS supports autocomplete in Android Studio, type checking and refactoring safety. Example: plugins { id("com.android.application") } instead of apply plugin: 'com.android.application'. Recommended for all new projects.
CocoaPods Plugin — a Gradle plugin for KMP that publishes the shared module as a CocoaPods pod. An iOS developer adds it via Podfile. XCFramework — Apple's binary library distribution format. XCFramework contains binaries for multiple architectures (arm64, x86_64) and platforms (iOS, macOS, watchOS). In KMP the shared module is exported as XCFramework for iOS.
Frequently asked questions
Flutter offers better performance (Skia/Impeller), a single UI codebase and high stability in cross-platform development. React Native — huge community, easy transition from web development and flexibility through JSI. IT Sectr recommends Flutter for UI-centric projects, React Native if the project requires frequent native code.
Flutter sends a message via MethodChannel on the Dart side. The message is encoded into binary format and transmitted to the native side (Kotlin/Swift), where it is processed and returns the result. All communication in mobile app development is asynchronous.
expect is a declaration of a function or class in the common code that has a platform implementation. actual is the concrete implementation for each platform (Android/iOS). This is KMP's mechanism for conditional compilation without a preprocessor.
Bridge is the old architecture where messages are serialized to JSON and transmitted asynchronously through a queue. Fabric is the new architecture with synchronous native function calls via JSI, eliminating delays and improving mobile app performance.
Hermes is a JavaScript engine from Meta, optimized for React Native. It compiles JS to bytecode at build time, speeding up app startup by 2–3 times and reducing memory consumption.
Summary
We will develop a mobile application turnkey
IT Sectr creates iOS and Android applications for startups and businesses since 2017. We will advise you and propose the best solution.