Framework guides

Use Da8a with React Native and Expo

Mobile apps use the same supabase-js client. Store the session with AsyncStorage so users stay signed in between launches.

Before you start

  • A Da8a project (the Overview page shows the project URL and anon key)
  • A table to query; the quickstart creates a todos table with Row Level Security

Install the client

shell
$ npx expo install @supabase/supabase-js @react-native-async-storage/async-storage

Create the client

lib/supabase.ts
import AsyncStorage from '@react-native-async-storage/async-storage'
import { createClient } from '@supabase/supabase-js'
export const supabase = createClient(
  process.env.EXPO_PUBLIC_SUPABASE_URL!,
  process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY!,
  { auth: { storage: AsyncStorage, persistSession: true, detectSessionInUrl: false } },
)

The anon key is safe in client code as long as Row Level Security is on for your tables. Never ship the service key to the browser: it bypasses RLS.

Host it

Deploy the frontend on Chapong and link it to the project: the URL, anon key and auth redirect URLs are kept in sync for you, including on preview deploys.

Questions

Do OAuth sign-ins work on mobile?

Add your app’s deep-link URL to the redirect allow-list under Auth, then use signInWithOAuth with that redirect.

Updated 2026-10-23.