Angular Native compared

React Native, NativeScript, Ionic and Flutter offer different rendering models, languages, ecosystems and styling systems. The comparisons below include no benchmarks or speed claims.

React Native

Angular Native uses React Native's Fabric renderer and Expo, replacing React, JSX, hooks and the reconciler. Angular's Renderer2 calls build @ng-native/fabric's retained tree, which commits like React Native's ReactFabric; see Architecture. A <view> and React Native's <View> become identical UIViews through the same C++ renderer.

@ng-native/expo wraps Expo modules as injectable services. registerExpoView(elementName, moduleName) registers any Expo module's native view; see Using a module. Expo's native implementation works unchanged, regardless of the JavaScript renderer.

On the JavaScript side, templates replace JSX, signals replace hooks and useState, and dependency injection replaces context and prop drilling. Zoneless change detection replaces re-renders on every state update. @ng-native/platform's mount() always enables zoneless mode, with no option to add zone.js; see Bootstrapping.

NativeScript

NativeScript generates synchronous JavaScript bindings for 100% of platform APIs at compile time, including marshalling of all data types (NativeScript iOS Marshalling docs). It calls Objective-C and Java APIs directly, without React Native or per-API wrappers. Angular Native instead reuses the RN/Expo module ecosystem. An arbitrary native SDK still needs a facade, as each @ng-native/expo module does.

@nativescript/angular is actively maintained: the NativeScript/angular monorepo tracks current Angular releases, including 22.0.0 (August 2026) for Angular 22. Its CSS engine emulates text-property inheritance, solving the same problem as CSS on native. NativeScript targets iOS, Android and visionOS, with no browser counterpart to @ng-native/web.

Ionic and Capacitor

A Capacitor app runs in the platform's WebView: WKWebView on iOS, android.webkit.WebView on Android. A JavaScript bridge exposes native plugin methods on window.Capacitor (How Capacitor works). Its ion-button and ion-list web components render as DOM, styled with CSS and shadow DOM. Angular is one of Ionic's three first-class framework targets, with an official, mature integration. Angular knowledge carries over, but ion-* components, browser CSS and DOM API calls do not. Angular Native's <view> and <text> render as UIViews and Android Views; see Architecture.

Ionic is closer to Angular Native's web target: @ng-native/web runs in a browser, and both are accessible by URL. Capacitor's UI always runs in a WebView. @ng-native/web's BrowserEngine instead implements the same interface as Fabric; see Native and web. A component rendered as DOM on this site renders as a UIView on a device.

Flutter

Flutter bypasses system UI widgets and paints its own onto a surface through Skia or Impeller. Impeller is the default on iOS and Android (API 29+) from release 3.27 (Impeller docs). It creates no UIViews or Android Views. This allows pixel-identical rendering across platforms, with its own animation and layout systems. Flutter reimplements controls and their look-and-feel updates, and exposes accessibility through its semantics tree rather than native views.

Angular Native's <switch> uses the platform's switch control and current OS styling. Flutter uses Dart, pub.dev and its own build system; it shares no Angular code or npm packages with Angular Native.

Styling

React Native has no CSS engine; NativeWind compiles Tailwind into style objects. Ionic uses DOM CSS, while Flutter styles widgets without a cascade. Angular Native compiles component styles with lightningcss and uses @ng-native/fabric for runtime matching, inheritance and resolution; see CSS on native. @ng-native/tailwind uses this cascade, so class="flex-1 bg-blue-500 p-4" on a <view> matches directly, without an interop layer.

Maturity

Angular Native is an alpha. It implements a retained tree with incremental commits, routing, Signal Forms, CSS, Expo and React Native facades, and Reanimated worklet animations. Release builds (expo run:ios --configuration Release / expo run:android --variant release) run on the iOS simulator and Android emulator, producing Hermes bytecode with no Angular compiler and ngDevMode false.

Many platform facades have unit tests and typechecks but no hardware verification. Simulator checks also cover CSS behaviour beyond unit tests; see the canary's verify screen and CSS on native. Treat this as a working prototype. See Known limitations for specific gaps.

When to choose which

  • Choose Angular Native for an existing Angular app or a team wanting Angular templates, signals and DI with native views and Expo modules.
  • Choose React Native for a team invested in React, where Fabric's ecosystem is largest.
  • Choose NativeScript for direct access to an unwrapped native SDK, when that matters more than React Native plugin reuse.
  • Choose Ionic for a web app that needs installation, or a web team avoiding native build tooling.
  • Choose Flutter when pixel-identical rendering matters more than native controls, or a new team has no investment in web, Angular or React ecosystems.

Angular components as native iOS and Android views, built and shipped with Expo.

An alpha. MIT licensed. Sponsor its development.

An independent project, not affiliated with or endorsed by Google, the Angular team or Expo. Angular is a trademark of Google LLC.