Learn about the different workflows such as managed and bare for building apps with Expo tools.
The two approaches to building applications with Expo tools are called the managed and bare workflows.
If you've used React Native without any Expo tools then you have used the "bare workflow", however, the name probably doesn't sound familiar. It's easier to talk about something when it has a name, so we call this "bare" — somewhat in jest, and because of the existing term "bare metal". If you have direct access to the native code it's a bare project. See Already used React Native? to quickly understand where Expo fits in.
Developers build managed workflow apps using Expo CLI on their computer and a development client on their mobile devices (either the Expo Go app for more simple projects or a development build when your project grows). Managed workflow apps typically use one or more Expo services, such as push notifications, build, and updates.
While you can do a lot with the managed workflow, you can't do everything with it, so what are your options when you encounter a limitation?
If you get to the point where you need to have full control over the native code in your app, you can generate the native projects and continue development using the bare workflow. You can do this by running
In the bare workflow, the developer has complete control, along with the complexity that comes with that. You can use all packages from the Expo SDK, development builds, and all Expo and EAS Services. Configuration with app.json/app.config.js is mostly not supported in this context; instead, you will need to configure each native project directly.
|Feature||Managed workflow||Bare workflow|
|Use Expo build service to create your iOS and Android builds||(with EAS Build)|
|Use Expo's push notification service|
|Use Expo's updates features|
|Access to Expo SDK|
|Add custom native code and manage native dependencies|
|Develop in Xcode and Android Studio|
|Iterate with the Expo Go app||(if you follow these guidelines)|
In summary, use the bare workflow when you need it due to limitations, otherwise use the managed workflow, and you most likely want to start with the managed workflow.
If you want a more complete picture of building an app end-to-end with the managed workflow, you should follow the tutorial and build a universal app.