Auth · Sign in

Expo + Better Auth

Better Auth in an Expo SDK 57 app for iOS and Android, wired by one command and checked by doctor.

This is self-hosted auth: no third-party dashboard, no per-user pricing, and the server lives in your own tree at src/server/auth.ts, mounted at /api/auth/* through src/app/api/auth/[...all]+api.ts. It ships email/password plus Apple and Google (each enabled only when its keys are set), the screens src/app/(auth)/{sign-in,sign-up,reset} with src/screens/auth/*, and src/hooks/use-auth-redirect.ts (signed-out → /(auth)/sign-in, signed-in inside (auth) → /). It requires backend/api-routes, since it needs somewhere to run. @/lib/auth keeps the same API whichever option you pick - pick Better Auth when you want the user table to be yours.

When to pick Better Auth

Pick Better Auth if the user table has to be yours - it runs on your own API routes (backend/api-routes is required), with no third-party dashboard and no per-user pricing, in exchange for owning the database and the mail provider.

At a glance

Runs in Expo Go
Yes
Files added
24
npm packages
4
Keys to paste
EXPO_PUBLIC_API_URL
Included in
Pro
Screens added
/(auth)/reset, /(auth)/sign-in, /(auth)/sign-up
Tests included
5

Set it up

bun run setup --auth better-auth

Setup copies the module in, installs SDK-matched versions and removes the options you did not pick. Then bun run doctor lists every key still missing, with a link to where you get it. The step-by-step guide is in the Better Auth docs.

Wiring it by hand instead? Read the guide: Expo auth: Clerk vs Supabase vs Better Auth.

Better Auth vs other auth options

OptionExpo Gonpm packagesKeys to pasteIncluded in
Better AuthYes41Pro
Supabase AuthYes42Pro
ClerkYes61Pro

Questions

Can I use Better Auth in Expo Go?

Yes. This module runs in Expo Go, so you can try it before you make a development build.

What do I need to set up Better Auth in an Expo app?

Run bun run setup --auth better-auth, then paste one key into .env: EXPO_PUBLIC_API_URL. bun run doctor lists any that are missing, with a link to where you get each one.

Which other modules does Better Auth need?

It needs a Backend option (API routes). Pick those in the same setup run.

Does the ReadyNative free tier include Better Auth?

No. Auth is a Pro category: the free tier and Starter ship it switched off. Pro is one payment with lifetime updates.

Can I build the app without Better Auth?

Yes. Pick none for auth (bun run setup --auth none) - auth.useSession() shim returns signed-out, signOut resolves.

Better Auth or Supabase Auth for Expo?

Pick Better Auth if the user table has to be yours - it runs on your own API routes (backend/api-routes is required), with no third-party dashboard and no per-user pricing, in exchange for owning the database and the mail provider. Pick Supabase if you also want a Postgres database and row-level security behind the same account - it's the cheapest path from zero to a real backend.

Better Auth or Clerk for Expo?

Pick Better Auth if the user table has to be yours - it runs on your own API routes (backend/api-routes is required), with no third-party dashboard and no per-user pricing, in exchange for owning the database and the mail provider. Pick Clerk if you'd rather buy user management outright: hosted accounts, a good dashboard, organizations, and a code-based sign-up flow that's already wired here.

What does Better Auth mean for the App Store and Google Play privacy forms?

It collects: Email address, name (account); Session tokens. Shared with: Nobody - stored on your own backend. Setup adds its data types to the iOS privacy manifest; the docs page lists the answers for Play's Data safety form.

Which Better Auth version does it install?

For Expo SDK 57: @better-auth/expo ^1.7.5, better-auth ^1.7.5, expo-network ~57.0.2, expo-secure-store ~57.0.4. Setup installs Expo packages with expo install, so they match the SDK.

Get it

Better Auth ships in Pro: one payment, lifetime updates. See pricing or browse every module.