Skip to content

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.
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
  • 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.
  • 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() and useLogin(), never the store directly. Swapping Zustand for Redux doesn’t touch a screen.
  • Native folders aren’t committed. android/ and ios/ are generated by expo prebuild from app.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.
  • 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.