diff --git a/README.md b/README.md
deleted file mode 100644
index b30baec..0000000
--- a/README.md
+++ /dev/null
@@ -1,635 +0,0 @@
-# @frontegg/react-native
-
-Frontegg is a first-of-its-kind full-stack user management platform, empowering software teams with user infrastructure
-features for the product-led era.
-
-## Table of Contents
-
-- [Project Requirements](#project-requirements)
-- [Getting Started](#getting-started)
- - [Prepare Frontegg workspace](#prepare-frontegg-workspace)
- - [Setup Hosted Login](#setup-hosted-login)
- - [Add frontegg package to the project](#add-frontegg-package-to-the-project)
-- [Setup iOS Project](#setup-ios-project)
- - [Create Frontegg plist file](#create-frontegg-plist-file)
- - [Handle Open App with URL](#handle-open-app-with-url)
- - [Config iOS associated domain](#config-ios-associated-domain)
- - [Multi-apps iOS Support](#multi-apps-ios-support)
-- [Setup Android Project](#setup-android-project)
- - [Set minimum SDK version](#set-minimum-sdk-version)
- - [Configure build config fields](#configure-build-config-fields)
- - [Config Android AssetLinks](#config-android-assetlinks)
- - [Enabling Chrome Custom Tabs for Social Login](#enabling-chrome-custom-tabs-for-social-login)
- - [Multi-apps Android Support](#multi-apps-android-support)
-- [Usages](#usages)
- - [Wrap your app with FronteggProvider](#wrap-your-app-with-fronteggprovider)
- - [Login with frontegg](#login-with-frontegg)
- - [Check if user is authenticated](#check-if-user-is-authenticated)
- - [Passkeys Authentication](#passkeys-authentication)
-
-## Project Requirements
-
-- Minimum iOS deployment version **=> 14**
-- Min Android SDK **=> 26**
-
-## Getting Started
-
-### Prepare Frontegg workspace
-
-Navigate to [Frontegg Portal Settings](https://portal.frontegg.com/development/settings), If you don't have application
-follow integration steps after signing up.
-Copy FronteggDomain to future steps
-from [Frontegg Portal Domain](https://portal.frontegg.com/development/settings/domains)
-
-- Navigate to [Login Method Settings](https://portal.frontegg.com/development/authentication/hosted)
-- Toggle Hosted login method for iOS:
- - Add `{{IOS_BUNDLE_IDENTIFIER}}://{{FRONTEGG_BASE_URL}}/ios/oauth/callback`
-- Toggle Hosted login method for Android:
- - Add `{{ANDROID_PACKAGE_NAME}}://{{FRONTEGG_BASE_URL}}/android/oauth/callback`
- - Add `https://{{FRONTEGG_BASE_URL}}/oauth/account/redirect/android/{{ANDROID_PACKAGE_NAME}}`
-- Add `{{FRONTEGG_BASE_URL}}/oauth/authorize`
-- Replace `IOS_BUNDLE_IDENTIFIER` with your application identifier
-- Replace `FRONTEGG_BASE_URL` with your frontegg base url
-- Replace `ANDROID_PACKAGE_NAME` with your android package name
-
-### Add frontegg package to the project
-
-Use a package manager npm/yarn to install frontegg React Native library.
-
-**NPM:**
-
-```bash
-npm install -s @frontegg/react-native
-```
-
-**Yarn:**
-
-```bash
-yarn add @frontegg/react-native
-```
-
-## Setup iOS Project
-
-### Create Frontegg plist file
-
-To setup your SwiftUI application to communicate with Frontegg, you have to create a new file named `Frontegg.plist`
-under
-your root project directory, this file will store values to be used variables by Frontegg SDK:
-
-```xml
-
-
-
-
- baseUrl
- https://[DOMAIN_HOST_FROM_PREVIOUS_STEP]
- clientId
- [CLIENT_ID_FROM_PREVIOUS_STEP]
-
-
-```
-
-### Handle Open App with URL
-
-To handle Login with magic link and other authentication methods that require to open the app with a URL, you have to
-add the following code to.
-
-### `For Objective-C:`
-
-1. Create `FronteggSwiftAdapter.swift` in your project and add the following code:
-
- ```objective-c
- // FronteggSwiftAdapter.swift
-
- import Foundation
- import FronteggSwift
-
- @objc(FronteggSwiftAdapter)
- public class FronteggSwiftAdapter: NSObject {
- @objc public static let shared = FronteggSwiftAdapter()
-
- @objc public func handleOpenUrl(_ url: URL) -> Bool {
- return FronteggAuth.shared.handleOpenUrl(url)
- }
- }
- ```
-
-2. Open `AppDelegate.m` file and import swift headers:
-
- ```objective-c
- #import <[YOUR_PROJECT_NAME]-Swift.h>
- ```
-3. Add URL handlers to `AppDelegate.m`:
-
- ```objective-c
- #import <[YOUR_PROJECT_NAME]-Swift.h>
-
- // ...CODE...
-
- - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
- options:(NSDictionary *)options
- {
-
- if([[FronteggSwiftAdapter shared] handleOpenUrl:url] ){
- return TRUE;
- }
- return [RCTLinkingManager application:app openURL:url options:options];
- }
-
- - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
- restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler
- {
-
- if (userActivity.webpageURL != NULL){
- if([[FronteggSwiftAdapter shared] handleOpenUrl:userActivity.webpageURL] ){
- return TRUE;
- }
- }
- return [RCTLinkingManager application:application
- continueUserActivity:userActivity
- restorationHandler:restorationHandler];
- }
- ```
-
-### `For Swift:`
-
-1. Open `AppDelegate.m` file and import swift headers:
-
- ```swift
- import FronteggSwift
- ```
-2. Add URL handlers to `AppDelegate.swift`:
- ```swift
- import UIKit
- import FronteggSwift
-
- @UIApplicationMain
- class AppDelegate: UIResponder, UIApplicationDelegate {
-
- /*
- * Called when the app was launched with a url. Feel free to add additional processing here,
- * but if you want the App API to support tracking app url opens, make sure to keep this call
- */
- func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
-
- if(FronteggAuth.shared.handleOpenUrl(url)){
- return true
- }
-
- return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
- }
-
- /*
- * Called when the app was launched with an activity, including Universal Links.
- * Feel free to add additional processing here, but if you want the App API to support
- * tracking app url opens, make sure to keep this call
- */
- func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
-
- if let url = userActivity.webpageURL {
- if(FronteggAuth.shared.handleOpenUrl(url)){
- return true
- }
- }
- return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
- }
- }
- ```
-
-### Handle Open App with URL (Objective-C)
-
-### Config iOS associated domain
-
-Configuring your iOS associated domain is required for Magic Link authentication / Reset Password / Activate Account.
-
-In order to add your iOS associated domain to your Frontegg application, you will need to update in each of your
-integrated Frontegg Environments the iOS associated domain that you would like to use with that Environment. Send a POST
-request to `https://api.frontegg.com/vendors/resources/associated-domains/v1/ios` with the following payload:
-
-```
-{
- “appId”:[YOUR_ASSOCIATED_DOMAIN]
-}
-```
-
-In order to use our API’s, follow [this guide](‘https://docs.frontegg.com/reference/getting-started-with-your-api’) to
-generate a vendor token.
-
-## Multi-apps iOS Support
-
-This guide outlines the steps to configure your iOS application to support multiple applications.
-
-### Step 1: Modify the Frontegg.plist File
-
-Add `applicationId` to Frontegg.plist file:
-
-```xml
-
-
- applicationId
- your-application-id-uuid
- baseUrl
- https://your-domain.fronteg.com
- clientId
- your-client-id-uuid
-
-
-```
-
-## Setup Android Project
-
-### Set minimum sdk version
-
-To set up your Android minimum sdk version, open root gradle file at`android/build.gradle`,
-and add/edit the `minSdkVersion` under `buildscript.ext`:
-
-```groovy
-buildscript {
- ext {
- minSdkVersion = 26
- // ...
- }
-}
-```
-
-### Configure build config fields
-
-To set up your Android application on to communicate with Frontegg, you have to add `buildConfigField` property the
-gradle `android/app/build.gradle`.
-This property will store frontegg hostname (without https) and client id from previous step:
-
-```groovy
-
-def fronteggDomain = "FRONTEGG_DOMAIN_HOST.com" // without protocol https://
-def fronteggClientId = "FRONTEGG_CLIENT_ID"
-
-android {
- defaultConfig {
-
- manifestPlaceholders = [
- "package_name" : applicationId,
- "frontegg_domain" : fronteggDomain,
- "frontegg_client_id": fronteggClientId
- ]
-
- buildConfigField "String", 'FRONTEGG_DOMAIN', "\"$fronteggDomain\""
- buildConfigField "String", 'FRONTEGG_CLIENT_ID', "\"$fronteggClientId\""
- buildConfigField "Boolean", 'FRONTEGG_USE_ASSETS_LINKS', "true" /** For using frontegg domain for deeplinks **/
- buildConfigField "Boolean", 'FRONTEGG_USE_CHROME_CUSTOM_TABS', "true" /** For using custom chrome tab for social-logins **/
- }
-
-
-}
-```
-
-Add bundleConfig=true if not exists inside the android section inside the app gradle `android/app/build.gradle`
-
-```groovy
-android {
- buildFeatures {
- buildConfig = true
- }
-}
-```
-
-### Config Android AssetLinks
-
-Configuring your Android `AssetLinks` is required for Magic Link authentication / Reset Password / Activate Account /
-login with IdPs.
-
-To add your `AssetLinks` to your Frontegg application, you will need to update in each of your integrated Frontegg
-Environments the `AssetLinks` that you would like to use with that Environment. Send a POST request
-to `https://api.frontegg.com/vendors/resources/associated-domains/v1/android` with the following payload:
-
-```
-{
- "packageName": "YOUR_APPLICATION_PACKAGE_NAME",
- "sha256CertFingerprints": ["YOUR_KEYSTORE_CERT_FINGERPRINTS"]
-}
-```
-
-Each Android app has multiple certificate fingerprint, to get your `DEBUG` sha256CertFingerprint you have to run the
-following command:
-
-For Debug mode, run the following command and copy the `SHA-256` value
-
-NOTE: make sure to choose the Variant and Config equals to `debug`
-
-```bash
-./gradlew signingReport
-
-###################
-# Example Output:
-###################
-
-# Variant: debug
-# Config: debug
-# Store: /Users/davidfrontegg/.android/debug.keystore
-# Alias: AndroidDebugKey
-# MD5: 25:F5:99:23:FC:12:CA:10:8C:43:F4:02:7D:AD:DC:B6
-# SHA1: FC:3C:88:D6:BF:4E:62:2E:F0:24:1D:DB:D7:15:36:D6:3E:14:84:50
-# SHA-256: D9:6B:4A:FD:62:45:81:65:98:4D:5C:8C:A0:68:7B:7B:A5:31:BD:2B:9B:48:D9:CF:20:AE:56:FD:90:C1:C5:EE
-# Valid until: Tuesday, 18 June 2052
-
-```
-
-For Release mode, Extract the SHA256 using keytool from your `Release` keystore file:
-
-```bash
-keytool -list -v -keystore /PATH/file.jks -alias YourAlias -storepass *** -keypass ***
-```
-
-In order to use our API’s, follow [this guide](https://docs.frontegg.com/reference/getting-started-with-your-api) to
-generate a vendor token.
-
-### Enabling Chrome Custom Tabs for Social Login
-
-To enable social login using Chrome Custom Tabs within your Android application, you need to modify the `android/app/build.gradle` file. Add a boolean `buildConfigField` for the `FRONTEGG_USE_CHROME_CUSTOM_TABS` flag and set it to true.
-
-By default, the SDK defaults to using the Chrome browser for social login.
-
- ```groovy
-
-def fronteggDomain = "FRONTEGG_DOMAIN_HOST.com" // without protocol https://
-def fronteggClientId = "FRONTEGG_CLIENT_ID"
-
-android {
- defaultConfig {
-
- manifestPlaceholders = [
- "package_name" : applicationId,
- "frontegg_domain" : fronteggDomain,
- "frontegg_client_id": fronteggClientId
- ]
-
- buildConfigField "String", 'FRONTEGG_DOMAIN', "\"$fronteggDomain\""
- buildConfigField "String", 'FRONTEGG_CLIENT_ID', "\"$fronteggClientId\""
-
- buildConfigField "Boolean", 'FRONTEGG_USE_CHROME_CUSTOM_TABS', "true"
- }
-
-
-}
-```
-
-## Multi-apps Android Support
-
-This guide outlines the steps to configure your Android application to support multiple applications.
-
-### Step 1: Modify the Build.gradle file
-
-Add `FRONTEGG_APPLICATION_ID` buildConfigField into the `build.gradle` file:
-
-```groovy
-def fronteggApplicationId = "your-application-id-uuid"
-...
-android {
- ...
- buildConfigField "String", 'FRONTEGG_APPLICATION_ID', "\"$fronteggApplicationId\""
-}
-```
-
-
-## Usages
-
-### Wrap your app with FronteggProvider
-
-NOTE: we recommend to use `FronteggWrapper` component along with the `NavigationContainer`
-from `@react-navigation/native`:
-to install `@react-navigation/native` and `@react-navigation/native-stack` run the following command:
-
-**NPM:**
-
-```bash
-npm install -s @react-navigation/native @react-navigation/native-stack react-native-screens react-native-safe-area-context
-```
-
-**Yarn:**
-
-```bash
-yarn add @react-navigation/native @react-navigation/native-stack react-native-screens react-native-safe-area-context
-```
-
-Modify your `App.tsx` file and wrap your app with FronteggProvider and pass your Frontegg configuration:
-
-```tsx
-import * as React from 'react';
-import { NavigationContainer } from '@react-navigation/native';
-import { createNativeStackNavigator } from '@react-navigation/native-stack';
-import HomeScreen from './HomeScreen';
-import ProfileScreen from './ProfileScreen';
-import { FronteggWrapper } from '@frontegg/react-native';
-
-const Stack = createNativeStackNavigator();
-
-export default () => {
- return (
-
-
-
-
-
-
-
-
- );
-};
-
-```
-
-### Login with frontegg
-
-To log in with frontegg you can use the `useAuth` hook:
-
-```tsx
-import { View, Button } from 'react-native';
-import { useAuth, login, logout } from '@frontegg/react-native';
-
-
-export function MyScreen() {
- const { isAuthenticated } = useAuth();
-
- return
-
-
-}
-
-```
-
-### Switch tenant frontegg
-
-To switch tenant, get switchTenant from the `useAuth` hook:
-
-```tsx
-import { useCallback } from 'react';
-import { View, Button } from 'react-native';
-import { useAuth } from '@frontegg/react-native';
-
-
-export function MyScreen() {
- const { switchTenant, user } = useAuth();
-
- // user avaiable tenants from user.tenants
- console.log("user tenants", user?.tenants)
-
- const handleSwitchTenant = useCallback(() => {
- const tenantId = 'TENANT_ID'; // get tenant id from your app state
-
-
- switchTenant(tenantId).then(() => {
- console.log('Tenant switched successfully');
- }).catch((error) => {
- console.log('Failed to switch tenant', error);
- });
- }, [ switchTenant ]);
-
- return
-
- ;
-}
-
-```
-
-### Check if user is authenticated
-
-To check if user is authenticated before display your app you can use the `useAuth` hook
-along with the isLoading property:
-
-```tsx
-
-import { StyleSheet, View, Text, Button } from 'react-native';
-import { useAuth } from '@frontegg/react-native';
-
-export default function HomeScreen() {
- const {
- showLoader,
- isLoading,
- isAuthenticated,
- user,
- } = useAuth();
-
- // showLoader when the SDK is initializing the app / authenticate the user
- if (showLoader || isLoading) {
- return
- Loading...
-
- }
-
-
- return
- {isAuthenticated ? 'Authenticated' : 'Not authenticated'}
-
- {isAuthenticated && {user?.email}}
-
-
-}
-```
-
-## Passkeys Authentication
-
-Passkeys provide a seamless, passwordless authentication experience, leveraging platform-level biometric authentication and WebAuthn. Follow the steps below to integrate passkeys functionality into your iOS app.
-
-### Prerequisites
-
-1. **iOS Version**: Ensure your project targets **iOS 15 or later** to support the necessary WebAuthn APIs.
-3. **Android**: Use **Android SDK 26+**.
-5. **Frontegg SDK Version**: Use Frontegg iOS SDK version **1.2.24 or later**.
-
----
-
-## Setup
-
-### Android Setup
-
-1. **Update Gradle Dependencies**:
- Add the following dependencies in your `android/build.gradle`:
- ```groovy
- dependencies {
- implementation 'androidx.browser:browser:1.8.0'
- implementation 'com.frontegg.sdk:android:1.2.30'
- }
- ```
-
-2. **Java Compatibility**:
- Ensure sourceCompatibility and targetCompatibility are set to Java 8 in android/app/build.gradle**:
-```groovy
- android {
- compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
- }
-}
-```
-
-### IOS Setup
-
-1. **Set up the Associated Domains Capability**:
- - Open your project in Xcode.
- - Go to the **Signing & Capabilities** tab.
- - Add **Associated Domains** under the **+ Capability** section.
- - Enter the domain for your app in the format:
- ```
- webcredentials:[YOUR_DOMAIN]
- ```
- Example:
- ```
- webcredentials:example.com
- ```
-
-2. **Host the WebAuthn Configuration File**:
- - Add a `.well-known/webauthn` JSON file to your domain server with the following structure:
- ```json
- {
- "origins": [
- "https://example.com",
- "https://subdomain.example.com"
- ]
- }
- ```
- - Ensure this file is publicly accessible at `https://example.com/.well-known/webauthn`.
-
-3. **Test Associated Domains**:
- - Verify that your associated domain configuration works using Apple's [Associated Domains Validator](https://developer.apple.com/contact/request/associated-domains).
-
-
-### Using Passkeys
-The following examples demonstrate how to use the React Native SDK's Passkeys functions.
-
-### Registering Passkeys
-Use the registerPasskeys method to register a passkey for the current user.
-
-```typescript
-import { registerPasskeys } from '@frontegg/react-native';
-
-async function handleRegisterPasskeys() {
- try {
- await registerPasskeys();
- console.log('Passkeys registered successfully');
- } catch (error) {
- console.error('Error registering passkeys:', error);
- }
-}
-```
-
-### Login with Passkeys
-Use the loginWithPasskeys method to authenticate users using passkeys.
-
-```typescript
-import { loginWithPasskeys } from '@frontegg/react-native';
-
-async function handleLoginWithPasskeys() {
- try {
- await loginWithPasskeys();
- console.log('Passkeys login successful');
- } catch (error) {
- console.error('Error logging in with Passkeys:', error);
- }
-}
-```
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 120000
index 0000000..0e01b43
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
+docs/README.md
\ No newline at end of file
diff --git a/docs/.nojekyll b/docs/.nojekyll
new file mode 100644
index 0000000..e69de29
diff --git a/docs/README.md b/docs/README.md
new file mode 100644
index 0000000..393ac4a
--- /dev/null
+++ b/docs/README.md
@@ -0,0 +1,35 @@
+# Frontegg React Native SDK
+
+
+Welcome to the official **Frontegg React Native SDK** — your all-in-one solution for
+integrating authentication and user management into your React Native mobile
+app. [Frontegg](https://frontegg.com/) is a self-served user management platform, built for modern
+SaaS applications. Easily implement authentication, SSO, RBAC, multi-tenancy, and more — all from a
+single SDK.
+
+## 📚 Documentation
+
+This repository includes:
+
+- A [Get Started](/docs/getting-started.md) guide for quick integration
+- A [Setup Guide](/docs/setup.md) with detailed setup instructions
+- [Usage Examples](/docs/usage.md) with common implementation patterns
+- [Advanced Topics](/docs/advanced.md) for complex integration scenarReact Native
+- A [Embedded](/example) example projects to help you get started quickly
+
+For full documentation, visit the Frontegg Developer Portal:
+🔗 [https://developers.frontegg.com](https://developers.frontegg.com)
+
+---
+
+## 🧑💻 Getting Started with Frontegg
+
+Don't have a Frontegg account yet?
+Sign up here → [https://portal.us.frontegg.com/signup](https://portal.us.frontegg.com/signup)
+
+---
+
+## 💬 Support
+
+Need help? Our team is here for you:
+[https://support.frontegg.com/frontegg/directories](https://support.frontegg.com/frontegg/directories)
diff --git a/docs/_sidebar.md b/docs/_sidebar.md
new file mode 100644
index 0000000..41e86ed
--- /dev/null
+++ b/docs/_sidebar.md
@@ -0,0 +1,5 @@
+- [React Native SDK](README.md)
+- [Getting Started](getting-started.md)
+- [Setup Guide](setup.md)
+- [Usage Examples](usage.md)
+- [Advanced Topics](advanced.md)
diff --git a/docs/advanced.md b/docs/advanced.md
new file mode 100644
index 0000000..8b42362
--- /dev/null
+++ b/docs/advanced.md
@@ -0,0 +1,134 @@
+# Advanced options
+
+In this guide, you'll find an overview and best practices for enabling advanced features like passkeys and multi-app configurations.
+
+### Multi-app support
+
+#### iOS setup
+
+If your Frontegg workspace supports multiple apps, you need to specify which one your iOS client should use.
+
+To enable this feature, add `applicationId` to `Frontegg.plist` as follows:
+
+```xml
+
+
+ applicationId
+ {{FRONTEGG_APPLICATION_ID}}
+
+ baseUrl
+ {{FRONTEGG_BASE_URL}}
+
+ clientId
+ {{FRONTEGG_CLIENT_ID}}
+
+
+```
+
+- Replace `{{FRONTEGG_APPLICATION_ID}}` with your application ID.
+- Replace `{{FRONTEGG_BASE_URL}}` with the domain name from your Frontegg Portal.
+- Replace `{{FRONTEGG_CLIENT_ID}}` with your Frontegg client ID.
+
+#### Android setup
+
+1. Open the `android/app/build.gradle` file in your project.
+2. Add the following variable at the top of the file (outside the android block):
+
+```groovy
+def fronteggApplicationId = "{{FRONTEGG_APPLICATION_ID}}"
+```
+
+3. Inside the `android { defaultConfig { } }` block, add the following line:
+
+```groovy
+buildConfigField "String", "FRONTEGG_APPLICATION_ID", "\"$fronteggApplicationId\""
+```
+
+
+### Passkeys authentication
+
+Passkeys provide a seamless, passwordless login experience using WebAuthn and platform-level biometric authentication.
+
+**Prerequisites**
+
+1. **iOS Version**: Ensure your project targets iOS 15 or later to support the necessary WebAuthn APIs.
+2. **Android**: Use Android SDK 26+.
+3. **Frontegg SDK Version**: Use Frontegg iOS SDK version 1.2.24 or later.
+
+#### Android setup
+
+1. Open `android/build.gradle`.
+2. Add the following Gradle dependencies under dependencies:
+
+ ```groovy
+ dependencies {
+ implementation 'androidx.browser:browser:1.8.0'
+ implementation 'com.frontegg.sdk:android:1.2.30'
+ }
+ ```
+
+3. Inside the `android` block, add the following to set Java 8 compatibility:
+
+ ```groovy
+ android {
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ }
+ ```
+
+#### iOS setup
+
+1. Open your project in **Xcode**
+2. Go to your **target** settings
+3. Open the **Signing & Capabilities** tab
+4. Click the **+ Capability** button and add **Associated Domains**
+5. Under **Associated Domains**, click the **+** and add: `webcredentials:your-domain.com`. For example, if your domain is `https://example.com`, use `webcredentials:example.com`.
+5. Enter your domain in the format: `webcredentials:[YOUR_DOMAIN]`. For example: `webcredentials:example.com`.
+6. Host a `.well-known/webauthn` JSON file on your domain server with the following structure:
+ ```json
+ {
+ "origins": [
+ "https://example.com",
+ "https://subdomain.example.com"
+ ]
+ }
+ ```
+7. Ensure the file is publicly accessible at: `https://example.com/.well-known/webauthn`.
+8. Verify that your Associated Domains configuration works using [Apple’s Associated Domains Validator](https://developer.apple.com/contact/request/associated-domains).
+
+
+#### Register Passkeys
+
+Use the registerPasskeys method to register a passkey for the current user:
+
+```tsx
+import { registerPasskeys } from '@frontegg/react-native';
+
+async function handleRegisterPasskeys() {
+ try {
+ await registerPasskeys();
+ console.log('Passkeys registered successfully');
+ } catch (error) {
+ console.error('Error registering passkeys:', error);
+ }
+}
+```
+
+#### Login with Passkeys
+
+Use the loginWithPasskeys method to log in using passkeys:
+
+```tsx
+import { loginWithPasskeys } from '@frontegg/react-native';
+
+async function handleLoginWithPasskeys() {
+ try {
+ await loginWithPasskeys();
+ console.log('Passkeys login successful');
+ } catch (error) {
+ console.error('Error logging in with Passkeys:', error);
+ }
+}
+```
\ No newline at end of file
diff --git a/docs/getting-started.md b/docs/getting-started.md
new file mode 100644
index 0000000..821b0e3
--- /dev/null
+++ b/docs/getting-started.md
@@ -0,0 +1,70 @@
+# Getting started with Frontegg React Native SDK
+
+Welcome to the Frontegg React Native SDK! Easily integrate Frontegg’s out-of-the-box authentication and user management functionalities into your applications for a seamless and secure user experience.
+
+The Frontegg React Native SDK can be used in two ways:
+
+1. With the hosted Frontegg login that will be called through a webview, enabling all login methods supported on the login box
+2. By directly using Frontegg APIs from your custom UI, with available methods
+
+The Frontegg React Native SDK automatically handles token refresh behind the scenes, ensuring your users maintain authenticated sessions without manual intervention.
+
+### Supported languages
+- JavaScript / TypeScript: For React Native app development and using Frontegg hooks and components
+- Kotlin (Android): For native configuration and initialization
+- Groovy: For Android build.gradle setup (Groovy DSL)
+- Swift: For iOS configuration and SDK linking
+- Objective-C: Required for older iOS projects or mixed-language setups (e.g., AppDelegate integration).
+
+### Supported platforms
+- iOS: Deployment target 14.0 or higher
+- Android: Minimum SDK version 26 (Android 8.0)
+- React Native: Version 0.63+ (recommended for best compatibility)
+- WebAuthn support (Passkeys):
+ - iOS: Version 15+ required for platform-level support
+ - Android: SDK 26+, with browser support for Chrome custom tabs
+
+### Prepare your Frontegg environment
+
+- Navigate to Frontegg Portal [ENVIRONMENT] → `Keys & domains`
+- If you don't have an application, follow the integration steps after signing up
+- Copy your environment's `FronteggDomain` from Frontegg Portal domain for future steps
+- Navigate to [ENVIRONMENT] → Authentication → Login method
+- Make sure hosted login is toggled on.
+- Add the following common redirect URL:
+
+ ```
+ {{FRONTEGG_BASE_URL}}/oauth/authorize
+ ```
+
+- Replace `{{IOS_BUNDLE_IDENTIFIER}}` with your IOS bundle identifier.
+- Replace `{{ANDROID_PACKAGE_NAME}}` with your Android package name.
+- Replace `{{FRONTEGG_BASE_URL}}` with your Frontegg domain, i.e `app-xxxx.frontegg.com` or your custom domain.
+
+- For iOS add:
+ ```
+ {{IOS_BUNDLE_IDENTIFIER}}://{{FRONTEGG_BASE_URL}}/ios/oauth/callback
+ ```
+
+- For Android add:
+ ```
+ {{ANDROID_PACKAGE_NAME}}://{{FRONTEGG_BASE_URL}}/android/oauth/callback
+ https://{{FRONTEGG_BASE_URL}}/oauth/account/redirect/android/{{ANDROID_PACKAGE_NAME}} ← required for assetlinks
+ ```
+
+> [!WARNING]
+> On every step, if you have a [custom domain](https://developers.frontegg.com/guides/env-settings/custom-domain), replace the `[frontegg-domain]` and `[your-custom-domain]` placeholders with your custom domain instead of the value from the Keys & domains page.
+
+### Add Frontegg package to the project
+
+Use your preferred package manager to install the Frontegg React Native SDK:
+
+npm:
+```
+npm install -s @frontegg/react-native
+```
+
+yarn:
+```
+yarn add @frontegg/react-native
+```
diff --git a/docs/images/frontegg-react-native.png b/docs/images/frontegg-react-native.png
new file mode 100644
index 0000000..7b5cbf4
Binary files /dev/null and b/docs/images/frontegg-react-native.png differ
diff --git a/docs/index.html b/docs/index.html
new file mode 100644
index 0000000..353b2cd
--- /dev/null
+++ b/docs/index.html
@@ -0,0 +1,48 @@
+
+
+
+
+ Frontegg React Native SDK Documentation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/setup.md b/docs/setup.md
new file mode 100644
index 0000000..49d7f68
--- /dev/null
+++ b/docs/setup.md
@@ -0,0 +1,276 @@
+# Project setup
+
+This section guides you through configuring the Frontegg React Native SDK for both iOS and Android, including required project files, authentication callbacks, and platform-specific settings.
+
+## Setup iOS Project
+
+### Create Frontegg.plist
+
+1. Add a new file named `Frontegg.plist` to your root project directory.
+2. Add the following content:
+
+```xml
+
+
+
+
+ baseUrl
+ https://{{FRONTEGG_BASE_URL}}
+ clientId
+ {{FRONTEGG_CLIENT_ID}}
+
+
+```
+
+- Replace `{{FRONTEGG_BASE_URL}}` with the domain name from your Frontegg Portal.
+- Replace `{{FRONTEGG_CLIENT_ID}}` with your Frontegg client ID.
+
+### Handle open app with URL
+
+To support login via magic link and other authentication methods that require your app to open from a URL, add the following code to your app.
+
+#### `For Objective-C:`
+
+1. Create `FronteggSwiftAdapter.swift` in your project and add the following code:
+
+ ```objective-c
+ // FronteggSwiftAdapter.swift
+
+ import Foundation
+ import FronteggSwift
+
+ @objc(FronteggSwiftAdapter)
+ public class FronteggSwiftAdapter: NSObject {
+ @objc public static let shared = FronteggSwiftAdapter()
+
+ @objc public func handleOpenUrl(_ url: URL) -> Bool {
+ return FronteggAuth.shared.handleOpenUrl(url)
+ }
+ }
+ ```
+
+2. Open `AppDelegate.m` file and import swift headers:
+
+ ```objective-c
+ #import <[YOUR_PROJECT_NAME]-Swift.h>
+ ```
+3. Add URL handlers to `AppDelegate.m`:
+
+ ```objective-c
+ #import <[YOUR_PROJECT_NAME]-Swift.h>
+
+ // ...CODE...
+
+ - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
+ options:(NSDictionary *)options
+ {
+
+ if([[FronteggSwiftAdapter shared] handleOpenUrl:url] ){
+ return TRUE;
+ }
+ return [RCTLinkingManager application:app openURL:url options:options];
+ }
+
+ - (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity
+ restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler
+ {
+
+ if (userActivity.webpageURL != NULL){
+ if([[FronteggSwiftAdapter shared] handleOpenUrl:userActivity.webpageURL] ){
+ return TRUE;
+ }
+ }
+ return [RCTLinkingManager application:application
+ continueUserActivity:userActivity
+ restorationHandler:restorationHandler];
+ }
+ ```
+
+4. Register your domain with Frontegg:
+
+**NOTE**: Make youre you have a [vendor token to access Frontegg APIs](https://docs.frontegg.com/reference/getting-started-with-your-api).
+
+a. Open your terminal or API tool (such as Postman or cURL).
+b. Send a `POST` request to the following endpoint: `https://api.frontegg.com/vendors/resources/associated-domains/v1/ios`.
+c. Include the following JSON payload in the request body:
+ ```json
+ {
+ "appId": "{{ASSOCIATED_DOMAIN}}"
+ }
+ ```
+d. Replace `{{ASSOCIATED_DOMAIN}}` with the actual associated domain you want to use for the iOS app.
+e. Repeat this step for each Frontegg environment where you want to support URL-based app opening.
+
+
+#### `For Swift:`
+
+1. Open `AppDelegate.m` file and import swift headers:
+
+ ```swift
+ import FronteggSwift
+ ```
+2. Add URL handlers to `AppDelegate.swift`:
+ ```swift
+ import UIKit
+ import FronteggSwift
+
+ @UIApplicationMain
+ class AppDelegate: UIResponder, UIApplicationDelegate {
+
+ /*
+ * Called when the app was launched with a url. Feel free to add additional processing here,
+ * but if you want the App API to support tracking app url opens, make sure to keep this call
+ */
+ func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
+
+ if(FronteggAuth.shared.handleOpenUrl(url)){
+ return true
+ }
+
+ return ApplicationDelegateProxy.shared.application(app, open: url, options: options)
+ }
+
+ /*
+ * Called when the app was launched with an activity, including Universal Links.
+ * Feel free to add additional processing here, but if you want the App API to support
+ * tracking app url opens, make sure to keep this call
+ */
+ func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
+
+ if let url = userActivity.webpageURL {
+ if(FronteggAuth.shared.handleOpenUrl(url)){
+ return true
+ }
+ }
+ return ApplicationDelegateProxy.shared.application(application, continue: userActivity, restorationHandler: restorationHandler)
+ }
+ }
+ ```
+
+## Setup Android Project
+
+### Set the minimum SDK version
+
+1. Open your project in Android Studio.
+2. Navigate to the root-level Gradle file: `android/build.gradle`.
+3. Locate the `buildscript.ext` section in the file.
+4. Add or update the `minSdkVersion` value. For example:
+
+```groovy
+buildscript {
+ ext {
+ minSdkVersion = 26
+ // ...
+ }
+}
+```
+
+### Configure build config fields
+
+To set up your Android application on to communicate with Frontegg:
+
+1. Add `buildConfigField` entries to `android/app/build.gradle`:
+
+```groovy
+
+def fronteggDomain = "{{FRONTEGG_BASE_URL}}" // without protocol https://
+def fronteggClientId = "{{FRONTEGG_CLIENT_ID}}"
+
+android {
+ defaultConfig {
+
+ manifestPlaceholders = [
+ "package_name" : applicationId,
+ "frontegg_domain" : fronteggDomain,
+ "frontegg_client_id": fronteggClientId
+ ]
+
+ buildConfigField "String", '{{FRONTEGG_BASE_URL}}', "\"$fronteggDomain\""
+ buildConfigField "String", '{{CLIENT_ID}}', "\"$fronteggClientId\""
+ buildConfigField "Boolean", 'FRONTEGG_USE_ASSETS_LINKS', "true" /** For using frontegg domain for deeplinks **/
+ buildConfigField "Boolean", 'FRONTEGG_USE_CHROME_CUSTOM_TABS', "true" /** For using custom chrome tab for social-logins **/
+ }
+
+
+}
+```
+
+- Replace `{{FRONTEGG_BASE_URL}}` with the domain name from your Frontegg Portal.
+- Replace `{{FRONTEGG_CLIENT_ID}}` with your Frontegg client ID.
+
+2. Add `buildConfig = true` under the `buildFeatures` block in the `android` section of your `android/app/build.gradle` file if it doesn't already exist:
+
+```groovy
+android {
+ buildFeatures {
+ buildConfig = true
+ }
+}
+```
+
+### Enable Android AssetLinks
+
+To enable Android features like Magic Link authentication, password reset, account activation, and login with identity providers, follow the steps below.
+
+**NOTE**: Make youre you have a [vendor token to access Frontegg APIs](https://docs.frontegg.com/reference/getting-started-with-your-api).
+
+1. Send a POST request to the following Frontegg endpoint:
+
+ ```bash
+ https://api.frontegg.com/vendors/resources/associated-domains/v1/android
+ ```
+2. Use the following payload:
+
+ ```json
+ {
+ "packageName": "YOUR_APPLICATION_PACKAGE_NAME",
+ "sha256CertFingerprints": ["YOUR_KEYSTORE_CERT_FINGERPRINTS"]
+ }
+ ```
+
+3. Get your `sha256CertFingerprints`. Each Android app has multiple certificate fingerprints. You must extract at least the one for `DEBUG` and optionally for `RELEASE`.
+
+**For Debug mode**
+
+1. Open a terminal in your project root.
+2. Run the following command:
+
+ ```
+ ./gradlew signingReport
+ ```
+3. Look for the section with:
+
+ ```
+ Variant: debug
+ Config: debug
+ ```
+4. Copy the SHA-256 value from the output. Make sure the `Variant` and `Config` both equal `debug`.
+
+Example output:
+
+```
+./gradlew signingReport
+
+###################
+# Example Output:
+###################
+
+# Variant: debug
+# Config: debug
+# Store: /Users/davidfrontegg/.android/debug.keystore
+# Alias: AndroidDebugKey
+# MD5: 25:F5:99:23:FC:12:CA:10:8C:43:F4:02:7D:AD:DC:B6
+# SHA1: FC:3C:88:D6:BF:4E:62:2E:F0:24:1D:DB:D7:15:36:D6:3E:14:84:50
+# SHA-256: D9:6B:4A:FD:62:45:81:65:98:4D:5C:8C:A0:68:7B:7B:A5:31:BD:2B:9B:48:D9:CF:20:AE:56:FD:90:C1:C5:EE
+# Valid until: Tuesday, 18 June 2052
+```
+
+**For Release mode:**
+
+1. Run the following command (customize the path and credentials):
+
+ ```
+ keytool -list -v -keystore /PATH/file.jks -alias YourAlias -storepass *** -keypass ***
+ ```
+
+2. Copy the `SHA-256` value from the output.
diff --git a/docs/sidenav.md b/docs/sidenav.md
new file mode 100644
index 0000000..c9a6800
--- /dev/null
+++ b/docs/sidenav.md
@@ -0,0 +1,6 @@
+## Table of Contents
+
+- [Getting started](#getting-started)
+- [Setup](#setup)
+- [usage](#usage)
+- [Advanced usage](#advanced)
diff --git a/docs/usage.md b/docs/usage.md
new file mode 100644
index 0000000..6eea01c
--- /dev/null
+++ b/docs/usage.md
@@ -0,0 +1,164 @@
+# Authentication and usage
+
+The Frontegg React Native SDK supports secure, cross-platform authentication flows for both iOS and Android:
+
+* **Embedded Webview**: A built-in login screen rendered inside your app. Enabled by default.
+* **System Browser (Chrome Custom Tabs / iOS equivalent)**: A secure, system-managed login flow for social providers. Automatically uses Chrome Custom Tabs on Android and the iOS system browser.
+* **Passkeys**: Passwordless authentication using platform biometrics and WebAuthn. Available on iOS 15+ and Android SDK 26+.
+
+## Chrome custom tabs for social login
+
+To enable social login using Chrome Custom Tabs within your Android application, you need to modify the `android/app/build.gradle` file as described below.
+
+1. Open the `android/app/build.gradle` file.
+2. Before the android `{}` block, declare the following variables (replace placeholders with your actual values):
+
+```groovy
+def fronteggDomain = "{{FRONTEGG_BASE_URL}}" // without https://
+def fronteggClientId = "{{FRONTEGG_CLIENT_ID}}"
+```
+
+3. Within the `android { defaultConfig { ... } }` section, add the following:
+
+```groovy
+manifestPlaceholders = [
+ "package_name" : applicationId,
+ "frontegg_domain" : fronteggDomain,
+ "frontegg_client_id" : fronteggClientId
+]
+
+buildConfigField "String", "FRONTEGG_DOMAIN", "\"$fronteggDomain\""
+buildConfigField "String", "FRONTEGG_CLIENT_ID", "\"$fronteggClientId\""
+buildConfigField "Boolean", "FRONTEGG_USE_CHROME_CUSTOM_TABS", "true"
+```
+
+- Replace `{{FRONTEGG_BASE_URL}}` with the domain name from your Frontegg Portal.
+- Replace `{{FRONTEGG_CLIENT_ID}}` with your Frontegg client ID.
+
+4. After saving your changes, sync the Gradle project to apply the configuration.
+
+**NOTE**: By default, the Frontegg SDK will use the Chrome browser for social login when this flag is set to `true`.
+
+## Wrap your app with FronteggProvider
+
+**NOTE**: It is recommended to use the `FronteggWrapper` component along with `NavigationContainer` from `@react-navigation/native`.
+
+1. Install navigation dependencies:
+ - NPM: `npm install -s @react-navigation/native @react-navigation/native-stack react-native-screens react-native-safe-area-context`
+ - Yarn: `yarn add @react-navigation/native @react-navigation/native-stack react-native-screens react-native-safe-area-context`
+
+2. Modify your `App.tsx` to wrap your app with `FronteggWrapper`:
+```tsx
+import * as React from 'react';
+import { NavigationContainer } from '@react-navigation/native';
+import { createNativeStackNavigator } from '@react-navigation/native-stack';
+import HomeScreen from './HomeScreen';
+import ProfileScreen from './ProfileScreen';
+import { FronteggWrapper } from '@frontegg/react-native';
+
+const Stack = createNativeStackNavigator();
+
+export default () => {
+ return (
+
+
+
+
+
+
+
+
+ );
+};
+```
+
+## Login with Frontegg
+
+1. Use the `useAuth` hook to access login method:
+```tsx
+import { View, Button } from 'react-native';
+import { useAuth, login } from '@frontegg/react-native';
+
+export function MyScreen() {
+ const { isAuthenticated } = useAuth();
+
+ return (
+
+
+
+ );
+}
+```
+
+## Switch account (tenant)
+
+Use the `switchTenant` function from `useAuth`:
+
+```tsx
+import { useCallback } from 'react';
+import { View, Button } from 'react-native';
+import { useAuth } from '@frontegg/react-native';
+
+export function MyScreen() {
+ const { switchTenant, user } = useAuth();
+
+ console.log("user tenants", user?.tenants);
+
+ const handleSwitchTenant = useCallback(() => {
+ const tenantId = 'TENANT_ID'; // Replace with your tenant ID
+ switchTenant(tenantId)
+ .then(() => {
+ console.log('Tenant switched successfully');
+ })
+ .catch((error) => {
+ console.log('Failed to switch tenant', error);
+ });
+ }, [switchTenant]);
+
+ return (
+
+
+
+ );
+}
+```
+
+## Check user authentication state
+
+Use the `useAuth` hook with `showLoader` and `isLoading` to conditionally display your app:
+
+```tsx
+import { View, Text, Button } from 'react-native';
+import { useAuth, login, logout } from '@frontegg/react-native';
+
+export default function HomeScreen() {
+ const {
+ showLoader,
+ isLoading,
+ isAuthenticated,
+ user,
+ } = useAuth();
+
+ if (showLoader || isLoading) {
+ return (
+
+ Loading...
+
+ );
+ }
+
+ return (
+
+ {isAuthenticated ? 'Authenticated' : 'Not authenticated'}
+ {isAuthenticated && {user?.email}}
+
+ );
+}
+```
\ No newline at end of file
diff --git a/images/frontegg-react-native.png b/images/frontegg-react-native.png
new file mode 100644
index 0000000..7b5cbf4
Binary files /dev/null and b/images/frontegg-react-native.png differ