Quickstart
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.
Hey - by the end of this page the app runs on a simulator or on your phone, bun run doctor is
green, and the tree contains only the modules you picked.
You start from a cloned Starter or Pro repo - Get access gets you there.
The Free tier (ready-native-free) ships with its stack already picked and no setup or
doctor: run bun install, then skip to step 3.
Before you start
You need two tools; the rest is optional.
| Tool | Version | Why |
|---|---|---|
| bun | >= 1.2 | The recommended package manager and script runner. npm, pnpm and yarn work too - see Package managers |
| Node | >= 22.18 | scripts/*.ts and app.config.ts run under plain node, which strips TypeScript types natively from 22.18; setup and doctor check it first. 24 LTS is what I run |
| Xcode / Android Studio | optional | Only to compile a dev build locally - see Expo Go or a dev build for the options that need one |
bun run doctor checks the bun and Node versions, and checks the Xcode / Android SDK toolchains
only when a selected module has expoGo: false.
1. Install
bun installThis installs the committed tree, which equals the default preset - a working app before you
choose anything. Run bun run ios (or bun run start for Expo Go) now if you want to see it:
it opens on the weather demo, which shows the modules working
together - location, the offline cache, six languages with right-to-left Arabic, the native tab
bar - before setup swaps it for a clean home screen.
You should see: the install finish without errors and a node_modules/ folder at the root.
2. Pick your stack
setup is one-way
Unless you pass --keep-modules, setup deletes modules/, finalizes the tree and leaves a stub
that prints "Already applied". Pick with Pick your stack open, or run
bun run setup --keep-modules to keep the tree switchable. How setup
works has what finalizing does.
bun run setupIn a terminal, setup asks one question per category. To skip the prompts, pass
--preset <name> and/or --<category> <option> plus --yes:
bun run setup --preset saas --ui tamagui --yesbun run setup --help lists every category and option, and --dry-run prints the plan without
changing anything. Every flag is in Scripts.
You should see: src/providers.tsx, src/lib/env.ts, .env.example and
.readynative.json written for your selection, the kit in src/components/ui, and a "Start:"
line saying whether your stack runs in Expo Go.
The presets
A preset is a complete answer for every category:
| Preset | data | state | forms | i18n | onboarding | location | widgets | consent | testing | services |
|---|---|---|---|---|---|---|---|---|---|---|
minimal | none | none | none | none | off | none | none | none | none | none |
default | react-query | zustand | react-hook-form | i18next | on | expo-location | none | none | jest | none |
saas | react-query | zustand | react-hook-form | i18next | on | expo-location | expo-widgets | consent | jest | supabase, revenuecat, posthog, sentry, push, api-routes |
All presets use ui=nativewind4 (stable NativeWind 4.2 on Tailwind 3; NativeWind 5 is
--ui nativewind5, still a release candidate) and storage=kv-store. The committed tree equals
setup --preset default. saas is default plus every service category turned on
(supabase, revenuecat, posthog, sentry, expo-notifications, api-routes) Pro and
the iOS home-screen widget; I verify it before every release, and it needs a dev build because
RevenueCat, remote push and the widget are native. The Starter repo has no service modules, so it offers minimal and default only.
Override any preset per category:
bun run setup --preset minimal --data swr --yes3. Run it
bun run startPress i or a for a simulator, or scan the QR code with Expo Go. start is
expo start --go when every module you picked runs in Expo Go (the default preset does) and
expo start --dev-client otherwise.
If your stack needs a dev build, install it once, then start against it:
bun run iosbun run start:devbun run android is the Android twin, and bunx eas-cli build --profile development builds it in
the cloud instead. Expo Go or a dev build explains which stacks need
one and how to make it.
You should see: the app open on the Home tab - after the onboarding slides, if your stack has
them. Before setup (or with --with-examples), the Home tab is the
weather demo: it asks for your location, shows the forecast
and has a Cities tab; after setup it is a plain welcome screen.
Developer tools
While the app runs from the dev server - in Expo Go or a dev build - Settings โ Developer tools has shortcuts for checking what your stack does. Release builds never show it, and the Free tier doesn't have it. Rows tied to a module appear only when you picked that module:
- Page map - Expo Router's
/_sitemap: every route, tap one to open it. - Replay onboarding - runs the onboarding slides again.
- Show consent sheet - in any region, through
consent.reprompt(). - Preview paywall -
payments.presentPaywall(). - Open sign-in -
auth.openSignIn(). Sign out first, or the redirect sends you straight back. - Send test notification -
push.sendTestNotification(), delivered 3 seconds later. - Trigger a crash - throws during render, to test the error screen and your crash reporter.
Below the rows, Environment lists which EXPO_PUBLIC_* keys the build reads as set or
missing (never their values), and App info shows the version, build, variant, runtime version
and update id.
4. Check yourself
bun run doctordoctor checks .readynative.json, every env key your modules need (with links to the
dashboard that issues it and to the guide here), the placeholders in readynative.config.ts,
your EAS login, your package manager and the toolchains. Placeholders such as com.acme.app or
the default icon are listed under "Before you ship" as warnings, so a fresh setup exits 0;
doctor --store turns them into failures. Row by row: Doctor.
You should see: a checklist with no red rows, and the "Before you ship" warnings you'll clear in the next tutorial.
Congrats ๐
You have a running Expo app with exactly the modules you chose and nothing else. Next, give it your name, colours and icon: Make it yours.