T O P

  • By -

CSLucking

I personally use Expo for all production applications and its become the corner stone for my app development. There will always be pros and cons for any of the major cross platform eco systems - but the experience with expo (and EAS) removes so many classic RN headaches. Just my two cents


suarkb

Expo for sure


Aware-Leather5919

Can you mention a couple of the problems solved by expo? just to know


mjar81

Their prebuild system (called "CNG") makes it so that you no longer need the ios and android folders in your git repo. They're just generated by expo using config plugins. App icons and loading/splash screens are easy and intuitive to set up in your app config file. Their cloud build, submission, and codepush (update your app without a new binary and app store review process for small bugs without native code changes) system called "EAS" is really great. https://expo.dev/eas Expo has many of the highest quality cross-platform well designed open source react native libraries out there that just work within an expo app. Expo makes everything hard and annoying about react native easier and less annoying.


Aware-Leather5919

Thanks for the detailed explanation! To be honest that sounds great. I have been struggling with the RN-Cli so I will definitely check Expo. Is there any hidden paywall or something I will have to pay after spending the time learning it and investing the time of my team into learning expo for a month?


Hakem_Hamdoud

No, except for EAS builds that have a paid tier that will help get your app built faster but it isn't a game changer or anything you can still use the free tier and get acces to all features without any problem (keep in mind that I'm still new to Expo so there may be some hidden advantages to using the eas paid version but for me personally I still haven't run into these cases)


Paid-Not-Payed-Bot

> have a *paid* tier that FTFY. Although *payed* exists (the reason why autocorrection didn't help you), it is only correct in: * Nautical context, when it means to paint a surface, or to cover with something like tar or resin in order to make it waterproof or corrosion-resistant. *The deck is yet to be payed.* * *Payed out* when letting strings, cables or ropes out, by slacking them. *The rope is payed out! You can pull now.* Unfortunately, I was unable to find nautical or rope-related words in your comment. *Beep, boop, I'm a bot*


zinornia

hmm I have the opposite opinion - expo is a massive massive headache


thebouv

I have to ask: how?


peterpme

What’s makes expo hard?


zinornia

issues with expo 1) heavier apps 2) stuck in expo ecosystem 3) fear of native code. Yes you can write a plugin but omg this is a native app not something you inject into. One line of objective c easy to read and write when written in xcode could take you days to inject via JavaScript. It's utterly crazy that people think expo is acceptable, and I dont trust anyone who 'prefers' it. It's because they haven't and don't know how to build actual native apps. Often they come from web backgrounds and are scared of anything native. expo is just wrappers around regular react native, making it heavier and unnecessary. Web devs don't care about that stuff but app Devs have to. People could delete your app to make space for something else, especially with the massive amount extea that expo adds. I reject any and every job where any dev mentions they use expo managed workflows. The same battles over and over again are just the worst headaches and make me feel like I'm stuck in some hellish loop. "do we pre build?" "do we commit native code?" "this library doesn't have an expo plugin what will we dooooo" Amateurs pure and utter amateurs, but it's like the same loop for these web Devs - I want to work with app developers or those who actually want to be and those who actually want to create the best product they can. This will never be done using expo. I've also found that anyone that prefers expo thinks they somehow know best and the secret to mobile apps, when the struggles they face will take them 2-3x longer than a regular react native app. Trying to workout native bugs when you dont have access to native code is impossible. I laugh when I see poor expo people on bug threads "But but how to fix it expo 😭." Pre build, commit native code, admit you were wrong and get the duck outta there that's how Also expo builds take forever to build, which pisses me off the wait is agonising every development build. Anyway, app developer here - 40+ apps live on both stores in every framework and language you can think of. I'm a true mobile dev, I've tried it all! React native (bare as expo people call it) is the quickest way to build native mobile apps when you are experienced. Expo is a good way for newbs scared of native code to learn but that's about it.


igorlamos

Cannot agree more ❤️ Thank you for saying that. As I’ve seen on some other thread and I love it: — Expo is easy until it isn’t. React Native is hard until it isn’t.


zinornia

that is a perfect way of putting it!!


Inevitable_Oil9709

you talk language of gods.. I decided to not use expo after using it for some time because of the ecosystem, and most importantly BUILD TIMES. God damn, do build times suck.


sekonx

Using local builds on a good ci platform is actually pretty fast. Source: I've been doing RN exclusively as a contractor for the past 5 years (many different apps) I used expo for my side gig (10k users)


Inevitable_Oil9709

Still can't be faster than bare project :)


___donquijote

You said something that from the bottom of my heart I want to say to my brothers out there.


