Expo's managed workflow speeds up initial development but restricts access to native modules, forcing developers to consider a bare workflow when they need deeper customization. The limits come into focus especially when specific native functionality is needed, or when a project exceeds Expo's built-in capabilities.
Where Does Expo’s Managed Workflow Help?
The managed workflow is beneficial for rapid prototyping and development, offering built-in tools for assets, networking, and build processes without needing to eject. It simplifies the setup and configuration for newcomers or developers focusing on JavaScript.
What Are the Real Limitations of Using Expo?
Expo limits access to certain native modules. For many projects, this is manageable, but once you need to integrate features like custom push notifications or specific hardware access, Expo's restrictions can become a significant issue.
When Should You Consider Ejecting from Expo?
You should consider ejecting when you reach a point where the managed workflow's limitations hinder your development. If you find yourself needing to use native libraries that aren't supported, such as for advanced analytics or custom Bluetooth interactions, it's time to move to a bare workflow.
What Native Modules Are Commonly Required?
Some common native modules that may prompt a switch to a bare workflow include:
- React Native Maps: Custom map functionalities often exceed Expo's capabilities.
- Custom Notifications: If you need specific push notifications behaviors or functionality.
- Bluetooth: Integrating with Bluetooth hardware often requires native access not found in Expo.
How Does Expo Prebuild Change the Equation?
With Expo prebuild, there's a clearer path to accessing native modules because it generates the necessary iOS and Android folders while allowing you to continue using Expo tooling. This hybrid approach means you can take advantage of Expo's features without losing the power of native modules.
What Are Some Cases Where Prebuild is Essential?
You may find prebuild especially useful when:
- You need custom native functionality but still want to manage aspects of your app via Expo.
- Your app’s requirements exceed the scope of available Expo APIs, necessitating additional native capabilities without a complete ejection.
- You want one codebase while making use of some libraries requiring native builds.
What Should You Do Before Deciding?
Before deciding to stick with Expo or move towards a bare workflow, evaluate these factors:
- Project Requirements: Make a list of all required features and compare them against Expo's capabilities.
- Future Needs: Don't just consider the immediate requirements; think about potential future expansions.
- Development Speed: Weigh the trade-offs between the quick setup of managed workflow and the custom capabilities of a bare workflow.
How Can You Evaluate If You’re Ready to Eject?
Create a checklist:
- Identify Required Native Features: List all the libraries and functionalities you’d like to implement.
- Test on Prototype: Try a dummy app to assess if Expo’s managed workflow meets your needs before fully committing.
- Incremental Steps: Consider opting for prebuild to test the waters.
To move forward, take a thorough inventory of your app's needs. If you hit a wall with Expo's managed workflow, consider how prebuild or a complete switch to a bare workflow can accommodate your requirements without losing the advantages Expo provides.
Next Steps
Evaluate your project's needs against Expo's capabilities. If you find frequent roadblocks or need native modules, explore using expo prebuild to keep flexibility while leveraging managed services.

