Should I eject from ExpoKit to the Bare Workflow?

I currently work on an ExpoKit project. Since ExpoKit is to be deprecated, we are wondering what exactly will happen to our project. Are we still dependent on Expo’s SDK Version? What are the advantages to ejecting to Bare vs moving over to a react-native init app?

Also, in the documentation, I noticed that the options for ejecting to Bare are either an existing React Native app or an Expo project. Which of these two fits in the ExpoKit to Bare case?

hi there!

What are the advantages to ejecting to Bare vs moving over to a react-native init app?

it’s the same thing! “bare” is just another way of saying some plain react-native app initialized with react-native init. everyone has a different way of saying it i guess. when you eject (in sdk >= 37, soon to be released) you get a few things preinstalled in for you that you otherwise wouldn’t if you used react-native init:

  • expo-updates: you can continue using expo publish etc to update your app over the air
  • nearly all of your other expo-* modules will continue working as expected (some may require some changes, eg: expo-notifications is a slightly different api than the notifications api currently exposed in expo)

also, when you eject most of your configuration from app.json will be applied automatically to your project.

we’ll explain in a coming blog post how you might go about moving away from expokit. we won’t be able to automate it for you and it may take some work but it will, i think, make the project much easier to work with in the future.


Thanks! So, from my understanding, the Bare Workflow is also dependent on the Expo SDK version, correct?
If right now we move away from ExpoKit with SDK 36 to the Bare Workflow, when SDK 37 is available, will we be able to update and access the expo publish options on our app?

Edit: Edited for clarity

Hey @drearguello,

You do need to have a valid SDK version in order to use expo publish, but on Bare workflow you are otherwise not dependent on SDK versions.

You just have to make sure that all your packages are compatible with one another. And while we guarantee that all packages within an SDK version are compatible, the converse is not necessarily false.

Hope that helps. As Brent mentioned, we took some time to outline our thoughts behind moving (as a team) from ExpoKit to Bare, and our recommendations for how ExpoKit users can migrate smoothly to Bare, in this blog post.