Authentication and user management for your React Native app — one package, both platforms.
Frontegg is a self-served user management platform for modern SaaS applications. Drop this SDK in and your app gets a production login screen, a live session, and a user object — without you writing an auth flow or touching a token.
| Hosted or embedded login | Frontegg's login box, or your own UI on top of the API |
| Every method your tenants need | Email, social, SSO, magic link, passkeys, MFA and step-up |
| Sessions that stay alive | Tokens refresh in the background, on both platforms |
| Built for multi-tenant SaaS | Multi-tenancy, RBAC, entitlements and multi-region support |
npm install @frontegg/react-nativeThen the peer dependencies:
# Expo
npx expo install @react-native-async-storage/async-storage @react-navigation/native @react-navigation/native-stack react-native-screens react-native-safe-area-context
# Bare React Native
npm install @react-native-async-storage/async-storage @react-navigation/native @react-navigation/native-stack react-native-screens react-native-safe-area-contextRequirements: React Native 0.63+ · iOS deployment target 14+ · Android API 26+ with JDK 17 and AGP 7.4+. Passkeys additionally need iOS 15+ and Chrome Custom Tabs on Android.
1 · Allow the redirect URLs. In the Frontegg Portal, under [ENVIRONMENT] → Authentication → Login method, turn hosted login on and add the shared URL plus one per platform:
{{FRONTEGG_BASE_URL}}/oauth/authorize
# iOS
{{IOS_BUNDLE_IDENTIFIER}}://{{FRONTEGG_BASE_URL}}/ios/oauth/callback
# Android
{{ANDROID_PACKAGE_NAME}}://{{FRONTEGG_BASE_URL}}/android/oauth/callback
https://{{FRONTEGG_BASE_URL}}/oauth/account/redirect/android/{{ANDROID_PACKAGE_NAME}}
2 · Configure the native projects. iOS reads a Frontegg.plist; Android takes its domain and
client ID from build.gradle. Both are covered step by step in the
Setup guide — this is the one part that is not
JavaScript, and it differs per platform.
3 · Wrap your app.
import { NavigationContainer } from '@react-navigation/native';
import { FronteggWrapper } from '@frontegg/react-native';
export default function App() {
return (
<FronteggWrapper>
<NavigationContainer>
{/* your navigator */}
</NavigationContainer>
</FronteggWrapper>
);
}4 · Read the authentication state anywhere below it.
import { View, Button } from 'react-native';
import { useAuth, login } from '@frontegg/react-native';
export function MyScreen() {
const { isAuthenticated } = useAuth();
return (
<View>
{isAuthenticated ? <Profile /> : <Button title="Login" onPress={login} />}
</View>
);
}| Guide | What it covers |
|---|---|
| Get Started | Requirements, environment prep, installation |
| Setup | iOS and Android native configuration |
| Usage Examples | Hooks, login flows, error handling |
| API Reference | Every method, hook and type the SDK exports |
| Advanced Topics | Complex integration scenarios |
Full platform documentation lives at developers.frontegg.com.
A complete integration you can run: example.
No Frontegg account yet? Sign up free.
Questions, or something broken? Reach the team at support.frontegg.com or open an issue.
Licensed under the LICENSE in this repository.
