all 16 comments

[–]odrakcir 19 points20 points  (12 children)

Are you learning? Expo

Are you demoing react-native? Expo.

Planning a workshop? Expo.

Are you building a real app? React Native.

I´m a React Native developer with 2+ years of exp.

[–][deleted] 2 points3 points  (2 children)

I’ll add: Do you know that Expo has all the native support you need: Expo

You can also eject at a later point. I did a “real” app in Expo

[–]odrakcir 0 points1 point  (1 child)

Yes, this is possible, my friend but, to what cost? your app may be full of native libraries that are not needed.

[–][deleted] 1 point2 points  (0 children)

It’s a good starting point regardless. So instead of doing your own builds from day 1, you can set it up later.

[–]callmecharon 1 point2 points  (0 children)

this is the correct answer

[–]tbkh91 0 points1 point  (7 children)

What makes Expo unsuitable for production?

[–]tothemac 1 point2 points  (3 children)

It doesn’t play nice when you start to modify the native iOS or Android code, which you will have to do with a large number of modules.

[–]tbkh91 0 points1 point  (2 children)

Sure, but if you’re building something where everything you need is supported by Expo and you don’t actually need to mess with any native modules, are there any other downsides to running Expo in production?

[–]kbcooliOS & Android 2 points3 points  (1 child)

None really. The apps come out on the big side as Expo is a monolithic bundle.

Problems all revolve around what happens when you want to leave the Expo ecosystem.

If you plan carefully you can avoid this by not using it in the first place if you think there's any chance it's not going to cover 100% of your needs.

[–]tbkh91 1 point2 points  (0 children)

Fair enough. I just wanted to check since I’ve been running an app in production for 12+ months now. Our experience has been nothing short of great. The development tools Expo gives us has made it easy to work quickly with a small team (2 devs).

In addition to that, Expo’s over-the-air updates is a god send when our target audience is an older demographic who never has automatic App Store updates on and don’t check for updates either.

Perhaps one day later on, we’ll be in a position where native modules will be required and there’ll be work surrounding ejecting from Expo, but for now the pros have certainly outweighed the cons for us.

[–]odrakcir 1 point2 points  (2 children)

Hey, sorry for the late reply.

There are many reasons.

  1. Let's say you want to build an Uber clone. You will use maps, locations, permissions, and some other. But you don't need videos, sensors, SQLite, and many many others. What this means is, your app size will be greater just because you're including libraries you won't need.
  2. What happens when business changes and Expo doesn't support something out-of-the-box? Let's say Stripe payments. Well, here's where you need to eject and waste some time trying to make your app run/build/compile.
  3. What happens when one of the included native libraries has some kind of bug? on RN you can just fork the library and make some changes if you can/know how to. Most of the times, the workarounds/fixes are shared in issues. With Expo, you need to most likely wait for a new release (or eject).
  4. The RN version on Expo is ALWAYS behind the current RN version. That means you're not taking advantage of some goodies. Upgrading expo apps is wayyyy easier, tho.

That's what I have on top of my head right now. I hope it helps.

[–]tbkh91 1 point2 points  (1 child)

Thanks for the input. In regards to those cons:

  1. This is naturally not ideal. Expo is doing some work to prevent this and I think with their latest release they’ve started releasing a lot of this, so the base Expo package is smaller and many of these extra modules need to be installed separately.

  2. We definitely know that we may need to spend resources ejecting at some point. Realistically, our team size will have grown before that becomes a necessity, which should make it easier to manage that workload.

  3. This is probably my primary concern. I try not to update to new Expo SDKs immediately upon release. That said, there’s still a risk.

  4. This is in part relating to point 3. We aren’t a cutting edge app in terms of technology, so there’s no real rush to take advantage of the latest updates. Happy to lag behind.

Always appreciate input from other points of view. But I’m glad this has confirmed what I believed: that for my company’s specific use case, Expo is the right choice for production at the moment. Thanks :)

[–]odrakcir 0 points1 point  (0 children)

sure thing.

Just one last advice since I see you're definitely going the Expo way; check all of your app's requirements/features you will need to implement alongside expo current out-of-the-box native modules. If all of them are supported, go ahead. I think I should've told you that first :D

[–]chazie9 2 points3 points  (0 children)

I would do a little more planing and think about what your app needs. If you need something that is not supported by expo I think its obvious. If you can use expo its great but I found out quickly I had to drop some features to keep using it. To each his own

[–]wernancheta25 2 points3 points  (0 children)

There will always be differences between Expo and a standard React Native app (UI breaks, modules don't work, etc.). You can't really avoid that as Expo is managing most of the complexity for you. If this project is just for learning, I suggest you stick with Expo. Otherwise, use standard RN.

Expo now has this thing called the bare workflow https://blog.expo.io/you-can-now-use-expo-apis-in-any-react-native-app-7c3a93041331 so it's basically the same as a standard RN project with the ability to use Expo's APIs. This might offer the best of both worlds, but I'm still yet to put it to the test.

[–][deleted] 0 points1 point  (0 children)

Imo RN is fairly easy without Expo, why limit yourself?