Angular Native
Angular apps, rendered as real native iOS and Android views.
Angular Native renders Angular components straight onto React Native's Fabric renderer, so a
is a UIView on iOS and an android.view.View on Android, and React is never in the render
path. You write standalone components, signals, Signal Forms and @angular/router routes as you
would for the web, then create, run, hot reload and ship the app with Expo.
npx create-expo-app@latest my-app --template @ng-native/template
cd my-app && npx expo start
Scan the QR code with Expo Go, or press i or a for a simulator.
A component
import { Component, signal } from '@angular/core';
import { Pressable, SafeAreaProvider, SafeAreaView, Text } from '@ng-native/components';
@Component({
selector: 'app-root',
imports: [Pressable, SafeAreaProvider, SafeAreaView, Text],
template:
<safe-area-provider>
<safe-area-view class="screen">
<text class="title">Angular, natively</text>
<pressable accessibilityRole="button" class="button" (press)="count.set(count() + 1)">
<text class="label">Tapped {{ count() }} times</text>
</pressable>
</safe-area-view>
</safe-area-provider>
,
styles:
:host {
flex: 1;
}
.screen {
flex: 1;
justify-content: center;
gap: 12px;
padding: 24px;
}
.title {
font-size: 28px;
font-weight: 700;
}
.button {
padding: 14px;
border-radius: 10px;
background-color: #3b6ef5;
align-items: center;
}
.button:active {
opacity: 0.8;
}
.label {
color: white;
font-weight: 600;
}
,
})
export class App {
protected readonly count = signal(0);
}
Elements are Angular components imported like any other, with lowercase names. Stylesheets compile to native styles at build time.
Features
- Native rendering. An incremental renderer commits only what changed to Fabric, with native
- CSS and Tailwind. Component stylesheets, CSS variables, media queries, dark mode,
@keyframes, plus a Tailwind preset with ios: and android: variants.
- Native navigation.
@angular/routerover native stacks, tabs, headers, modals and sheets,
- Forms. Signal Forms bound to native controls.
- Expo modules as Angular services. Camera, location, notifications, secure storage, the file
- Animation.
animate.enterandanimate.leave, CSS transitions,Animatedand Reanimated
- Testing. A Testing Library API that runs components in Node against a fake Fabric, with no
- Fits existing workspaces. Generators for the Angular CLI (
ng add @ng-native/schematics) and
nx add @ng-native/nx).
- The web too.
@ng-native/webrenders the same components to the DOM.
Documentation
- Getting started
- Adding it to an existing app
- Theming and Tailwind
- Build a form
- Deployment
- How it compares
- Known limitations
- Architecture
wallet), a habit tracker (habits), a music
player (music), a run tracker with maps (runs) and a notes app (notes).
Packages
| Package | What it provides |
| ----------------------- | ---------------------------------------------------------------------------------- |
| @ng-native/platform | mount(), the Angular renderer, and HttpClient for React Native. |
| @ng-native/components | The elements: views, text, images, lists, inputs, pressables, gestures, animation. |
| @ng-native/router | Native stack and tab navigation over @angular/router. |
| @ng-native/device | Keyboard, screen, color scheme, app state, accessibility, deep links and more. |
| @ng-native/expo | Expo's modules as Angular services and directives. |
| @ng-native/icons | with the @ng-icons sets, drawn as native SVG. |
| @ng-native/metro | The Metro preset: the Angular compiler, the CSS compiler and hot reload. |
| @ng-native/tailwind | The Tailwind preset and its platform variants. |
| @ng-native/testing | Testing Library for Angular Native, running in Node. |
| @ng-native/web | A DOM renderer for the same components, with a Vite preset. |
| @ng-native/schematics | ng add and ng generate for Angular CLI workspaces. |
| @ng-native/nx | nx add and an app generator for Nx workspaces. |
| @ng-native/fabric | The framework-agnostic retained tree and commit engine the renderer is built on. |
Requirements
Angular 22, Expo SDK 57 and React Native 0.86 with the New Architecture, on Node 22.18 or later.
Status
Angular Native is in alpha, so APIs can change between 0.x releases. The known limitations list
every gap with its workaround.
Contributing
See CONTRIBUTING.md for setting up the workspace, running the tests and what a pull request needs. Report a vulnerability privately, as SECURITY.md describes. Everyone taking part is expected to follow the Code of Conduct.
License
Angular Native is an independent open-source project. It is not affiliated with or endorsed by Google, the Angular team or Expo. Angular is a trademark of Google LLC.
Contributors ✨
Thanks goes to these wonderful people:
erKam 💻 |
Chau Tran 💻 |
Stavros Thalassinos 💻 |
Luis David Lopera 💻 |
Ajit Panigrahi 💻 |
Anthony 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!