A starter boilerplate for a mobile app using React Native and React Native Navigation (v8). This boilerplate also provides a cool redux-saga structure to bootstrap your react-native app development.
- React Native 0.85 β pinned to the version React Native Navigation builds against
- React Native Navigation 8 β native navigation, owns the app root
- Redux Toolkit + React Redux 9
- Redux-Saga β side effect model
- Redux Persist backed by AsyncStorage
- TypeScript, ESLint, Jest
- React Native Elements (@rneui) β UI toolkit
- React Native Vector Icons β per-family packages
- React Native FBSDK Next β Facebook login
- React Native Config β env vars
New Architecture is required. React Native removed the legacy bridge in 0.82, and RNN requires the New Architecture on RN 0.77+. This app runs bridgeless.
- Node >= 22.11
- JDK 17 β see the note below, a newer JDK alone is not enough
- Android Studio with the Android SDK
- Xcode and CocoaPods for iOS
React Native's Gradle plugin is an included build that declares
jvmToolchain(17), so Gradle needs a JDK 17 installation specifically. If it can't find one it tries to auto-download it through the Foojay toolchain resolver β and the version React Native pins (0.5.0) predates Gradle 9, so on the Gradle 9 wrapper this template ships it fails with:Class org.gradle.jvm.toolchain.JvmVendorSpec does not have member field '... IBM_SEMERU'Installing a JDK 17 lets Gradle auto-detect it and skip the resolver entirely:
# Windows $ winget install --id EclipseAdoptium.Temurin.17.JDK --source winget # macOS $ brew install --cask temurin@17Then point
JAVA_HOMEat it. Android Studio's bundled JBR (21) does not satisfy this.Building with a newer JDK fails differently β JDK 26's
jlinkcannot process Android'score-for-system-modules.jar:Execution failed for JdkImageTransform: ...\platforms\android-36\core-for-system-modules.jarOn Windows, check the user
JAVA_HOMEand not just the machine one β the user value wins, so an old user-level entry silently overrides a correct machine-level one:[Environment]::GetEnvironmentVariable('JAVA_HOME','User') [Environment]::GetEnvironmentVariable('JAVA_HOME','Machine')To scope the JDK to Gradle only, instead of changing
JAVA_HOMEfor every tool, setorg.gradle.java.homein~/.gradle/gradle.properties.
The New Architecture compiles C++, and the Android SDK's
cmake.exeis dynamically linked against the MSVC runtime. Without it, CMake exits withNTSTATUS 0xC0000135(STATUS_DLL_NOT_FOUND), which surfaces as a confusingninja: error: rebuilding 'build.ninja'rather than an obvious missing-dependency message.$ winget install --id Microsoft.VCRedist.2015+.x64 --source winget
$ git clone https://github.com/atoami/react-native-navigation-redux-starter-kit ReactNativeBoilerplate
$ cd ReactNativeBoilerplate
$ npm install --legacy-peer-deps
--legacy-peer-depsis needed because@rneui/basedeclares its testing libraries as peer dependencies.
Run Android:
$ npm run androidRun iOS:
$ npm run pods
$ npm run iosThe Facebook app ID checked into this template is a placeholder and the client token is not set, so login will fail until you supply your own. Get both from developers.facebook.com/apps β Settings β Basic, then replace them in:
android/app/src/main/res/values/strings.xmlβfacebook_app_id,facebook_client_token,fb_login_protocol_scheme(the scheme isfb+ your app ID)ios/ReactNativeStarterKit/Info.plistβFacebookAppID,FacebookClientToken, and theCFBundleURLSchemesentry
src/
βββ assets/ images and icons
βββ fonts/ SF Pro Display wrappers + the .otf files
βββ navigation/ screen ids, root layouts, screen registration
βββ redux/ store, persistence, Provider, and ducks-style modules
βββ screens/ one directory per screen
βββ services/ fetch wrapper
Screens import through path aliases (src/..., assets/...) configured in babel.config.js and
tsconfig.json. Keep the two in sync when adding an alias.
| Command | Description |
|---|---|
npm start |
Start Metro |
npm run android / npm run ios |
Build and run |
npm test |
Jest |
npm run lint |
ESLint |
npm run tsc |
TypeScript check |
Do you have any concern to run this project?Β Β Please feel free to contact me!
This project is licensed under the MIT License

