Native API Access

How each framework bridges application code to native device and platform APIs.

React Native

Exposes native functionality through Native Modules and, in the newer architecture, TurboModules built on JSI, allowing JS to call into native code directly (largely synchronously) rather than through the older asynchronous, serialized bridge.

Flutter

Uses Platform Channels (MethodChannel/EventChannel) to pass asynchronous messages between Dart and native platform code, with an FFI option for more direct, lower-overhead native calls. Most device features are accessed through community or first-party plugins built on this mechanism.

SwiftUI

Has direct access to native APIs because it is itself part of the native platform SDK; it calls UIKit, AppKit, Foundation, and other system frameworks directly in Swift with no bridge layer required.

Jetpack Compose

Calls Android SDK APIs directly since it’s plain Kotlin running on the Android platform; there is no bridge or serialization layer between Compose code and native Android functionality.

Kotlin Multiplatform

Uses the expect/actual mechanism to declare a common API in shared code and provide platform-specific implementations that call native APIs directly, via Kotlin/Native interop on iOS and standard JVM interop on Android.

.NET MAUI

Provides cross-platform wrappers for common device APIs, and allows direct calls into native platform APIs through .NET bindings (partial classes and dependency injection) when platform-specific behavior is needed.

Ionic

Relies on the underlying native runtime, typically Capacitor or Cordova, to bridge JavaScript running in the WebView to native device APIs through plugins; Ionic itself does not provide this bridge.

NativeScript

Exposes native iOS and Android APIs directly to JavaScript/TypeScript through a runtime metadata/reflection bridge, letting application code call native classes and methods without needing a dedicated plugin for most APIs.

Capacitor

Uses a plugin bridge to expose native functionality to web JavaScript, with a core set of official plugins (camera, filesystem, geolocation, etc.) and support for writing custom native plugins.

Xamarin

Provides full native API bindings from C#, since Xamarin.iOS and Xamarin.Android bind directly to the underlying Objective-C/Swift and Java/Kotlin SDKs via the Mono runtime.

Cordova

Accesses native device capabilities exclusively through a plugin architecture, where each plugin bridges specific native functionality (camera, contacts, etc.) to the JavaScript layer.

Unity

Accesses native platform features through native plugins (Objective-C/Swift, Java/Kotlin, or C/C++) invoked via platform-specific plugin interfaces, alongside a set of engine-provided cross-platform APIs for common device functionality.