ReadyNative

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.

ToolVersionWhy
bun>= 1.2The recommended package manager and script runner. npm, pnpm and yarn work too - see Package managers
Node>= 22.18scripts/*.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 StudiooptionalOnly 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 install

This 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 setup

In 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 --yes

bun 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:

Presetdatastateformsi18nonboardinglocationwidgetsconsenttestingservices
minimalnonenonenonenoneoffnonenonenonenonenone
defaultreact-queryzustandreact-hook-formi18nextonexpo-locationnonenonejestnone
saasreact-queryzustandreact-hook-formi18nextonexpo-locationexpo-widgetsconsentjestsupabase, 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 --yes

3. Run it

bun run start

Press 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 ios
bun run start:dev

bun 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 doctor

doctor 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.

On this page

Get ReadyNative