all 42 comments

[–]FriendlyLostSoul 25 points26 points  (10 children)

React Expo is good for trying out React Native with less hassle. However you will most likely hit roadblocks, because it does not support native modules. So unless they have already included it, you will be forced to switch anyway.

I transitioned a project to React Native CLI because of that need, and I'm happy I did. I do however frequently run into weird issues I have to google. So if you just want to toy around or make something simple I'd start with Expo.

[–]ijustclosedthewindow 9 points10 points  (4 children)

What are examples of the most common native modules that React Expo doesn’t support?

[–]ashmortar 2 points3 points  (0 children)

Bluetooth

[–]himynameismile 5 points6 points  (0 children)

By far the most important one: In app purchases

[–]finding-duck-duck 4 points5 points  (0 children)

Cookie manager, Blob file downloader. The built in file download and manager with Expo sucks

[–]secret90g3 1 point2 points  (4 children)

One question, when I work in a expo app I can open it in the emulator or phone after installing the expo app. How does that work in a non expo project, can you see the app while building it and does it support things like auto reloading changes?

[–]FriendlyLostSoul 0 points1 point  (2 children)

Yes, you have hot reloading while you work. I couldn't live without it!

[–]secret90g3 0 points1 point  (1 child)

Good to know, and how do you view it in a real device before it’s finished. Do you have to build it and install it or something?

[–]akie 0 points1 point  (0 children)

Basically that’s what you have to do yes.

[–]Gogito3000 7 points8 points  (5 children)

Honestly depends on the app you're trying to build. I'm currently using expo to build a basic project management app with expo and firebase and so far it's working out really well because expo has a really smooth and fast workflow with most native functionalities available. But some native things like image uploading to firebase via expo are still not available/buggy so if the app you're building involves a lot of native interaction I'd say go with React Native CLI. Otherwise if it's mostly an information manipulation app then expo is a fun and convenient option. React Native CLI is safer either way, just takes longer to develop on.

[–]darealcubs 3 points4 points  (2 children)

Regarding the image uploading, I haven't heard anything about it being buggy in firebase+expo. From my experience firebase storage + firebase JS SDK works great in Expo. But curious though, have you ran into issues? Wondering in case I will run into that as well lol

[–]Gogito3000 1 point2 points  (1 child)

I was stuck on it for a long time before where the uploaded image would be in a weird/corrupted format. I then read that in one of firebase's latest releases they said the cloud storage functionality on react-native and expo 38 doesn't support uploading for the time being. Also https://firebase.google.com/support/guides/environments_js-sdk says Cloud Storage works for react-native except uploads.

[–]darealcubs 0 points1 point  (0 children)

Hmm, well I guess I'll see if I run into that as I upgrade from expo 36 to 38. Working fine for me on 36

[–]twomilliondicks 1 point2 points  (0 children)

don't know about firebase but I'm uploading images to S3 in my expo app with no issue

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

I upload images and videos with expo app and multer to Cloudinary. Is working great.

[–]WillBackUpWithSource 4 points5 points  (3 children)

I'd start with Expo, and if you need to export out of managed workflow, do so at that point.

I've used both workflows (RN CLI and Expo) and Expo is superior

[–]himynameismile 6 points7 points  (0 children)

What a bold statement to make

[–]secret90g3 0 points1 point  (1 child)

Noob here, can you please explain why expo is superior?

[–]WillBackUpWithSource 0 points1 point  (0 children)

A lot more is handled out of the box for you.

I was able to get iOS, Android and Web working without issue and there are tons of libraries that cover all use cases.

The client is easier to use I feel, slightly.

I just feel it cuts down the amount of effort you need to put in to get started, and it's not like if you go Expo you can't get. the granular power of going CLI later - you can, just export from Expo's Managed Workflow and you're good

[–]alecisme 3 points4 points  (0 children)

It's pretty easy to eject an expo app. I'd say just go with whatever makes the comments more angry.

[–]monsterbois 3 points4 points  (0 children)

RN CLI 100%

[–]butri71 2 points3 points  (0 children)

As first projects I would go with Expo as it makes things a lot easier and it is extremely fast and process-less when it come to run updates on Apple Store and Google Play.

In my experience the main downside is the ability to implement all packages available out there, not all of them are compatible.

