I'm a 36 year old Hardware Engineer with a lot of PCB design and robotics experience, in October I decided to start learning software development: JS, at first now looking into React, React Native, I came across expo a few weeks ago, but now I'm convinced to invest more energy into it. Thanks, these videos are extremely helpful. Happy new year to everyone.
@@RaZziaN1most of what made working in react native a total mess is alleviated with expo. The dx is one of the best I’ve used. Watch your requests in the chrome debugger just like you would in a web app, live debugging integration in vs code, easy builds via EAS. If you are going green field mobile it’s a no brainer imo.
Definitely a bit of clickbait here, but the message is good and valuable generally, especially for those who have heard of Expo a few years ago but didn't use it due to shortcomings at the time that have sense been overcome.
Yeah. His ridiculous faces in the thumbnails and click-bait titles are getting real old. I unsubbed a while ago because it was too much, resubbed recently and but he's still at it. :/
In college days I was using a PC with 2 GB ram, with expo I have managed to build mobile apps for my resume projects. Even today it's surprises me, how the hell it is possible.
🥳🎉 Good for you. I also started my web dev freelancing with a meager PC (4GB RAM with an older Intel Celeron CPU), and this was in 2022 while I was a student. With the money I generated from that, I managed to buy myself a better one
I use expo on personnal projects, and for a one man team Expo is a no brainer. The documentation is good, it has most of the native api you would need, the EAS flow is simple and effective, I love it!
@@JEsterCW It used to suck as well, now it is ok, I use it just for the basic building blocks and the app i'm building doesn't have a lot of weird requirements of navigation so it is ok.
@@JEsterCW for me, it's easier because my apps have minimal complex navigation requirements. As a new React Native developer, I find working with expo-router, familiar from my web development experience, to be straightforward.
i'am still using react-native-cli so what wrong with me? any explanation ?? iam using my lapt i9-13th intel genration and 16gram thats ok ! :D, what benefit of expo?
1 month ago I was between flutter and react-native, then I saw a video of yours about react-native and I was shocked I never heard that before. You helped me understand why react-native is so powerful, thank you Theo
a while ago there was an app being developed in my workplace, the external consultant used flutter, it went so bad that I had to learn how to use flutter in general in 2 hours and help him try to solve it, flutter is the worst, riddled with problems, slow, etc, at least compared with the few apps I have done as test in react and kotlin. Take in mind I am not a front end developer.
As someone who was preparing to migrate to native cli from expo(because of people claiming it's not production ready) you definitely did save me a ton of time and energy. Thanks Theo!
my team is about to start developing a companion app for our webapp, and we were trying to make a decision between expo and RN. this is extremely timely and helpful, thanks, Theo
The use of Expo is beneficial, but when you need to work with native code, such as compressing a video with FFmpeg, you'll need pure React Native because Expo doesn't support FFmpeg. What you should do is use both together (Expo and React Native). Another example involves push notifications in the background, for which you'll need pure React Native to handle them, as even stated on their website.
@@bulljimmy2056 Expo has allowed native plugins to run, the same way React Native allows them, for a few years now. 99% of the native things you need have been custom-built by Expo, but if you need something more, you can still use 3rd party native plugins from npm, which wasn't the case a few years ago.
One thing that often gets missed with the obsession of web technology driven cross-platform mobile stacks is that companies/devs are trying to “cheat” by not learning the design system of the platform and this often results in a lesser user experience. Talking from an iOS perspective, you can tell apps that are made with RN and other such frameworks, because the accessibility is usually poor and the UI mixes design systems (e.g. Apple HIG and Material). Also, performance can be an issue. The argument about being able to write native bindings doesn’t stack up, because then you’ve got more layers/frameworks and languages to understand and debug. When most user trends are towards native apps being the primary frontend being consumed (vs web apps), why don’t companies/devs just suck it up and make the investment?
We are also moving from a bare React Native app to Expo for our app. The main pain point with bare React Native is updates; not to React Native itself, that's the easy part, but rather for iOS and Android, whenever they change their distribution and build tools. We end up using the same tools you'd use for native development anyway (Fastlane, Gradle, Maven, CocoaPods, etc.) and it's a hassle. My hope is that Expo will do away we a lot of this, though I don't know whether we'll be using EAS but it could help us provide faster minor updates to users without having to go through the entire review process that doesn't fit our release cycle.
If your app doesn't require native code then Expo should indeed definitely be the choice. I've spent months updating a react native app from 0.62 to latest. Expo would've made the process so much easier, but the app requires native code so we had to eject from Expo early on.
@@blazi_0 We haven't determined that yet. We are currently using React Navigation. The only "background operations" we need is handled through push notifications and bluetooth connection. These will automatically keep the app active in the background to sync when needed.
@@Dnserror88 It does require some native code, especially for iOS widgets and live activities. The native parts can be integrated with expo-config-plugins, so I don't worry about ejecting. This is the major reason we are moving to Expo now.
If you aren't building on EAS on the cloud, then not sure Expo will alleviate the issues of Android/iOS Upgrading their build tools, since you'd more or less be building locally anyway.
The free tier of expo has very long build times, because you sometimes* have to wait in line. Sometimes means during peak time (work time), it can also take over an hour of waiting in a queue for your build to start building. Average is maybe 20 minutes. That was the free version, so can't complain. There's a paid version though, where you basically don't wait.
We use Expo in our video sharing app. Combined with Nativewind (Tailwindcss for React Native), the developer experience has been quite a positive one. My main criticism of React Native is that it is not PNPM friendly. It is making migrating to a PNPM monorepo a hassle.
It was a minor hassle but disabling package hoisting in pnpm and applying monorepo tips from expo docs did the trick. With Expo 50 and RN 0.73 it should get even better as it will ship the new Metro version that now supports following symlinks so no need to disable hoisting anymore.
Isn't Expo how pretty much everyone builds React Native nowadays? I was confused when you said moving away from React Native because Expo is just improved process around React Native isn't it? It's still RN.
When I first wanted to make a mobile app, I kept searching "react-native vs flutter" only to get these bland "the one you go with depends on your specific needs" videos. Theo, because he is not afraid to offend people and serve hot takes, has an informative react-native vs flutter video, which was much more useful than other bland SEO this-vs-that content. The Hooks/JSX style of rendering is exactly the same in react-native as it is in react. Libraries liker react-query and jotai for state management work in both react and react-native.
@@raghavendra3422i have been developing with react for quite a while. I am using react native because similar state management and api integration libraries + logic can be implemented. I haven't explored flutter yet, probably not until our company or a client requires us to. I'd say if you already know react, just go for react-native 😅
@@raghavendra3422 Flutter feels like a framework made for Android devs who want to make their apps cross-platform. Flutter makes easy things cumbersome, but at least makes the hard things possible. Making complex animations in Flutter (which would be 5 lines of code in CSS) is a PITA, not to mention the state management mess. Also why are "stateful" and "stateless" widgets 2 completely different things?? Expo makes the easy things easy, and the hard things also easy. I personally see the winner.
I love your videos man, but this "sorry I know I baited you" is becoming a bit too common. If you bait me into watching the videos I don't feel like watching, I won't click on the videos I might want to watch thinking it'll be a bait anyway
Probably worth mentioning if you change your environment variables often e.g. changing ip address or enabling Storybook it's worth setting up android and xcode locally still so you don't burn through CI/CD minutes 😅
Flutter doesn't use some wired abstraction It uses skia which Chrome and Firefox use to render and in Flutter we can use native APIs through packages and if it is not available we can write one and use it in our project I think that Dart is better than JavaScript
I'm on a team that is investigating expo for a new app at our company. It's not that well implemented to be honest. If you want to use exactly the set up they imagined (and trust them with all credentials and all that) it might be easy and great. But if you don't it's quite mediocre and bunch of use cases are not ironed out or a priority for expo team (like building the app locally, we want to use our own CI; they want us to pay $1k/month). Great product, but not an answer to all.
I completely disagree with your comment. We have zero troubles building the app locally and use our own CI (I'm the author of the article Theo's talking about.)
@@XavierSeignard I'm not saying it's impossible to use your own CI, just that it's not a priority for a team nor that those cases are ironed out. To give you more specific example, try to use a private npm repo with your own local expo CLI. It's much more complicated than it should be.
@@poaches8714 we monitor closely various perf metrics (TTI, long renders, freezes and so on) with datadog and home made integration and we haven't noticed any degradations 😌
It's quite frustrating; I prefer building apps directly using native iOS and Android code, creating two separate codebases, and avoiding tools like React Native and Expo. There are constant issues and updates required when using these tools, which can be a significant headache. You end up spending a substantial amount of your time fixing bugs and making updates rather than focusing on developing new features.
4:19: I worked with a setup of ionic, capacitor, react and adb before. I quite liked the hot reload provided by adb but it was a pain to set it up each time and the compilation step also took its time. Glad to see that there's another solution besides adb which I will definitely try out.
There are issues with expo I have faced, primarily with integrations. Sentry for example does not work with expo (specifically expo-router). Some SSO libraries do not work with expo go. Its a good workflow for development but still needs some improvements in integrations side of things.
A drawback is that to build the APK, we need to rely on the Expo servers for Windows since there is no native support for building APKs on this platform.
Actually expo you great freedom to use eas servers or just generate an apk by using gradlew simply from the android folder, but you need to eject the App.
@@pencilchecknothing takes it away from my mind that is just a massive lock-in. Yeah if you wanna ship slightly faster for a small/medium sized app then why not. Remember everything that you put on a software will have it's tradeoffs
@@aerocodes if you have unlimited amount of money and can hire unlimited amount of talent with unlimited amount of time to interview, then go with whatever you propose. In the real world, you don't have any luxury, even in a big company. The vendor lockin isn't an issue, as everything expo can do, someone else will find it and replace it similar to how react and nextjs has many competitors after they win. Expo is the winner right now, and most of developers will drift very quickly to the next "similar" things very soon in a couple years anyway.
The big reason we use expo is over the air updates. It basically means your users dont need to update their applications for anything other than big releases. New assets or code gets downloaded when the application starts.
I love react with it pros and cons but react native is not it, both expo and react native are just full of bugs. Having problems with something as basic as npm install is mind bending to me, while working on an expo application I used a package which required me to use yarn install (react native map) and the development went on and package required me to use npm install(react native toast) to run smoothly like how, since when did we have problems like this. In conclusion after using expo and react native for 3 years professionally nothing just work, and you have to spend time debugging even the framework to understand why things are not working and sometimes even though you know there is nothing you can do.
@@XavierSeignard is it meant to be this hard , I have never seen a package on npm installed it and follow it guide and it just works. The usual process is it breaks everything I spend 2 - 4 hours fixing the issue created from it, and I don't want to even start with animations.
Expo/RN are great, if you aren't building anything more complicated than what is basically just a web view. The second you need to use something outside of the ecosystem it tears you a new one. I remember spending hours trying to get the android "share to" menu to include my expo app, and ended up just using flutter and got it working in 10 minutes, because having to use dart was less of a headache than figuring out how to get all the native stuff figured out. Right tool for the rifht problem.
This is just plain wrong. I have built multiple apps using react native that are much more than 'basically just a web view'. Just because limitations exist on certain use cases does not mean that react native is not a capable tool for building complex applications.
React native will always fall behind Flutter, in the grand scheme of things, the end user is more concerned with UX rather than a button that isn't some abstraction of the component.
Yeah expo is very easy and cool, but it didn't work well with my last project where I needed spme background operations on the phone, especially i was using expo router it didn't work no matter what i did. Also the background fetch and task manager is not great, sometimes it just stops working or stops when u terminate the app etc.. not great at all
I am currently the solo mobile developer of a react native app, inherited from a previous client with 0 knowledge transfer, coming form a web development background and 2018 react native familiarity. The development experience on iOS is a huge pain since i need to run it on physical devices, no hot reload, re-packaging the app breaks the build phases and i have to reset manually, and so on. A lot of time is wasted just running / building / rebuilding the app, not to mention how hard white labeling for other clients make it. I know it can be worse too, so i am looking for a solution to save me time in building, re-packaging the assets and configs (partially done manually), and this video has been helpful in providing ideas on how to approach this. I wish i can eventually move the app to expo, and use OTA for the many app assets, but it's hard to balance it with releasing new features since i am working solo with other project responsibilities, the stakeholders don't care about this unfortunately.
As a RN dev i tried expo and its good. The downside is that its not really good for bigger projects with lots of custom configs. E.g. I work for a company where i port an app with a single code base to more than 10 whitelabels. The app is made very variable so the name icon themes etc is based on the whitelabel. Press build once and its builds them all. Expo isnt able to do this yet or configure it dynamically like this. If i build a single app which is static, expo is the way to go ofcourse.
We have 4 apps that rely on similar principles as white label apps and have zero problems using expo for that If it was 10 instead of 4 it wouldn't change a thing (I'm the author of the article Theo's talking about)
GREAT video. Okay, you got me, I'm going to try Expo again. Everyone badmouths it as being on the left side of the meme chart, but if a right side exists, I wanna experience it. And you are 100% right about the mac thing, I've had that exact experience.
Expo looks good! I would go with it if I wanna keep it all in JS, but if we're really thinking about the dev experience with hybrid to native efficiently, I think Flutter sounds like the right choice here.
I am a React Native dev for 6+ years now. Expo became the go to solution for creating RN apps around 2-3 years ago and there are people still that don't want to use it and it makes me really mad. Expo is the best DX experience for writing RN apps and allows you to actually benefit from using a cross platform technology and yet I'm now working in a project where I can't use Expo, because the management requirements said so 🤷♀
Doesn't get as much love as it's further from native. I've built Cordova apps, Capacitor, Expo. Capacitor has some drawbacks and limitations. But if you don't bump into those it's a no-brainer IMHO. Having one code base to hit web and mobile is very very sweet. I don't know where Expo is now. When I was building stuff with it, it was really rough. Every version update was a crapshoot if we would need to spend 1-2 weeks of dev time updating our app to be compatible with the latest expo. Lots of bugs in the expo layer as well as the native bridge that were rough to track down. Then there were javascript bugs that would work properly in the debugger and fail in the actual app. Yuck. We spent half our dev time fighting with the platform rather than building features.
@@phemartin Input for one, browser views need to delay sending the touch event a bit to see if there is some kind of scroll or other gesture going on instead. If you want your input to be really low latency, you can't do this via the browser by over-riding this behavior (or at least I haven't found a way) . This is fairly noticeable if you put a browser next to a very low latency app and run them both watching closely for button actuation time. Mostly people don't notice though, actual browsers have the same latency built in and for the most part it's "fine". You probably haven't noticed, until I point this out and maybe you look for it, and it may become something you can't unsee. Some of the plugins for native API features are old and don't work, don't even exist, or don't support the feature you want. So you have to write or update them yourself. Sometimes this is so labor intensive, or limitations make it impossible to do, and the feature becomes a deal killer for the direction. In my experience, the app can usually totally exist as a capacitor app if you're willing to drop the features in the areas where you run up against such platform limitations. If you don't have much, if any, native API capability, then you are very unlikely to hit a deal breaking limitation.
I’m finding that Expo hides problems. When you do an actual build, it sometimes crashes and you have no easy way to find out why. And worse, if you have done a lot of things since your last “real” build, then you might have no idea what caused it. I have also found Expo itself to be buggy. I haven’t tried ejecting yet. This might offer a balance. However, for enterprise Apps, at this point, I can’t recommend Expo - too unstable, and unpredictable. Am I missing something?
Most of development with react native and expo has nothing to do with start up and more to do with actual coding. Switching from React Native to Expo honestly seems like a waste of time. You do have hot reload on React Native, you can wirelessly setup react native to work with your phone and continue developing with it, in most cases you will need native features so using react native over expo seems more ideal, it’s extremely easy building and maintaining your app with react native, using expo seems like and meaningless route.
4:00 its not even that the greatest part. There is a built in tunneling system, which allows you to debug in real time code via URL. That means you can make a code change from your home and your tester can recieve this change from their home in real time.
8 місяців тому+2
Flutter has a mssive ecosystem of libs and plugins for exactly this purpose as well, so some of the statements here are completely incorrect. Also hot reload in flutter build tools is exactly the same as shown here for expo, works on you mobile phones directly plus it always worked from the beginning of flutter, even when you have a lot of plugins that tap into native code... so not sure how are any of these statements correct. Cool that expo also supports all of this for react native, not sure if I am correct here but it looks like they've were inspired by flutter in many cases from what I can see shown here
I've had a thousand years of problems with these high-level frameworks...if I could go back in time, I would use Swift, with Expo a close second. Iteration time is the killer on mobile projects - if you have hot reload you're happy.
I looked at React Native and Expo for a work project where we needed to use Bluetooth Classic (not ble). For the use case we had, and although there was a community package for this in Expo, we ended up developping the plugin ourselves using Capacitor (the API is, IMO, more straightforward). If there ever is an Expo bluetooth classic plugin (apparently planned, but no ETA), we may consider Expo because of all the features in the video
I'd love to see expo support react-native-windows both so I could get into it and also to give other developers/teams a good alternative to just shipping electron for desktop apps.
I'm still doing the old way without the expo, I might migrate someday once I can convince the company the expo is a secured environment where configuration and keys cannot be hack.
Question. Can Expo let you run local databases on React Native such as RealmDB? I tried making a mobile app with Expo once and I found out I could not add RealmDB into it so I switched to normal React Native.
I understand this, but with angular you can do similar thing with --port flag specification. I do not used or done my research on React Native, I am not judging it negativelly, but as I watch this, mobile-developing with Angular+Ionic+Capacitor is not that different on first watch as from React Native on perspective of "web-like developer experience".
I've had to use gradle for both native android stuff at school and flutter professionally. If I never have to deal with its bullshit again, it is a huge win.
The fact that expo just doesn't work on React Native Windows makes RNW incredibly hard to vouch for. I worked for nearly 2 years developing a RNW app and even though I mostly got there, by the end it was so frustrating to fix bugs and try and get features to work that I got completely mentally blocked and just couldn't keep going. I stopped working for the company due to a takeover that ended in me being seen as disposable, but even if that hadn't happened, I couldn't have gone on for much longer due to the huge guilt I felt over being mentally blocked and having development happening at a crawling pace. Either they wouldn't have tolerated much more of my pace or I would've resigned since I couldn't in good faith keep getting paid to just be blocked. I don't see you touching on RNW that much, which is understandable, but I think RNW either needs more love from the community, or it needs to die altogether.
"while there are other technologies that have done interesting things in terms of multiplatform, none of them have targeted native code". Delphi's been doing that for 20+ years.
Great. An abstraction on top of an abstraction on top of other native systems... I'll pass on Expo. I'd rather know what an AndroidManifest and Info.plist files are, and how they are configured, rather than relying on Expo for it. ( it's easier for me as I've been building natively and on mobile for ~ 10 years, so maybe many hasells others are facing are not relevant for me )
Why even use something on top of React Native, which itself is something on top of the native system? Since the reason ppl use Native is is for getting an app for both Android and IOS, why not use Kotlin Multiplarform with Jetpack Compose?
Almost 30 years of building apps with around 15 in web development. A client I interviewed with mentioned React Native so i thought I'd do a quick dive and cut my teeth on it. I have used React for web as well as Angular. I used VS Code and used the React Native latest CLI and it generated a project that would not build. I spent a few days fixing the configuration only to stop in frustration and the countless levels of package bugs in gradle for the android build. I did see Expo in the notes as the alternative to the React Native CLI and might give it a try. I built Native Android mobile apps a number of years ago with Java and Android Studio. The apps were easy to build. The Android system version updates were constant I recall. To be honest most CLI tools for Angular and React work without issues on a new app. Very frustrating. I wonder if the React Native is worth it.
I have never used React Native and had to make a small update to a 4 year old app ( yes it should have been updated along the way ) but it was nearly impossible to compile. Mac had switched from x86 to ARM meaning that Node, Python, Ruby, and Xcode were all unhappy about it. It sucked, maybe this is the perfect use case for Docker.
I've had to deal with so much shit because the pipelines for our react native app keeps failing for every minor little thing. Just today, as you mentioned, gradle fucked up the pipeline because of some weird caching and it took me all day to fix it.. I think I'm gonna bring up expo in our next sprint review because I rather spend time building apps than debugging builds
Why are we acting like expo is not react native?
Views
For one good reason, it isn't
lol..thats a good question
Right. This video Should be named ‘moving off React-Native-CLI’
Clickbait, as always
I'm a 36 year old Hardware Engineer with a lot of PCB design and robotics experience, in October I decided to start learning software development: JS, at first now looking into React, React Native, I came across expo a few weeks ago, but now I'm convinced to invest more energy into it.
Thanks, these videos are extremely helpful.
Happy new year to everyone.
dont do it
Don't do it, native is total mess, even bigger than react itself.
You are lucky to reach this channel so early on in your new career!
@@RaZziaN1i think it's more healthy if u have a point why it is a total mess.
@@RaZziaN1most of what made working in react native a total mess is alleviated with expo. The dx is one of the best I’ve used. Watch your requests in the chrome debugger just like you would in a web app, live debugging integration in vs code, easy builds via EAS. If you are going green field mobile it’s a no brainer imo.
Definitely a bit of clickbait here, but the message is good and valuable generally, especially for those who have heard of Expo a few years ago but didn't use it due to shortcomings at the time that have sense been overcome.
Classic theo and his crazy ass thumbnail as always lmao. Honestly he made me hate him day by day
Yeah. His ridiculous faces in the thumbnails and click-bait titles are getting real old. I unsubbed a while ago because it was too much, resubbed recently and but he's still at it. :/
It's the name of the game. For me (and I know this is not a good criticism), but I'm not a huge fan his narration style. Too perfect...
Yeah, that's Theo
@@PrinzEugen39 It's dumb for subscribers, but it 100% works to bait newcomers.
Moving off React... to NextJS.
The clickbait is real.
In college days I was using a PC with 2 GB ram, with expo I have managed to build mobile apps for my resume projects.
Even today it's surprises me, how the hell it is possible.
Wow 2gb, it's impressive you made that work
In my college days I used a PC with 640k of RAM. I had a copy of Windows 1, but couldn't use it... it required 1 MG. =)
🥳🎉 Good for you. I also started my web dev freelancing with a meager PC (4GB RAM with an older Intel Celeron CPU), and this was in 2022 while I was a student. With the money I generated from that, I managed to buy myself a better one
I use expo on personnal projects, and for a one man team Expo is a no brainer. The documentation is good, it has most of the native api you would need, the EAS flow is simple and effective, I love it!
expo is life saver for me . expo-router + nativewind = 🤞
you mean nativewind v4? their v2 isn't as good.
@@JEsterCW It used to suck as well, now it is ok, I use it just for the basic building blocks and the app i'm building doesn't have a lot of weird requirements of navigation so it is ok.
@@JEsterCWSo what do you recommend for those that has your use case?
@@JEsterCW for me, it's easier because my apps have minimal complex navigation requirements. As a new React Native developer, I find working with expo-router, familiar from my web development experience, to be straightforward.
i'am still using react-native-cli so what wrong with me? any explanation ?? iam using my lapt i9-13th intel genration and 16gram thats ok ! :D,
what benefit of expo?
1 month ago I was between flutter and react-native, then I saw a video of yours about react-native and I was shocked
I never heard that before.
You helped me understand why react-native is so powerful, thank you Theo
a while ago there was an app being developed in my workplace, the external consultant used flutter, it went so bad that I had to learn how to use flutter in general in 2 hours and help him try to solve it, flutter is the worst, riddled with problems, slow, etc, at least compared with the few apps I have done as test in react and kotlin. Take in mind I am not a front end developer.
Which video was that one?
@@gregorydaggett7444
React Natives Secret Superpower
I am in the same situtation and I was blown away by Expo capacity, which video were you talking about?
ya djamal yhdik rabi
As someone who was preparing to migrate to native cli from expo(because of people claiming it's not production ready) you definitely did save me a ton of time and energy. Thanks Theo!
Love this. Sucha great summary of all the ways that Expo makes life better. "Work smarter not harder" ya know.
Great video. Classic Theo clickbait title and switcheroo. Thanks for making this.
my team is about to start developing a companion app for our webapp, and we were trying to make a decision between expo and RN. this is extremely timely and helpful, thanks, Theo
The use of Expo is beneficial, but when you need to work with native code, such as compressing a video with FFmpeg, you'll need pure React Native because Expo doesn't support FFmpeg. What you should do is use both together (Expo and React Native). Another example involves push notifications in the background, for which you'll need pure React Native to handle them, as even stated on their website.
@@bulljimmy2056 Expo has allowed native plugins to run, the same way React Native allows them, for a few years now. 99% of the native things you need have been custom-built by Expo, but if you need something more, you can still use 3rd party native plugins from npm, which wasn't the case a few years ago.
My team is also going to write the code for a product....I am still not sure what to choose
@@pranjalkesarwani9993 we eventually went with expo setup, and we already have the first version on app store. worked pretty well for our case
One thing that often gets missed with the obsession of web technology driven cross-platform mobile stacks is that companies/devs are trying to “cheat” by not learning the design system of the platform and this often results in a lesser user experience.
Talking from an iOS perspective, you can tell apps that are made with RN and other such frameworks, because the accessibility is usually poor and the UI mixes design systems (e.g. Apple HIG and Material). Also, performance can be an issue.
The argument about being able to write native bindings doesn’t stack up, because then you’ve got more layers/frameworks and languages to understand and debug.
When most user trends are towards native apps being the primary frontend being consumed (vs web apps), why don’t companies/devs just suck it up and make the investment?
Alan has been my health insurance for a few months and have to say, never had a health insurance with such a good iOS app.
Thanks for the kind words!
(I'm the author of the article Theo's talking about in the video.)
We are also moving from a bare React Native app to Expo for our app. The main pain point with bare React Native is updates; not to React Native itself, that's the easy part, but rather for iOS and Android, whenever they change their distribution and build tools. We end up using the same tools you'd use for native development anyway (Fastlane, Gradle, Maven, CocoaPods, etc.) and it's a hassle.
My hope is that Expo will do away we a lot of this, though I don't know whether we'll be using EAS but it could help us provide faster minor updates to users without having to go through the entire review process that doesn't fit our release cycle.
Hi, will u guys use the new expo router ? And what will u do if you need some background operations on the phone?
If your app doesn't require native code then Expo should indeed definitely be the choice. I've spent months updating a react native app from 0.62 to latest. Expo would've made the process so much easier, but the app requires native code so we had to eject from Expo early on.
@@blazi_0 We haven't determined that yet. We are currently using React Navigation. The only "background operations" we need is handled through push notifications and bluetooth connection. These will automatically keep the app active in the background to sync when needed.
@@Dnserror88 It does require some native code, especially for iOS widgets and live activities.
The native parts can be integrated with expo-config-plugins, so I don't worry about ejecting. This is the major reason we are moving to Expo now.
If you aren't building on EAS on the cloud, then not sure Expo will alleviate the issues of Android/iOS Upgrading their build tools, since you'd more or less be building locally anyway.
The free tier of expo has very long build times, because you sometimes* have to wait in line. Sometimes means during peak time (work time), it can also take over an hour of waiting in a queue for your build to start building. Average is maybe 20 minutes. That was the free version, so can't complain. There's a paid version though, where you basically don't wait.
I don’t get why people think Expo is not React Native
We use Expo in our video sharing app. Combined with Nativewind (Tailwindcss for React Native), the developer experience has been quite a positive one. My main criticism of React Native is that it is not PNPM friendly. It is making migrating to a PNPM monorepo a hassle.
It was a minor hassle but disabling package hoisting in pnpm and applying monorepo tips from expo docs did the trick.
With Expo 50 and RN 0.73 it should get even better as it will ship the new Metro version that now supports following symlinks so no need to disable hoisting anymore.
Isn't Expo how pretty much everyone builds React Native nowadays? I was confused when you said moving away from React Native because Expo is just improved process around React Native isn't it? It's still RN.
When I first wanted to make a mobile app, I kept searching "react-native vs flutter" only to get these bland "the one you go with depends on your specific needs" videos. Theo, because he is not afraid to offend people and serve hot takes, has an informative react-native vs flutter video, which was much more useful than other bland SEO this-vs-that content. The Hooks/JSX style of rendering is exactly the same in react-native as it is in react. Libraries liker react-query and jotai for state management work in both react and react-native.
What would you prefer if you already know react and want to explore app development..
React native or flutter
@@raghavendra3422i have been developing with react for quite a while. I am using react native because similar state management and api integration libraries + logic can be implemented.
I haven't explored flutter yet, probably not until our company or a client requires us to.
I'd say if you already know react, just go for react-native 😅
@@somedude6420 oh. Thankyou
@@raghavendra3422 Flutter feels like a framework made for Android devs who want to make their apps cross-platform. Flutter makes easy things cumbersome, but at least makes the hard things possible. Making complex animations in Flutter (which would be 5 lines of code in CSS) is a PITA, not to mention the state management mess. Also why are "stateful" and "stateless" widgets 2 completely different things??
Expo makes the easy things easy, and the hard things also easy. I personally see the winner.
I love your videos man, but this "sorry I know I baited you" is becoming a bit too common. If you bait me into watching the videos I don't feel like watching, I won't click on the videos I might want to watch thinking it'll be a bait anyway
Probably worth mentioning if you change your environment variables often e.g. changing ip address or enabling Storybook it's worth setting up android and xcode locally still so you don't burn through CI/CD minutes 😅
So it's still React Native, just in a fancy suit!
Most interesting video so far. Clearly explained for someone that never experienced mobile development.
Flutter doesn't use some wired abstraction
It uses skia which Chrome and Firefox use to render
and in Flutter we can use native APIs through packages and if it is not available we can write one
and use it in our project
I think that Dart is better than JavaScript
Unless you're a go to react developer, yes.
unless you want a native experience, you may want to choose flutter. but if your goal is to make a native app, then react native is absolutely better
I'm on a team that is investigating expo for a new app at our company. It's not that well implemented to be honest. If you want to use exactly the set up they imagined (and trust them with all credentials and all that) it might be easy and great. But if you don't it's quite mediocre and bunch of use cases are not ironed out or a priority for expo team (like building the app locally, we want to use our own CI; they want us to pay $1k/month). Great product, but not an answer to all.
I completely disagree with your comment.
We have zero troubles building the app locally and use our own CI
(I'm the author of the article Theo's talking about.)
@@XavierSeignard I'm not saying it's impossible to use your own CI, just that it's not a priority for a team nor that those cases are ironed out. To give you more specific example, try to use a private npm repo with your own local expo CLI. It's much more complicated than it should be.
@@XavierSeignardhave you found any performance degradation since moving to expo?
@@poaches8714 we monitor closely various perf metrics (TTI, long renders, freezes and so on) with datadog and home made integration and we haven't noticed any degradations 😌
I like the headline, it set a lot of people's asses on fire. The folks were hoping the video would be about how they moved to Flutter or Native LOL
expo is now not free now. for build and adding native modules you to recreate build and also not fit for larger apps
Moving Off React Native - to React Native.. with some boilerplate.. should be the title
It's quite frustrating; I prefer building apps directly using native iOS and Android code, creating two separate codebases, and avoiding tools like React Native and Expo. There are constant issues and updates required when using these tools, which can be a significant headache. You end up spending a substantial amount of your time fixing bugs and making updates rather than focusing on developing new features.
4:19: I worked with a setup of ionic, capacitor, react and adb before. I quite liked the hot reload provided by adb but it was a pain to set it up each time and the compilation step also took its time. Glad to see that there's another solution besides adb which I will definitely try out.
Keep making videos like this. It's helps a lot.
Just coming back to rn after 6 years away and am pleasantly surprised how much it's improved thanks to expo
There are issues with expo I have faced, primarily with integrations. Sentry for example does not work with expo (specifically expo-router). Some SSO libraries do not work with expo go. Its a good workflow for development but still needs some improvements in integrations side of things.
A drawback is that to build the APK, we need to rely on the Expo servers for Windows since there is no native support for building APKs on this platform.
Actually expo you great freedom to use eas servers or just generate an apk by using gradlew simply from the android folder, but you need to eject the App.
@@paulezaga5301 what do you mean by eject?
expo Is like making a pact with the devil (as a +5 years rn developer)
expo used to suck, I think they turn it around and is feeling a lot better now.
@@pencilchecknothing takes it away from my mind that is just a massive lock-in. Yeah if you wanna ship slightly faster for a small/medium sized app then why not. Remember everything that you put on a software will have it's tradeoffs
@@aerocodes if you have unlimited amount of money and can hire unlimited amount of talent with unlimited amount of time to interview, then go with whatever you propose. In the real world, you don't have any luxury, even in a big company. The vendor lockin isn't an issue, as everything expo can do, someone else will find it and replace it similar to how react and nextjs has many competitors after they win. Expo is the winner right now, and most of developers will drift very quickly to the next "similar" things very soon in a couple years anyway.
The big reason we use expo is over the air updates. It basically means your users dont need to update their applications for anything other than big releases. New assets or code gets downloaded when the application starts.
OTA can be done with RN too
Those like and sub callouts are so smooth
The clickbait really lets down what is otherwise a great channel.
I love react with it pros and cons but react native is not it, both expo and react native are just full of bugs.
Having problems with something as basic as npm install is mind bending to me, while working on an expo application I used a package which required me to use yarn install (react native map) and the development went on and package required me to use npm install(react native toast) to run smoothly like how, since when did we have problems like this.
In conclusion after using expo and react native for 3 years professionally nothing just work, and you have to spend time debugging even the framework to understand why things are not working and sometimes even though you know there is nothing you can do.
I'm using react-native and expo professionally for 6 years, and I now have zero problems with it
(I'm the author of the article Theo's talking about)
@@XavierSeignard is it meant to be this hard , I have never seen a package on npm installed it and follow it guide and it just works. The usual process is it breaks everything I spend 2 - 4 hours fixing the issue created from it, and I don't want to even start with animations.
Expo/RN are great, if you aren't building anything more complicated than what is basically just a web view. The second you need to use something outside of the ecosystem it tears you a new one. I remember spending hours trying to get the android "share to" menu to include my expo app, and ended up just using flutter and got it working in 10 minutes, because having to use dart was less of a headache than figuring out how to get all the native stuff figured out.
Right tool for the rifht problem.
This is just plain wrong. I have built multiple apps using react native that are much more than 'basically just a web view'. Just because limitations exist on certain use cases does not mean that react native is not a capable tool for building complex applications.
Good luck learning bloc, provider and other flutter specific knowledge when you already have all these under your belt from react.
This was already a thing like 4 years ago, still love it!!
React native will always fall behind Flutter, in the grand scheme of things, the end user is more concerned with UX rather than a button that isn't some abstraction of the component.
Industry prefers react native
me debugging my react native code while watching this video.... crying in the corner...
Yeah expo is very easy and cool, but it didn't work well with my last project where I needed spme background operations on the phone, especially i was using expo router it didn't work no matter what i did. Also the background fetch and task manager is not great, sometimes it just stops working or stops when u terminate the app etc.. not great at all
I am currently the solo mobile developer of a react native app, inherited from a previous client with 0 knowledge transfer, coming form a web development background and 2018 react native familiarity. The development experience on iOS is a huge pain since i need to run it on physical devices, no hot reload, re-packaging the app breaks the build phases and i have to reset manually, and so on.
A lot of time is wasted just running / building / rebuilding the app, not to mention how hard white labeling for other clients make it.
I know it can be worse too, so i am looking for a solution to save me time in building, re-packaging the assets and configs (partially done manually), and this video has been helpful in providing ideas on how to approach this.
I wish i can eventually move the app to expo, and use OTA for the many app assets, but it's hard to balance it with releasing new features since i am working solo with other project responsibilities, the stakeholders don't care about this unfortunately.
16:59 Nix works on macOS
Edit: No clue how well it works as a replacement for Xcode though. Doubt you could use it to fully replace Xcode for sure.
i used to do React Native with Expo, so it was not React Native OR Expo , but React Native WITH Expo
expo used to suck, I tried it 5-6 years ago and moved away frmo it immediately, but this year it look promising so i'm trying again.
The main drawback for me is that you have vendor lockin. So when expo goes bankrupt I have to rewrite again, right?
As Expo's open source, I don't see vendor lock-in 🤔
Only EAS part would create vendor lock-in
(I'm the author of the article Theo's talking about)
@@XavierSeignard great work and read the full article. Thanks for the documenting it.
Tricked by the title 😂
Nice to see a French company featured. Expo is great 👌
Coucou Sébastien 👋
@@XavierSeignard 😄 coucou
Is this an ad for Expo?
🤭🤣
Nix works on the Mac. I don't know how well it works together with xcode, though.
- Hey, Theo. Who's the best football player?
- 10:18
Suggestion: experiment with - and then make a video about Capacitor.
As a RN dev i tried expo and its good. The downside is that its not really good for bigger projects with lots of custom configs. E.g. I work for a company where i port an app with a single code base to more than 10 whitelabels. The app is made very variable so the name icon themes etc is based on the whitelabel. Press build once and its builds them all. Expo isnt able to do this yet or configure it dynamically like this. If i build a single app which is static, expo is the way to go ofcourse.
We have 4 apps that rely on similar principles as white label apps and have zero problems using expo for that
If it was 10 instead of 4 it wouldn't change a thing
(I'm the author of the article Theo's talking about)
@@XavierSeignard awesome! I did have the issues a long time ago. Will try it again over the weekends with a fresh project :)
GREAT video. Okay, you got me, I'm going to try Expo again. Everyone badmouths it as being on the left side of the meme chart, but if a right side exists, I wanna experience it. And you are 100% right about the mac thing, I've had that exact experience.
Also did you know about Nativewind? tailwind css integration for react native, for me this is the best way to build apps
I just got an expo project to update some dependencies and modify some parts of it and seems really cool
Why does Theo think he’s some high profile tech journalist
Expo looks good! I would go with it if I wanna keep it all in JS, but if we're really thinking about the dev experience with hybrid to native efficiently, I think Flutter sounds like the right choice here.
I am a React Native dev for 6+ years now. Expo became the go to solution for creating RN apps around 2-3 years ago and there are people still that don't want to use it and it makes me really mad. Expo is the best DX experience for writing RN apps and allows you to actually benefit from using a cross platform technology and yet I'm now working in a project where I can't use Expo, because the management requirements said so
🤷♀
You can also build locally using --local flag to avoid build queue waiting time.
this is top tier bait lol. 😂
I'd love if you could talk about Capacitor and its tradeoffs (as it is the easiest mobile solution)
Doesn't get as much love as it's further from native.
I've built Cordova apps, Capacitor, Expo. Capacitor has some drawbacks and limitations. But if you don't bump into those it's a no-brainer IMHO. Having one code base to hit web and mobile is very very sweet.
I don't know where Expo is now. When I was building stuff with it, it was really rough. Every version update was a crapshoot if we would need to spend 1-2 weeks of dev time updating our app to be compatible with the latest expo. Lots of bugs in the expo layer as well as the native bridge that were rough to track down.
Then there were javascript bugs that would work properly in the debugger and fail in the actual app. Yuck.
We spent half our dev time fighting with the platform rather than building features.
@@brandonmansfield6570 Makes sense! What are the main drawbacks/limitations from Capacitor in your POV?
@@phemartin
Input for one, browser views need to delay sending the touch event a bit to see if there is some kind of scroll or other gesture going on instead. If you want your input to be really low latency, you can't do this via the browser by over-riding this behavior (or at least I haven't found a way) . This is fairly noticeable if you put a browser next to a very low latency app and run them both watching closely for button actuation time.
Mostly people don't notice though, actual browsers have the same latency built in and for the most part it's "fine". You probably haven't noticed, until I point this out and maybe you look for it, and it may become something you can't unsee.
Some of the plugins for native API features are old and don't work, don't even exist, or don't support the feature you want. So you have to write or update them yourself. Sometimes this is so labor intensive, or limitations make it impossible to do, and the feature becomes a deal killer for the direction.
In my experience, the app can usually totally exist as a capacitor app if you're willing to drop the features in the areas where you run up against such platform limitations. If you don't have much, if any, native API capability, then you are very unlikely to hit a deal breaking limitation.
Clickbait 😐
Is Bluetooth works with Expo?
4:30
Bluetooth Low Energy is actually quite easy
ua-cam.com/video/UuHLPsjp6fM/v-deo.htmlsi=c85Nxh0GrumS14Ur
I switched from an expo project to a react native project and i dread working on it now. Now i am thinking about switching again.
I’m finding that Expo hides problems. When you do an actual build, it sometimes crashes and you have no easy way to find out why. And worse, if you have done a lot of things since your last “real” build, then you might have no idea what caused it. I have also found Expo itself to be buggy. I haven’t tried ejecting yet. This might offer a balance. However, for enterprise Apps, at this point, I can’t recommend Expo - too unstable, and unpredictable. Am I missing something?
I wish Rails/Hotwire had an Expo
The only issue with expo I've found is that when you need to use native modules. There isn't a good way to get intellisence working that I've found.
Does anyone know the name of the browser Theo is using here?
Arc browser
Most of development with react native and expo has nothing to do with start up and more to do with actual coding. Switching from React Native to Expo honestly seems like a waste of time.
You do have hot reload on React Native, you can wirelessly setup react native to work with your phone and continue developing with it, in most cases you will need native features so using react native over expo seems more ideal, it’s extremely easy building and maintaining your app with react native, using expo seems like and meaningless route.
4:00 its not even that the greatest part. There is a built in tunneling system, which allows you to debug in real time code via URL. That means you can make a code change from your home and your tester can recieve this change from their home in real time.
Flutter has a mssive ecosystem of libs and plugins for exactly this purpose as well, so some of the statements here are completely incorrect. Also hot reload in flutter build tools is exactly the same as shown here for expo, works on you mobile phones directly plus it always worked from the beginning of flutter, even when you have a lot of plugins that tap into native code... so not sure how are any of these statements correct. Cool that expo also supports all of this for react native, not sure if I am correct here but it looks like they've were inspired by flutter in many cases from what I can see shown here
I've had a thousand years of problems with these high-level frameworks...if I could go back in time, I would use Swift, with Expo a close second. Iteration time is the killer on mobile projects - if you have hot reload you're happy.
I looked at React Native and Expo for a work project where we needed to use Bluetooth Classic (not ble). For the use case we had, and although there was a community package for this in Expo, we ended up developping the plugin ourselves using Capacitor (the API is, IMO, more straightforward). If there ever is an Expo bluetooth classic plugin (apparently planned, but no ETA), we may consider Expo because of all the features in the video
I'd love to see expo support react-native-windows both so I could get into it and also to give other developers/teams a good alternative to just shipping electron for desktop apps.
Yes, that will become a game changer. I developed a UWP using react native. I had to improvide in cases where no packages existed for my use case
I'm still doing the old way without the expo, I might migrate someday once I can convince the company the expo is a secured environment where configuration and keys cannot be hack.
can i use react native without expo?
Question.
Can Expo let you run local databases on React Native such as RealmDB?
I tried making a mobile app with Expo once and I found out I could not add RealmDB into it so I switched to normal React Native.
Yes, you'd need to use custom dev client and config plugins
@@XavierSeignard thank you 😊
I understand this, but with angular you can do similar thing with --port flag specification. I do not used or done my research on React Native, I am not judging it negativelly, but as I watch this, mobile-developing with Angular+Ionic+Capacitor is not that different on first watch as from React Native on perspective of "web-like developer experience".
I've had to use gradle for both native android stuff at school and flutter professionally. If I never have to deal with its bullshit again, it is a huge win.
I feel u bro
The fact that expo just doesn't work on React Native Windows makes RNW incredibly hard to vouch for. I worked for nearly 2 years developing a RNW app and even though I mostly got there, by the end it was so frustrating to fix bugs and try and get features to work that I got completely mentally blocked and just couldn't keep going. I stopped working for the company due to a takeover that ended in me being seen as disposable, but even if that hadn't happened, I couldn't have gone on for much longer due to the huge guilt I felt over being mentally blocked and having development happening at a crawling pace. Either they wouldn't have tolerated much more of my pace or I would've resigned since I couldn't in good faith keep getting paid to just be blocked.
I don't see you touching on RNW that much, which is understandable, but I think RNW either needs more love from the community, or it needs to die altogether.
"while there are other technologies that have done interesting things in terms of multiplatform, none of them have targeted native code". Delphi's been doing that for 20+ years.
Crying inside when people still mention "eject" as a reason against Expo in 2024 🥲
Great. An abstraction on top of an abstraction on top of other native systems... I'll pass on Expo. I'd rather know what an AndroidManifest and Info.plist files are, and how they are configured, rather than relying on Expo for it. ( it's easier for me as I've been building natively and on mobile for ~ 10 years, so maybe many hasells others are facing are not relevant for me )
Agree. And it is not that hard to play with those files.
Why even use something on top of React Native, which itself is something on top of the native system? Since the reason ppl use Native is is for getting an app for both Android and IOS, why not use Kotlin Multiplarform with Jetpack Compose?
Almost 30 years of building apps with around 15 in web development. A client I interviewed with mentioned React Native so i thought I'd do a quick dive and cut my teeth on it. I have used React for web as well as Angular. I used VS Code and used the React Native latest CLI and it generated a project that would not build. I spent a few days fixing the configuration only to stop in frustration and the countless levels of package bugs in gradle for the android build. I did see Expo in the notes as the alternative to the React Native CLI and might give it a try. I built Native Android mobile apps a number of years ago with Java and Android Studio. The apps were easy to build. The Android system version updates were constant I recall. To be honest most CLI tools for Angular and React work without issues on a new app. Very frustrating. I wonder if the React Native is worth it.
Nope I don't like expo. Screw React Native. Not worth it.
I have never used React Native and had to make a small update to a 4 year old app ( yes it should have been updated along the way ) but it was nearly impossible to compile.
Mac had switched from x86 to ARM meaning that Node, Python, Ruby, and Xcode were all unhappy about it.
It sucked, maybe this is the perfect use case for Docker.
Expo is still React Native, it used to be that the bundle size was disgusting, but it looks to be improving massively in the past couple years.
My App, a simple online shop, is 13MB .aab file. Not sure if this info is helpful, I am not a mobile developer, all I know is Expo.
In which cases expo would not be the way to go? When you work with things like hardware sensors and such?
Local builds work great for me when i need it. Expo updates for the everything else.
I'm pretty sure when you learn Xcode and Swift you won't want to ever touch ReactNative or any non native dev environment.
Expo sucks for old projects. But I guess it comes with the conveniences for new ones.
What’s the name of that meme @1:47
I've had to deal with so much shit because the pipelines for our react native app keeps failing for every minor little thing. Just today, as you mentioned, gradle fucked up the pipeline because of some weird caching and it took me all day to fix it.. I think I'm gonna bring up expo in our next sprint review because I rather spend time building apps than debugging builds
You know what I wish? That Meta did not rely on the community to take care of all the tooling but instead supported it themselves.
What fonts is this guy using? They look so good.
I hope Nativescripts gets more attention aswell!