Introduction
React Native Expo Boilerplate is a free, MIT-licensed starter for production React Native apps built with Expo. Instead of spending the first week of a project wiring up navigation, state, data fetching, storage, i18n, environments and CI, you start with all of it working and spend that week on features.
It comes in two parts:
- The CLI,
create-expo-boilerplate. This is how you use it. It asks which libraries you want and generates an app with only those, so there’s no example code or unused dependencies to rip out. - The boilerplate repo. The repo root is the template (Expo Router, Zustand, Unistyles, TypeScript). The CLI copies it and applies your choices on top. There’s no second copy to drift out of date.
What’s included
Section titled “What’s included”| Area | Library |
|---|---|
| Framework | Expo SDK 58, React Native 0.88, React 19.3, React Compiler |
| Navigation | Expo Router with typed routes, or React Navigation v7 |
| State | Zustand persisted to MMKV, or Redux Toolkit (Thunk or Saga) with redux-persist |
| Data fetching | TanStack Query v5, Axios, react-query-kit |
| Forms | React Hook Form, Zod v4 |
| Styling | Unistyles 3, React Native StyleSheet, or Tailwind via Uniwind, with light and dark themes |
| Storage | MMKV (AES-encrypted), expo-secure-store for the key |
| i18n | i18next and react-i18next: English, Spanish, Arabic (RTL) |
| Testing & quality | jest-expo, React Native Testing Library, ESLint 9, Prettier, Husky, Commitlint |
| Builds | EAS profiles for three environments, EAS workflows, local repack builds |
Who it’s for
Section titled “Who it’s for”- Teams who want every new app to start from the same structure and standards.
- Freelancers and agencies who start new client apps often and want to skip setup.
- Developers new to Expo who want to see how the pieces of a real app fit together.
Design principles
Section titled “Design principles”- Feature-based structure. Each feature owns its screens, state, API hooks and types, and exposes them through one
index.ts. ESLint blocks deep imports into another feature. - Screens don’t know the state library. UI uses hooks such as
useIsLoggedIn()anduseLogin(), never the store directly. Swapping Zustand for Redux doesn’t touch a screen. - Native folders aren’t committed.
android/andios/are generated byexpo prebuildfromapp.config.ts, so each environment gets the right name and config. - Fail early, fail loudly. Env vars are validated with Zod, the build fails during prebuild if one is wrong, and the CLI’s own edits throw if the template changed underneath them.
Requirements
Section titled “Requirements”- Node.js 22.13+ or 24.3+
- iOS: Xcode 26.4+ on macOS
- Android: Android Studio with an emulator or a device
- Cloud builds (optional): an Expo account and
npm i -g eas-cli
Next: create your first app.