An Expo (SDK 57) and React Native starter that is production-ready by configuration, not by installation: the foundation (routing, session, HTTP, storage, theming, error reporting, i18n, test setup) is in place, every third-party service sits behind a typed seam with a no-op or console default, and pointing it at your backend and providers is configuration and small adapters, not a rewrite. It ships no credentialed services.
npm ci # Node 24 (.nvmrc); 24.3+ or 22.13+ also work
cp .env.example .env # then see Getting Started for the backend URLs
npm start # then press i, a, or w, or scan the QR code with Expo GoMade a repository from this template? Run npm run init-project first: it
sets your app's name and IDs and removes what belongs to the template
(Getting Started).
Details, platforms, and troubleshooting: Getting Started.
- Expo Router with a tab layout, a signed-out-only
(auth)group, and a signed-in-only(app)group guarded byStack.Protected(Conventions). - Session and auth: one
SessionProvider, a backend-agnosticAuthAdapter, the token in the iOS Keychain / Android Keystore (memory only on web), and 401 handling (Connect Your Backend). - HTTP client with timeouts, typed
ApiErrors, and the token sent only to trusted origins (API and Storage). - Validated configuration: environment variables checked with zod at startup, three build variants, EAS profiles (Environment Variables, App Config).
- React Native Paper (Material Design 3) with one brand theme, light and dark (UI and Theming).
- Seams for analytics, feature flags, push, OTA updates, error reporting, and i18n (Plug In a Provider, Error Reporting and Logging).
- Tests: Jest and React Native Testing Library with shared mocks, full-app routing tests, and a coverage threshold in CI (Testing).
- A removable demo: DummyJSON sign-in, a Todos API example, and a
component showcase;
npm run remove-demodeletes them (Remove the Demo).
Demo sign-in (with the demo backends on): emilys / emilyspass.
Start with docs/README.md. The usual path:
- Getting Started: install, run, scripts.
- Make It Yours: everything to change for your app.
- Connect Your Backend: auth adapter, API, env.
The session lives in SessionProvider; the starter adds no store library.
Recipe: State Management shows Zustand,
Redux Toolkit, Jotai, and React Context on top of it.