This is an Opinionated React Native template with sensible defaults.
The template was originally developed at WillowTree, and later open sourced.
It is designed to enforce a consistent developer experience for React Native teams of any size.
Tip
Before cloning this repo, you should run through the React Native Environment Setup docs for both iOS and Android.
Make sure you already have tooling such as Xcode and Android Studio installed.
- based on Expo's Default template but additionally includes several additions & customizations
- includes ESLint + Prettier
- includes VSCode / Cursor extensions
- includes Expo Skills and Expo MCP
- includes Jest + React Native Testing Library for unit testing
- includes Maestro for E2E testing
- includes Storybook for component development
- includes GitHub Action for PR Checks
The template is pre-configured for use with Claude Code, Codex. Other agents should work too, but may require additional setup.
Note
This template is set up to use Continuous Native Generation.
Please note that it is not compatible with Expo Go.
We highly encourage forking this repository to your own GitHub org so you can add organization-specific information to it. This allows your teams to get started as quickly as possible.
For example you could add the following to your forked repo:
// in app.json
{
"expo": {
"ios": {
"bundleIdentifier": "com.jpmigueldriver.myapp",
"appleTeamId": "YOUR_TEAM_ID"
}
}
}(see Apple Team ID docs)
This will ensure that any new apps made with your fork of the template are pre-configured to use your organization's Apple Team ID, and allows for easy development and testing on physical devices.
Another recommended modification is adding the owner field in app.json so any created apps will be pre-configured to work with your organization's EAS account.
Warning
Make sure you are using Node >=22.22.1
- delete either
package-lock.jsonoryarn.lock(see Package Managers below) - find & replace
my-appwith your app name - find & replace
com.jpmigueldriver.myappwith your app id - run
./scripts/init.shto install the dependencies - run
npm run iosornpm run androidto start the app - run
npm start:storybookto start the storybook UI
Please note that this template is open-source and MIT licensed. If your project is not open-source, you should:
- delete the
LICENSEfile - remove the
"license"field frompackage.json - add
"private": truetopackage.json
Important
To ensure tested + compatible versions of dependencies are installed, this template includes lock files for both NPM and Yarn.
As one of the first things you do, you should pick which package manager you want to use.
# if you want to use NPM
rm -rf yarn.lock
./scripts/init.sh# if you want to use Yarn
rm -rf package-lock.json
./scripts/init.shThis project expects Ruby 3.2.0 or newer, with .ruby-version currently pinned to 3.2.10.
If your system Ruby does not meet this, use a version manager such as rbenv or rvm.
You may need to update the .ruby-version and Gemfile.lock files to match the version of Ruby you are using.
This project uses Bundler to manage Ruby Gems such as CocoaPods. You should not need to install CocoaPods separately (e.g. via Homebrew).
-
Customizing Jest
-
to collect Code Coverage add the following to your
jest.config.js"collectCoverage": true, "collectCoverageFrom": [ "**/*.{ts,tsx,js,jsx}", "!**/coverage/**", "!**/node_modules/**", "!**/babel.config.js", "!**/expo-env.d.ts", "!**/.expo/**" ]
-
-
Add more GitHub workflows
- if you are using EAS Update you can use the following GitHub Action to show a QR code to scan for iOS and Android
- EAS is a suite of tools for building, deploying, and maintaining your app
- see EAS documentation
- This template is only intended for use with iOS and Android apps.
react-native-websupport has been removed