Community CLI

Creating a Project with the Community CLI

The framework-free route is the init command of @react-native-community/cli (20.2.0), which installs the newest React Native 36,878 . --package-name sets the Android application ID and iOS bundle ID, and --install-pods false skips CocoaPods 66,002 , which needs a Mac:

Creating a bare React Native project with the Community CLIShell
npx @react-native-community/cli@latest init BookNestCli \
  --package-name com.example.booknestcli --skip-git-init --install-pods false
Output
...
              Welcome to React Native 0.87.1!
...
✔ Installing dependencies
...
    • cd "/home/dev/ch03-02/BookNestCli" && npx react-native run-android

It took 4 minutes 12 seconds. The native projects are source: android/ holds MainActivity.kt, MainApplication.kt, build.gradle and a debug keystore, and ios/ an Xcode 10 project, a Podfile and a PrivacyInfo.xcprivacy, all committed and edited by hand. The tooling is explicit: TypeScript (App.tsx), metro.config.js, babel.config.js, Jest 62,362 , ESLint 39,810 and Prettier 68,264 , with @react-native/* packages pinned to 0.87.1. npm 2,036 start runs react-native start (Metro), and npm run android builds, installs and launches the app.

Upgrades are the real cost. Each React Native release changes files in android/ and ios/, and you merge them yourself, usually with the React Native Upgrade Helper (https://react-native-community.github.io/upgrade-helper/ 126 ) diffs. An Expo 6,418 project regenerates those folders instead: npx expo install expo@latest, then npx expo install --fix and a fresh prebuild.