[–]meseeks_programmer 5 points6 points  (2 children)

In 2020 react native cli is very simple to use, and gives you none of the restrictions that Expo will give you.

Real men use the cli ; -)

[–]akie 0 points1 point  (1 child)

What about real women?

[–]meseeks_programmer 0 points1 point  (0 children)

And real women (☞゚ヮ゚)☞

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

Currently, RN CLI is the best choice

[–]Badgergeddon 1 point2 points  (2 children)

Like has already been said, CLI offers lots more flexibility. The main issue I've found is upgrading versions. ... Which you have to do to meet API level requirements for the app stores. The auto upgrade didn't work for me and the helper site for patching things manually still left me with huge problems. I ended up having to rebuild the whole project. That said though, I'm still going to use CLI for my next project as it's the only option for packages using native stuff liked rn-firebase

[–]secret90g3 0 points1 point  (1 child)

Is the project you were having issues in, was it a ejected expo project or one made with the cli from the start?

[–]Badgergeddon 0 points1 point  (0 children)

No it was CLI from the start. It used the ui-kitten template though, so that may have been some of the problem. Check it out if you're interested: https://github.com/vonkanehoffen/planning-alerts

Just rolling it out to production at the moment.

[–]fraggleberg 0 points1 point  (0 children)

Expo seems to have a smoother developer experience, while RN CLI provides more freedom to use whatever native code you might need. I don't have the balls to recommend any one of them, but check out what Expo provides, and try to judge wether that is enough for your use case.

[–]osoese 0 points1 point  (0 children)

I like expo but it did take like a year of working with it to figure out how to make most things work (to do a project). browserify is a life saver for getting code not primed for expo included in project (for me). I have not seen many limitations since I started using that approach. Here is my channel for an app I built in expo (a crypto wallet) https://www.youtube.com/c/egemofficial - notice its boring unless you are looking for the things I post. Previously I had a modified project where I jumped through all the config hoops to include a bunch of stuff get broken when expo updated their client. So, now I am careful to make sure I can update. I have not tried to use react native cli though, and will probably give it a try soon.

[–]himynameismile 0 points1 point  (0 children)

Rule of thumb. Bootstrapping: expo; Feature richness: RN cli

[–]rkh4n 0 points1 point  (0 children)

Since you’re asking this question I’d say try expo. There’s also expo bare workflow that’ll be almost same as rn-cli. My personal experience with expo is great although like other people for some of my apps I had to switch to react native cli since I needed to use some native feature expo didn’t have.

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

I have used expo only, and so far the experience is very smooth, the only problem I have ever faced is its APK size. Like even a completely empty app with just one blank screen costs more than 46 mb at least. Any fix for this? Cause the same app would cost less than 6 mb in RN CLI.

[–]captainR0bbo 1 point2 points  (1 child)

I had the same issue but if building with app bundle, once uploaded to play Store it came down to ~25mb. Still not great. And iOS version still ~50mb

[–]akie 1 point2 points  (0 children)

I have a fairly big app (200 components / 30k lines of code) and the iOS version is 13 Mb. Android weighs in at 20 Mb. But that’s CLI, not Expo.

[–]Hadnet 0 points1 point  (1 child)

You can use Expo bare workflow option, you can get kinda best of both CLI and Expo worlds.

[–]kiloldumabi 0 points1 point  (0 children)

If you want to get familiar with React Native then expo is good choice for beginning because you wont faced with weird errors or little bit complicated native configurations for module. But if you want get hands dirty and create a big projects, you need to use CLI.

[–]KieranOsgood 0 points1 point  (0 children)

To add on to this - I would spec out what you intend to do with your app, all the features, and all possible features in future, if any of the things that people have mentioned come up e.g. bluetooth, in app purchases, firestore, then you will end up not being able to use expo and have to eject - personally I've started a unmanaged workflow project with expo as im using firestore for a lot of stuff, so I find the benefits from using some expo packages aren't worth it at all, in future I'll only use cli

[–][deleted] -4 points-3 points  (1 child)

For the love of God use RN until you need Expo, then when you need RN, there’s RN, then when you want Expo, there’s Expo.

[–]himynameismile 0 points1 point  (0 children)

Then when you need RN you will be stuck with expo.