I don't understand the point of `expo-dev-client`

Please provide the following:

  1. SDK Version: all
  2. Platforms(Android/iOS/web/all): all
  3. Add the appropriate “Tag” based on what Expo library you have a question on.

I’ve recently began converting my projects to Expo to make use of EAS, and one thing that just confused me is why expo-dev-client is a thing? I don’t really understand its use case. If we need to run locally we do expo run:ios which connects the react native server to our app either on a simulator or device, and since that actually builds the app using config plugins we can leverage native code as well.

If we need to create an app for any people on the team to use like QA, then we’d just create an internal distribution build with the Release schemes. So, like, what’s the point of this thing? It actually makes dev harder because it breaks things like deep links, and I just generally don’t see why it exists. Personally it was really confusing because when I first started my deep dive into expo it seemed like the preferred way to develop locally, even though just running expo run ios is like 100x easier and doesn’t break deep links and such.

I really don’t understand why it exists, and at the least I think the docs should be updated to explain that: 1. using the dev client isn’t necessary and 2. what the use cases for it actually are?

even though just running expo run ios is like 100x easier

The fact that it’s easier for you does not mean it the same for others.

running run ios has it’s disadvantages

  • You need to have MacBook and xcode installed, a lot of users can’t use expo go because they are adding some package with native code, but they do not change anything else in native code. They do not need to setup all that native toolchains.
  • You need to be part of the apple team to even build.
  • On bigger projects, one team can maintain native side, and others just use native client provided by them. In that case they only need js toolchain on their machine
  • Unless you are deleting android/ios folders regularly you can reach a point where run:ios will go out of sync with what would be in production build.
  • You are getting a standard react-native debug menu, instead of expo one.

Basically, dev client is for people that can’t use Expo Go, because they added sth that is not supported there.

1 Like

That makes sense, but what doesn’t make sense is that expo-dev-client is being pushed by expo as the default mode of development when it’s actually only useful to a subset of developers. IE on this page Installation in React Native and Bare workflow projects - Expo Documentation one of the install steps is to install expo-dev-client, which makes it seem like it’s required even though in my case it actually increases complexity and is more difficult than simply doing run ios.

I just think it’s confusing to frame something that’s not required, nor is it best for some people, as the defacto way of doing dev in Expo. At our company all of our devs have native toolchains setup and we work on small teams where there’s a single front end React Native developer handling all the front end code, and the only handoffs we do are via EAS build, so this whole expo-dev-client has basically no value to us personally, so having it framed as the standard for dev in Expo is actually pretty misleading for us. Based on the docs it’s not even obvious that development is possible without it and that it’s completely opt-in.

This actually made it more difficult for us to adopt Expo in the first place.

Thanks for the reply, it is very informative, and I do love the service. But I do think there’s a real issue with the documentation here.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.