The project's README from github.com/ng-native/ng-native. As one markdown file: README.md.
Angular apps, rendered as real native iOS and Android views.
Angular Native renders Angular components straight onto React Native's Fabric renderer, so a
<view> 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.
import { Component, signal } from '@angular/core';
import { Pressable, SafeAreaView, Text } from '@ng-native/components';
@Component({
selector: 'app-root',
imports: [Pressable, SafeAreaView, Text],
template: `
<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>
`,
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.
@keyframes, plus a Tailwind preset with ios: and android: variants.@angular/router over native stacks, tabs, headers, modals and sheets,
with guards, resolvers, lazy routes and deep links.animate.enter and animate.leave, CSS transitions, Animated and Reanimated
worklets.ng add @ng-native/schematics) and
Nx (nx add @ng-native/nx).@ng-native/web renders the same components to the DOM.The examples are complete apps: a bank (wallet), a habit tracker (habits), a music
player (music), a run tracker with maps (runs) and a notes app (notes).
| 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 |
<ng-icon> 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. |
Angular 22, Expo SDK 57 and React Native 0.86 with the New Architecture, on Node 22.18 or later.
Angular Native is in alpha, so APIs can change between 0.x releases. The known limitations list
every gap with its workaround.
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.
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.
Thanks goes to these wonderful people:
erKam 💻 |
Chau Tran 💻 |
Stavros Thalassinos 💻 |
This project follows the all-contributors specification. Contributions of any kind welcome!