Brent Watne's answer is good, but I would like to add some details.
Expo Extends React Native API
React Native does not provide you with all the necessary JS APIs out of the box, but provides only the most primitive features. React Native developers are expected to use Android Studio / XCode to link additional native libraries. Expo aims to improve RN and provide the entire JS API needed for the most common needs. Basically, this is a set of clearly defined high-quality native libraries that are already packaged for you into one library: ExpoKit. Sometimes these libraries already exist in the RN world and are integrated into ExpoKit.
It is also important to note that the Expo team cannot include every library in ExpoKit (which may cause some frustration), because the size of the hello world application will grow, because it will supply many APIs that will not be used in most applications.
Expo Provides JS Wireless Updates
Like other systems (CodePush ...), Expo provides a system for updating your application wirelessly. This means that you download your JS package to the CDN, and mobile applications automatically download and use the new JS the next time you start (without requesting publication / review in stores).
Expo provides a CLI tool for loading / managing JS packages on their CDN. For development, you can also become a CDN and host the JS package on localhost. And XDE is just a visual wrapper for the CLI.
Expo provides a common customer
The Expo client is a shared client that allows you to download any Expo compatible application. All Expo applications have the same built-in runtime (RN + ExpoKit), the only difference is that we give them JS. The Expo apps you publish in app stores contain the URL of your JS package. The Expo client is built in a special way, so you can choose which URL to load JS from by scanning QRCode or providing the URL.
Please note that this client can also download JS packages from the local host and simplify the development process: there is no need for Xcode or Android Studio, and it launches your first Hello World on the phone much faster (from hours to minutes). You can develop on an iPhone without a Mac, and the installation takes 2 minutes.
In fact, since the Expo SDK can be updated, the Expo client includes a compatibility layer that allows you to run the latest 5 versions of the SDK.
Expo provides assembly service
Since all Expo applications use the same native code, Expo can easily create these applications for you. They created a cloud build service.
The main thing that distinguishes the 2 applications created by Expo is simply the hard-coded URL at which the application must download the JS package to run.
Expo does some other things for you, such as providing a declarative way to configure application icons, orientations, permissions, API keys, help in setting up push notifications, providing profiles ... many parameters must be hard-set during assembly in the application and may not can be changed by air.
Expo is “Responsive to the Native,” like Phonegap for Cordoba
React Native is similar to Cordova. This is not the same presentation technology (native or web version), but both allow you to control native functions from javascript, and both offer a plug-in system so developers can easily add new JS / native bindings.
MOVIES SIMILAR TO Expo They both try to enrich the crude API of the underlying platform on which they are built, using a predefined set of additional native plugins. PhoneGap also offers a build service and has a universal client that works while you use approved plugins.
Conclusion
As you can see, Expo is a toolbox. In the end, it makes it easy to develop, share and publish your mobile projects in stores. This is very similar to the PhoneGap experience (but much better and less confusing).
I will definitely recommend Expo for any new React Native project, except for these two cases:
- You already know that you need an API that is not in Expo and that will be available soon
- You really care about the size of your application (HelloWorld is> 25 MB due to the large size of ExpoKit, but after that it does not increase much since it is just JS)