differences between create-react-native-app and exp init

Answer to this question is well documented in expo documentation

Expo & "Create React Native App"

Create React Native App lets you build a React Native app without any build configuration. This may sound familiar to you because Expo does this as well -- when you create a project with XDE or exp you don't have to deal with Xcode or Android Studio configuration files, it just works. This guide is intended to outline some of the key differences between Expo and CRNA (create-react-native-app).

CRNA does not require you to have an Expo account

You can run create-react-native-app YourAppName and off you go. So what does not having an account mean, and what would signing up and using XDE/exp get you -- why do we require it with Expo? Having an Expo account allows you to do the following:

  • Publish your project to a permanent URL, eg:https://expo.io/@community/reactconf2017.See Publishing on Expo for more information.
  • Build binaries for app / play store distribution. To do this with CRNA without using Expo, you would need to run eject.

There are advantages and disadvantages to either:

React Native app advantage:

You can add native modules written in Java/Objective-C

React Native app disadvantage:

Needs Android Studio and XCode to run the projects

Expo advantages:

Setting up a project is easy and can be done in minutes

Expo can build .apk and .ipa files

You do not need simulator to run your app.

Expo disadvantages:

You can't add native modules.

Your final app will bigger with expo init than with react native app init.

I suggest you read this: https://docs.expo.io/versions/latest/introduction/why-not-expo


Updated answer:

create-react-native-app was replaced by expo-cli.

https://docs.expo.io/workflow/glossary-of-terms/#create-react-native-app