# ReadyNative > Pick-your-stack Expo SDK 57 starter: run setup once, keep only the modules you chose, ship. A one-time-payment Expo (React Native) boilerplate for iOS and Android: one `setup` command assembles only the modules you pick (auth, payments, push, analytics, crash reporting, data, forms, i18n and more), with EAS store builds and a `doctor` check wired in. ## Product - [Home](https://readynative.app/): what ReadyNative is and what the setup command does. - [Pricing](https://readynative.app/#pricing): Free, Starter and Pro tiers - one payment, lifetime updates. - [Stacks](https://readynative.app/stack/): every module you can pick, one page each. - [Comparisons](https://readynative.app/vs/): ReadyNative next to other Expo and React Native boilerplates. - [Best Expo boilerplates](https://readynative.app/best-expo-boilerplates/): a sourced roundup of the options. - [Free tier on GitHub](https://github.com/ReadyNative/ready-native-free): the public repository. ## Docs - **Get started** - [ReadyNative](https://readynative.app/docs): A pick-your-stack Expo SDK 57 starter. Run setup once, keep only the modules you chose, ship. - [Get access](https://readynative.app/docs/after-you-buy): From Polar checkout to a cloned repo - the customer portal, connecting GitHub, the invite, and what each tier contains. - [Quickstart](https://readynative.app/docs/ship-in-5-minutes): Install, pick your stack, run the app in Expo Go or a dev build, and check your keys - with the requirements and presets you need on the way. - [Pick your stack](https://readynative.app/docs/pick-your-stack): How to choose one option per category - what each choice costs you and where the full comparison lives. - [Expo Go or a dev build](https://readynative.app/docs/expo-go-vs-dev-build): Which modules run in Expo Go, which need a development build, and how to make one - locally with Xcode or Android Studio, or in the cloud with EAS. - **Tutorials** - [Make it yours](https://readynative.app/docs/make-it-yours): Give the app your name, bundle id, colours (light and dark), icon, splash, font and onboarding copy - and check each one landed. - [Add your first feature](https://readynative.app/docs/first-feature): Build a Notes tab end to end - a route, a data hook against a public API, a persisted drafts store, a validated form, a list and a test. - [Add sign-in](https://readynative.app/docs/add-sign-in): Add real accounts to an Expo app - Supabase, Clerk or Better Auth - from keys to working sign-up, password reset and account deletion. - [Add a paywall](https://readynative.app/docs/add-a-paywall): Charge for your Expo app with RevenueCat, Adapty or Stripe Checkout - from store agreements to a sandbox purchase that unlocks a feature. - [Add push notifications](https://readynative.app/docs/add-push): Set up APNs and FCM through EAS, get an Expo push token on a real phone, send yourself a test push, and open a screen from the tap. - [Add analytics and crash reporting](https://readynative.app/docs/add-analytics-and-crash): Wire PostHog or Amplitude and Sentry into an Expo app behind a consent sheet, track your own events, and get readable stack traces. - [Deploy your API routes](https://readynative.app/docs/deploy-api-routes): Put Expo Router API routes on EAS Hosting, give them server keys, smoke-test /api/health, and point every build profile at the deployed URL. - [Ship to TestFlight](https://readynative.app/docs/ship-to-testflight): Link the EAS project, move your keys to EAS, build the iOS app and get it to TestFlight testers - by hand first, then from a git tag. - [Ship to Google Play](https://readynative.app/docs/ship-to-google-play): Build an Android App Bundle on EAS, create the app in Play Console, set up a service account, then submit to internal testing with one command. - [Your first update](https://readynative.app/docs/your-first-update): Push a JavaScript-only fix to installed apps with EAS Update, watch it arrive, and roll it back if you need to. - **Guides** - [Styling](https://readynative.app/docs/styling): Build a screen from the @/components/ui primitives, use tokens instead of hex and pixels, and get dark mode for free. - [No ios/ or android/ folders](https://readynative.app/docs/native-without-native-folders): How ReadyNative keeps native projects generated instead of committed - where native config lives, how to add a native library, how SDK upgrades stay a version bump, and how that pairs with over-the-air updates. - [Do I need a backend?](https://readynative.app/docs/backend): What a backend is for a mobile app, how to call one you already have, and which one to start with if you don't. - [Add web checkout next to the App Store](https://readynative.app/docs/add-web-checkout): Run RevenueCat and Stripe Checkout side by side - one entitlement, two ways to pay, App Review-safe on iOS. - [Privacy and consent](https://readynative.app/docs/privacy): What the tree already does for GDPR, CCPA, App Tracking Transparency, the Apple privacy manifest and Play Data safety - and what is still yours. - [Pass App Review](https://readynative.app/docs/pass-app-review): Run the store check, fix what it flags, fill in the metadata, and submit to the App Store and Google Play without burning a review cycle. - [Environment variables](https://readynative.app/docs/environment-variables): Every env var the template and its modules read, which ones ship in the app, and where secrets go on EAS. - [Update from upstream](https://readynative.app/docs/update-from-upstream): Pull fixes and new modules from a newer ReadyNative release into your app - with modules/ kept, after finalizing, and on the Free tier. - [Package managers](https://readynative.app/docs/package-managers): bun is the recommendation; npm, pnpm and yarn are fully supported - how setup detects yours, and what changes in the tree. - [Troubleshooting](https://readynative.app/docs/troubleshooting): Fixes for the most common failures - setup, bun and Node, Expo Go vs dev builds, env keys on EAS, sign-in redirects, paywalls, push and Metro. - **Features** - Features - [Features](https://readynative.app/docs/features): Every category and option bun run setup can install in the ReadyNative Expo template - auth, payments, push, analytics, i18n, UI and more, default first. - UI - [UI](https://readynative.app/docs/features/ui): UI for an Expo app, compared: NativeWind 4, NativeWind 5, Tamagui, Unistyles 3, StyleSheet (plain RN) - Expo Go support and what each option installs. - [NativeWind 4](https://readynative.app/docs/features/ui/nativewind4): Set up NativeWind 4 for UI in an Expo app with ReadyNative: Stable · Tailwind 3 classes + RNR components behind @/ui · Expo Go OK - [NativeWind 5](https://readynative.app/docs/features/ui/nativewind5): Set up NativeWind 5 for UI in an Expo app with ReadyNative: RC · Tailwind 4 classes behind @/ui · Expo Go OK - [Tamagui](https://readynative.app/docs/features/ui/tamagui): Set up Tamagui for UI in an Expo app with ReadyNative: Tamagui 2 (v5 config, optimising compiler) behind @/ui · Expo Go OK - [Unistyles 3](https://readynative.app/docs/features/ui/unistyles): Set up Unistyles 3 for UI in an Expo app with ReadyNative: C++ StyleSheet with themes/breakpoints behind @/ui · dev build required (no Expo Go) - [StyleSheet (plain RN)](https://readynative.app/docs/features/ui/stylesheet): Set up StyleSheet (plain RN) for UI in an Expo app with ReadyNative: no style engine, tokens + StyleSheet.create · Expo Go OK - Data - [Data](https://readynative.app/docs/features/data): Data for an Expo app, compared: TanStack Query, Apollo Client, SWR, or none - Expo Go support and what each option installs. - [TanStack Query](https://readynative.app/docs/features/data/react-query): Set up TanStack Query for data in an Expo app with ReadyNative: server state + cache · Expo Go OK - [Apollo Client](https://readynative.app/docs/features/data/apollo): Set up Apollo Client for data in an Expo app with ReadyNative: GraphQL client + normalized cache · Expo Go OK - [SWR](https://readynative.app/docs/features/data/swr): Set up SWR for data in an Expo app with ReadyNative: stale-while-revalidate hooks · Expo Go OK - [No data layer](https://readynative.app/docs/features/data/none): The "No data layer" option of the ReadyNative Expo template: plain fetch; add TanStack Query/Apollo/SWR later. - State - [State](https://readynative.app/docs/features/state): State for an Expo app, compared: Zustand, Jotai, or none - Expo Go support and what each option installs. - [Zustand](https://readynative.app/docs/features/state/zustand): Set up Zustand for state in an Expo app with ReadyNative: tiny stores, persisted on the storage adapter · Expo Go OK - [Jotai](https://readynative.app/docs/features/state/jotai): Set up Jotai for state in an Expo app with ReadyNative: atomic state, persisted on the storage adapter · Expo Go OK - [No state library](https://readynative.app/docs/features/state/none): The "No state library" option of the ReadyNative Expo template: built-in useSyncExternalStore stores only. - Storage - [Storage](https://readynative.app/docs/features/storage): Storage for an Expo app, compared: expo-sqlite/kv-store, MMKV, AsyncStorage - Expo Go support and what each option installs. - [expo-sqlite/kv-store](https://readynative.app/docs/features/storage/kv-store): Set up expo-sqlite/kv-store for storage in an Expo app with ReadyNative: sync + async key/value on SQLite · Expo Go OK - [MMKV](https://readynative.app/docs/features/storage/mmkv): Set up MMKV for storage in an Expo app with ReadyNative: fastest sync key/value (Nitro) · dev build required (no Expo Go) - [AsyncStorage](https://readynative.app/docs/features/storage/async-storage): Set up AsyncStorage for storage in an Expo app with ReadyNative: async-only key/value, the community standard · Expo Go OK - Forms - [Forms](https://readynative.app/docs/features/forms): Forms for an Expo app, compared: React Hook Form, or none - Expo Go support and what each option installs. - [React Hook Form](https://readynative.app/docs/features/forms/react-hook-form): Set up React Hook Form for forms in an Expo app with ReadyNative: Form + Field on @/ui Input, zod resolver · Expo Go OK - [No forms library](https://readynative.app/docs/features/forms/none): The "No forms library" option of the ReadyNative Expo template: controlled @/ui Inputs with useState. - i18n - [i18n](https://readynative.app/docs/features/i18n): i18n for an Expo app, compared: i18next, Lingui, or none - Expo Go support and what each option installs. - [i18next](https://readynative.app/docs/features/i18n/i18next): Set up i18next for i18n in an Expo app with ReadyNative: react-i18next + expo-localization, 6 languages bundled incl. Arabic (RTL) · Expo Go OK - [Lingui](https://readynative.app/docs/features/i18n/lingui): Set up Lingui for i18n in an Expo app with ReadyNative: @lingui/core + @lingui/react runtime API, 6 languages bundled incl. Arabic (RTL) · Expo Go OK - [No i18n](https://readynative.app/docs/features/i18n/none): The "No i18n" option of the ReadyNative Expo template: i18n.t/useT return the English key. - Auth - [Auth](https://readynative.app/docs/features/auth): Auth for an Expo app, compared: Supabase Auth, Clerk, Better Auth, or none - Expo Go support and what each option installs. - [Supabase Auth](https://readynative.app/docs/features/auth/supabase): Set up Supabase Auth for auth in an Expo app with ReadyNative: email+password, Apple (native), Google (OAuth) · session on the storage adapter · Expo Go OK - [Clerk](https://readynative.app/docs/features/auth/clerk): Set up Clerk for auth in an Expo app with ReadyNative: email+code verification, Apple (native), Google (SSO) · @clerk/expo · Expo Go OK for JS flows - [Better Auth](https://readynative.app/docs/features/auth/better-auth): Set up Better Auth for auth in an Expo app with ReadyNative: self-hosted on the API routes · email/password + Apple/Google · Expo Go OK - [No auth](https://readynative.app/docs/features/auth/none): The "No auth" option of the ReadyNative Expo template: auth.useSession() shim returns signed-out, signOut resolves. - Payments - [Payments](https://readynative.app/docs/features/payments): Payments for an Expo app, compared: RevenueCat, Adapty, Stripe Checkout, or none - Expo Go support and what each option installs. - [RevenueCat](https://readynative.app/docs/features/payments/revenuecat): Set up RevenueCat for payments in an Expo app with ReadyNative: in-app subscriptions + paywall · dev build required (no Expo Go) - [Adapty](https://readynative.app/docs/features/payments/adapty): Set up Adapty for payments in an Expo app with ReadyNative: in-app subscriptions + Paywall Builder · dev build required (no Expo Go) - [Stripe Checkout](https://readynative.app/docs/features/payments/stripe): Set up Stripe Checkout for payments in an Expo app with ReadyNative: web checkout via API routes (no native SDK) · Expo Go OK - [No payments](https://readynative.app/docs/features/payments/none): The "No payments" option of the ReadyNative Expo template: payments.useEntitlements() shim returns none. - Analytics - [Analytics](https://readynative.app/docs/features/analytics): Analytics for an Expo app, compared: PostHog, Amplitude, or none - Expo Go support and what each option installs. - [PostHog](https://readynative.app/docs/features/analytics/posthog): Set up PostHog for analytics in an Expo app with ReadyNative: product analytics + feature flags (analytics.isFeatureEnabled / useFeatureFlag) · Expo Go OK - [Amplitude](https://readynative.app/docs/features/analytics/amplitude): Set up Amplitude for analytics in an Expo app with ReadyNative: product analytics · Expo Go OK (JS SDK, storage adapter) - [No analytics](https://readynative.app/docs/features/analytics/none): The "No analytics" option of the ReadyNative Expo template: analytics.track/identify/screen are no-ops, feature flags read undefined. - Crash reporting - [Crash reporting](https://readynative.app/docs/features/crash): Crash reporting for an Expo app, compared: Sentry, or none - Expo Go support and what each option installs. - [Sentry](https://readynative.app/docs/features/crash/sentry): Set up Sentry for crash reporting in an Expo app with ReadyNative: JS + native crash reporting · Expo Go OK (JS errors only) - [No crash reporting](https://readynative.app/docs/features/crash/none): The "No crash reporting" option of the ReadyNative Expo template: crash.capture is a no-op. - Push notifications - [Push notifications](https://readynative.app/docs/features/push): Push notifications for an Expo app, compared: Expo Notifications, or none - Expo Go support and what each option installs. - [Expo Notifications](https://readynative.app/docs/features/push/expo-notifications): Set up Expo Notifications for push notifications in an Expo app with ReadyNative: Expo push service + local notifications · dev build required for remote… - [No push notifications](https://readynative.app/docs/features/push/none): The "No push notifications" option of the ReadyNative Expo template: nothing registered. - Backend - [Backend](https://readynative.app/docs/features/backend): Backend for an Expo app, compared: API routes, or none - Expo Go support and what each option installs. - [API routes](https://readynative.app/docs/features/backend/api-routes): Set up API routes for backend in an Expo app with ReadyNative: Expo Router +api.ts routes · src/server helpers · EAS Hosting · Expo Go OK - [No API routes](https://readynative.app/docs/features/backend/none): The "No API routes" option of the ReadyNative Expo template: no src/app/api. - Onboarding - [Onboarding](https://readynative.app/docs/features/onboarding): Onboarding for an Expo app, compared: Onboarding flow, or none - Expo Go support and what each option installs. - [Onboarding flow](https://readynative.app/docs/features/onboarding/on): Set up Onboarding flow for onboarding in an Expo app with ReadyNative: 3-slide intro at /onboarding, redirect until completed - [No onboarding](https://readynative.app/docs/features/onboarding/off): The "No onboarding" option of the ReadyNative Expo template: app opens straight into the tabs. - Location - [Location](https://readynative.app/docs/features/location): Location for an Expo app, compared: Expo Location, or none - Expo Go support and what each option installs. - [Expo Location](https://readynative.app/docs/features/location/expo-location): Set up Expo Location for location in an Expo app with ReadyNative: foreground position + reverse geocoding, permission states handled · Expo Go OK - [No location](https://readynative.app/docs/features/location/none): The "No location" option of the ReadyNative Expo template: no permission prompt, no expo-location. - Home-screen widgets - [Home-screen widgets](https://readynative.app/docs/features/widgets): Home-screen widgets for an Expo app, compared: Expo Widgets, or none - Expo Go support and what each option installs. - [Expo Widgets](https://readynative.app/docs/features/widgets/expo-widgets): Set up Expo Widgets for home-screen widgets in an Expo app with ReadyNative: iOS home-screen widget + Live Activity (Lock Screen, Dynamic Island) in… - [No widgets](https://readynative.app/docs/features/widgets/none): The "No widgets" option of the ReadyNative Expo template: no app extension, widgets.update() is a no-op. - Privacy consent - [Privacy consent](https://readynative.app/docs/features/consent): Privacy consent for an Expo app, compared: Consent sheet (GDPR / CCPA), or none - Expo Go support and what each option installs. - [Consent sheet (GDPR / CCPA)](https://readynative.app/docs/features/consent/consent): Set up Consent sheet (GDPR / CCPA) for privacy consent in an Expo app with ReadyNative: asks before analytics + crash start (EU/EEA, UK, Switzerland… - [No consent sheet](https://readynative.app/docs/features/consent/none): The "No consent sheet" option of the ReadyNative Expo template: consent.get() reads all-true; analytics and crash SDKs start as before. - Testing - [Testing](https://readynative.app/docs/features/testing): Testing for an Expo app, compared: Jest + Testing Library, or none - Expo Go support and what each option installs. - [Jest + Testing Library](https://readynative.app/docs/features/testing/jest): Set up Jest + Testing Library for testing in an Expo app with ReadyNative: jest-expo preset, RNTL, tests for stores/theme/ui - [No test runner](https://readynative.app/docs/features/testing/none): The "No test runner" option of the ReadyNative Expo template: no jest; module tests are removed. - **Examples** - [Example apps](https://readynative.app/docs/examples): The weather demo you see on first run, plus two complete Pro apps built on the same modules - run one, read it, copy what you need. - **For agents** - For agents - [For agents](https://readynative.app/docs/for-agents): How Claude Code, Cursor or any coding agent should read a ReadyNative app - the graph, the shims, the generated files and the bundled skills. - [Full picture](https://readynative.app/docs/for-agents/full-picture): The whole template as one graph: modules, providers, routes, screens, libs, env keys - and the same map for your own app - [Conventions](https://readynative.app/docs/for-agents/conventions): The rules a ReadyNative app expects you to follow: the @/lib shim contract, where code lives, the files setup owns, how to extend the graph - [llms.txt](https://readynative.app/docs/for-agents/llms): This whole site as plain markdown: llms.txt, llms-full.txt, per-page content.md - and how to point an agent at them - [Store review](https://readynative.app/docs/for-agents/store-review): The store-review skill: what it judges, what bun run doctor --store checks for it, and how to run it from Claude Code or Cursor - **Reference** - [Config](https://readynative.app/docs/config): readynative.config.ts fields, app.config.ts variants and the generated .readynative.json. - [Scripts](https://readynative.app/docs/scripts): Every command in package.json - what it does, which flags it takes, and which ones survive setup. - [Doctor](https://readynative.app/docs/doctor): What every row of bun run doctor means, and what to do when one is red. - [How setup works](https://readynative.app/docs/how-setup-works): What `bun run setup` copies, generates, patches, strips and finalizes - and the tree you end up with. - [FAQ](https://readynative.app/docs/faq): Expo Go vs dev builds, changing modules after setup, adding modules, className, web, previews, env keys. - [Stack comparison](https://readynative.app/docs/choose-your-stack): One option per category - what each one costs you (Expo Go, keys, native code) and what it requires - [License](https://readynative.app/docs/license): What a Starter or Pro license lets you do with ReadyNative, and what it does not. The Free tier is MIT. - [Changelog](https://readynative.app/docs/changelog): What changed in each ReadyNative release - new modules, Expo SDK upgrades, fixes - mirrored from CHANGELOG.md at the repo root. - **Advanced (--keep-modules)** - [UI contract](https://readynative.app/docs/ui-contract): Screens import primitives only from @/ui; the stack behind it is a swappable adapter typed by UiKit. - [Module spec](https://readynative.app/docs/module-spec): The module.json contract, generated files and ownership rules (docs/module-spec.md)