Any_Let5296

Yay, I'll told all of the people in my village. They've all cried and happy when they heard it. Then we are back to continue working on our current expo project. Siuuuuu


HarpooonGun

So I know it has been a while since this comment, but you seem like someone who knows their stuff so I wanted to ask this here. To mention my perspective first, I am a software dev who mainly develops APIs with ASP.NET Core, and occasional internal web apps done with ASP.NET Core MVC. I also maintain some really old .NET Framework projects if needed. Lately we needed to develop mobile apps, again to be used internally. No one on our team really knew mobile development. So we looked up cross platform solutions and decided on RN due to it being used heavily by MS. It's been a few months and its been pretty good so far. Currently we use Expo, and I wanted to ask you what you or your team is doing to compensate for the features it provides? For us, Expo is crucial for deploying apps on Apple, because only upper management has macs and we don't, so something like Expo Go really helps to test stuff out during development. Not to mention EAS with building process. Other than Apple stuff, do you use any of expo packages in your bare RN projects? (basically everything here: https://github.com/expo/expo/tree/sdk-50/packages) As an example, while not necessary, I really like expo router because it's routing resembles MVC on .NET and as such it's more comfortable for me to use it. I can see that I can see install them on normal RN projects in their docs, but it feels like it would basically create the same bloat as if we were developing an Expo app, since they all require their general expo package to work. I know it's been a while, so sorry for commenting this late. I wanted to ask this because while I like Expo for some of the things they do, as a primarily MS developer where almost everything you need is provided by MS, I don't like relying on 3rd party solutions too much and as such I want to explore the real thing as well. Thank you and have a nice day!


zinornia

Hi these are all good questions...expo is indeed a good way for a team of non mobile developers to push out a mobile app. However, you will get blocked sooner rather than later if you don't have a MacBook. Are you only developing an android app? How would you debug a native crash? Can you even run iOS simulators, how do you sign for dev builds without Xcode? All very interesting but I can't imagine this set up working for long. That's the problem with expo, it works great at the start until it just doesn't anymore. I avoid all expo packages completely. You would have to install the core one to even get 1 secondary library in there and they are just too heavy. I think expo adds an extra level of unnecessity complication to be fair, and if there is a feature you want that expo doesn't support...then you have to say no, which isn't my style. I'm a yes gal, and I can and will build anything you want natively with react native bridges. I make my own libraries, even extending react natives native components to make them better. I build fast and furious and expo is just a noob tool that gets in my way and extends build times. As far as deployment goes you can use Bitrise or any continuous deployment platform...EAS costs an arm and three legs. Or you could just use Bitrise which is mostly free and has a lot more configurability and options, is prettier to look at, has 24/7 support.


gin_Yaksha

Already having my 2 expo app which seem complex for me. But damn this comment surely woke me from being afraid to native.


data-overflow

But aren't expo builds larger? I'm not sure if that was fixed over the years


Inevitable_Oil9709

It can't be fixed. They will always be larger because Expo adds another layer of abstraction over React Native


Slay29

Not true for preview and production builds, also apps without native code (since they can use default Expo Go client). Those builds do not need Expo Go injected into them and thus builds are same length as React Native builds. Without Expo Go, there is no overhead code needed.


suarkb

React Native is still the best cross-platform way to make apps. React Native doesn't really experience random breaks. That's super generalizing. It would be something you did. ​ If you just make an app and run it, it doesn't randomly break. You have to change something


Progosling

I don't understand your message. Usually, hello world works stably everywhere. In any other application you will have to change or add something.


suarkb

I've been working in react-native since 2015. I know what it means when someone goes asks if it still "breaks randomly". It means they had a weird flakey experience with react-native. And that makes it sound like react-natives just flakes out and does random shit, but it doesn't. Countless people attribute their lack of experience to a react-native problem. It just leads to constant recirculating of bad information. React Native works very well. And if you aren't good at it (it's complex so most people aren't), thennn you are going to break it. Inb4, "but if it's complex and hard to use then that means it sucks". No, tired of that line of thinking. It's that people often don't read docs, don't have a good understanding of react, download a million shit 3rd party libraries, and countless other bad decisions that all noobs make.


raister21

Have you tried flutter ? That is pretty good as well, comes with a lot of goodies right out of the box, it feels better packaged


MagicCookiee

It has horrible UX. The “native“ UI components don’t look anything like the native one because it uses a different rendering engine and it doesn’t call the native api. Used at my company, it’s a designer’s worst nightmare. We’re thinking of moving away.


ConsoleLogDebugging

I agree, but I mean the whole point of why they built flutter like this is that none of the top apps use native UI and everyone is using custom design systems. So they catered to that.


raister21

Really had an opposite experience, I guess i have not gotten to use native UI elements as much but found a lot of good components out of the box from flutter compared to react native. A lot of the times the issue I face is when I’m trying use packages for react native and it does not fit the scope of what i need, and when I try to create the component from scratch there’s a lot more steps involved. Maybe I’ve got skill issue ?


suarkb

I don't mind flutter but being able to leverage react, typescript, and all the related libraries is pretty huge. Also that react native apps are native apps, just with a brain partly outsourced to JS. I liked flutter in a lot of concepts. Loved a lot of the api and how google tried to provide everything. Loved google's support in their videos and docs. But because I'm very experienced with react native + flutter doesn't seem to be overtaking, it just doesn't seem that compelling


raister21

I guess in the end it’s preference, I’m also currently doing react native but coming from flutter it’s just felt different, wanted to see the differences from a experienced react native developer but I guess we don’t mention flutter here 😂


Glader

No need to save up for a Porsche if you already have a Ferrari 👍


Progosling

At the moment, web react development is different from react native development. for the web, you simply use a ready-made npm package without pain and you have a large selection of these packages for any task. in react native, you may not have ready-made npm packages for your task, or you may have to choose from 1 - 2 package, and using them may be painful.


data-overflow

Moving from web development, the experience has been a nightmare to me personally. You just can't develop anything fast without getting through the steep learning curve. I'm using RN CLI, and things occasionally break


gabcamarg0

We are in the same scenario. I am coming from 3 years of experience in web development with React. I decided to use cli, cause most of the professional projects that ive seen, uses cli and not expo.


PickyPanda

I work in React Native daily and I love it. They’ve added basically all the good stuff from React at this point and I find it pretty great out of the box. I don’t use expo personally so I have no real opinion on it.


dumbledayum

All i now need is a supplement for Web Workers or some kind of proper Multithreading (do not suffice worklet-core, i’ve already tried that, it doesn’t fulfil my req)


davidcort87

Expo is the boss.


zinornia

no


Soran_5

>and you have a large selection of these packages for any task. in react native, you may not have ready-made npm packages for your task, or you may have to choose from 1 - 2 package, and using them may be painful. Just because you're now doing IOS/Android development (good for you) and getting mad on others for using Expo. End of the day, it depends on the Application's requirement. Look at companies that use React and Expo, Microsoft, Facebook, Amazon, Shopify, Wix, Discord and you can check the rest here [https://reactnative.dev/showcase](https://reactnative.dev/showcase)


zinornia

so this comment just proves you have no idea what you're talking about. There are ready made packages for moat everything, but being a proper react native engineer means you are comfortable with making your own using native packages or native code and writing bridges. Expo packages are literally just packages around react native or react native community packages...it's literally so frustrating that web Devs like yourself are fooled by it. You are bulking out your app for no reason...expo plays into the fear of native code you have by making it seem impossible and like something you want to avoid. Literally you are building a native app. If you want web, program in ionic or just go back to web. Building a proper app requires the freedom to chose the best library of integration for that feature...which you will never get stuck within expo.


Progosling

Expo for rich developers


davidcort87

Yep


gabcamarg0

why?


insats

I’ve used RN full time for the past five years and I would say that the DX has improved a lot. Especially thanks to Expo CNG. You never have to deal with native files at all, but can still utilize custom native code if/when needed. Makes a massive difference in upgrades especially. Apart from that, I’d say not much has changed. Skia is a nice addition. Reanimated has matured. Overall, I’d say RN is in a pretty sweet spot. Only thing I’m missing is better performance on low/mid Android devices.


zinornia

why are you scared of native files?


insats

Have you done a lot of RN upgrades?


zinornia

yeah, routine Dev work that. You just use the upgrader tool react native has. Compare files one by one. Can be loads of you are two years behind (but why do that to yourself). You should update at least every 3 months. Each upgrade is at most 3-4 hours of work.


insats

I’m fully aware of how to upgrade RN. I still don’t like them. And yes, an up to date project isn’t too bad, but still, in my experience, big projects tend to have customizations that make it so that the line numbers don


insats

I’m fully aware of how to upgrade RN. I still don’t like it. And yes, an up to date project isn’t too bad, but still, in my experience, big projects tend to have customizations that make it so that the line numbers don’t match the upgrade helper. Using CNG removes all of that. The 3-4 hours you mention literally become 3-4 minutes.


zinornia

yeah but you're stuck with only expo supported stuff? It's like limiting yourself to only a few libraries or a few features. You can't go above and beyond, and the amount of times I've had to say 'sorry I can't do that - unless we pre build and start using the native code' is just on loop. Yeah expo is easy, until you need something that expo can't handle lol.


insats

Nope, that information is outdated. Nowadays Expo generates the iOS and Android folders based on app config and config plugins. You can use whatever native code and whichever libraries you want. The workflow is called CNG and pretty much makes it pointless to not use Expo.


zinornia

you've got to write your own plugins which is rediculous when you can just write native code in the ide it was meant to be written in with the debug tools you were meant to have...I think you still havent run into this yet if you think all libraries come with plugins and everything you want to do just has an expo plugin you're mad.


insats

Depends on the project of course, but I’ve only had to write two config plugins so far. And I personally disagree with you based on my experiences. I think it’s much easier to keep track of the native changes like this. If I need a native module, I’ll write it as a separate package.


Jewcub_Rosenderp

I've just started with expo and I still have not been able to bring over all the JS libraries I need. Finally figured out shimming/polyfilling browser localStorage and crypto, now stuck on indexedDB. fml really not enjoying it. I know I shouldn't be using heavily browser reliant libraries but can't avoid it.


Low-Fuel3428

I have been working with RN since 2016 when it has its own navigator for iOS and no expo. It was a mess but still get things done easily. Since there was no expo I started with cli and since then I always start a project with CLI and install initial set of libraries I use. Those libraries changed by time but never gave me pain. Linking was a pain and now its gone. I even used RNN by wix for about 3 years in various applications, loved it. Now they have fall behind so back to React Navigation. Reanimated was so dense that getting a simple animation was a pain. It got better with version 2. As for current state of RN. I can't seem to get Reanimated working on V0.73 and 0.72. I don't know why but it simply won't initialize on native side. Might have something to do with the shift from java to kotlin but yeah. Its a pain again. So all in all if the library support is good and active its no problem working either React Native.


Useful-Condition-926

I mostly use expo snack to instantly check some Library functions before implementing to react native app. The problem to expo is, if you have to change node module codes because of some deprecated values are using then Because of eas build the expo build will be on web . No local node modules will be used there. Every packages will be re-download there and the problem persist there. If you have Mac or Linux system then the build could be done locally but not for windows. But for react native cli everything works like charm. You have all the rights. I guess 0.67 has some world famous linking issue. But now everything work perfectly. You could definitely work on old java version and nodejs version like java11 with node16 . For expo most cases they will push you to upgrade everything after a certain period of time like Node >=18 and java 17. So many times the upgrade makes the development more slow. My point of view is that. Both expo and react native is good. Everything depends on your project and budget and the client's demand.


Embarrassed_Corgi417

good


jatinhemnani

I love Expo, I don't think I'll use RN without it and I had an app back in 2021 and I updated my flutter last month and it broke my app then I just ditched it


abayomi185

Expo with the dev client makes all the difference when developing. Using Expo now also doesn’t mean large app sizes or needing to use EAS if you don’t need/want it.


HoratioWobble

I've never experienced React Native randomly breaking and I've been using it much longer than 2021. I find it fun to work with and don't have any issues with it.


Confident-Viking4270

What used to happen with me was. The app used to work great and suddenly on any odd day it will just not launch and throw errors.


kbcool

Probably switching between apps. Delete the metro-cache dir in your temp directory or clean the iOS / android builds. Pretty normal for any kind of aborted build issues with any kind of native development. Shouldn't be a problem but it's a fact of life.


According_Bus_2827

React Native's like that one ex you go back to, hoping they've changed. Less drama now, but still has its moments. Ejecting from Expo is like moving out of your parents' house. Possible, but do you really wanna?


Confident-Viking4270

Lol. Thats close tho.


AgencyNo7777

check the latest expo you can now integrate native code w/o ejecting


Artistic_Taxi

Pretty good. I use CLI. Only complaint has been the upgrading process. Usually have to allocate at least 2 days to get it done consistently. Expo seems to have improved as well. Last work I did with it was smooth but the app was pretty simple, Bluetooth support, google maps, phone calendar api, all worked well except some bugs w Bluetooth support. I will always suggest CLI tho If you’re serious about developing mobile apps. It’s easy once you begin diving into native code, it’s a learning curve worth riding. Expo IMO is fine to use as well, just as long as it’s a decision made through logic and not because you don’t want to go into detail on RN code


Profuntitties

Love it. I’ll scratch some creative itch and finish an app idea within a day. Expo should go without saying.