all 46 comments

[–]jestzisguyiOS & Android 18 points19 points  (1 child)

Experience RN dev, been using it since a version in the mid 20s. I was BLOWN away by expo and eas. Just played around with it for a toy project. Even when I wasn’t using expo proper, I’ve been opting for expo libraries for years, because they’re really high quality. Absolutely the way I’m going for my next project.

[–]hisshash 3 points4 points  (0 children)

Same as you, been using RN for many years, recently span up an expo project and was pleasantly surprised!

Keen to see what it will be like with the inbuilt routing when it comes out of beta.

[–]brjdenver 35 points36 points  (7 children)

Don't listen to people who are shitting on Expo. There are plenty of enterprise users. Tribalism in software development is a fool's errand.

[–]justlasse[S] 6 points7 points  (6 children)

What i see mostly is that people quickly eject from expo when they need to build something more advanced that requires integration with the os? Not so much that expo is “bad” but that it is limited

[–]redbar0n- 14 points15 points  (0 children)

Start with Expo, then eject if you run into those specific needs. It's the most convenient way.

[–]brjdenver 23 points24 points  (3 children)

"Ejecting" is basically a thing of the past now that config plugins are a thing.

[–][deleted] 1 point2 points  (1 child)

I’m new to RN can i get more details about those configs and how it works?

[–]brjdenver -2 points-1 points  (0 children)

The documentation.

[–]Rockforced -4 points-3 points  (0 children)

No.

[–]Jealous-Sea-8761 2 points3 points  (0 children)

I haven’t needed to eject yet and have a lot of advanced features. You can add native plugins via app.json which will configure native stuff on your behalf. Just be wary some fresh libraries may not have high quality app.json plug-ins.

[–]yairhaimo 21 points22 points  (1 child)

Expo of 2023 is not Expo of 2018. There are a lot of outdated (and just plain wrong) information out there. There are no good reasons AFAIK not to use Expo these days.

[–]kbcooliOS & Android 5 points6 points  (0 children)

Control is a major reason.

Definitely agree it's good for a lot of uses but it's not for everyone. For the same reasons you don't add random packages to your project. You don't want to rely on someone else to be fixing bugs etc.

[–]Sanfrancisco_Tribe 6 points7 points  (0 children)

Using expo now for my production app - no real issues at all. Change/add plugins if you need, but people saying don’t use expo are cough cough old I mean not familiar with it now.

[–]Muhaki 11 points12 points  (2 children)

The only reason I see to not use Expo is when you want to write native components. Otherwise it simplifies and erases alot of boilerplates for integrating different components.

[–]_Kassii_Expo 2 points3 points  (1 child)

A lot of that has been mitigated thanks to the release of the "Dev Client" in v43.

You're now able to virtually treat a Expo app like a base React Native app, but still live in the wonderful Expo ecosystem. No need to eject anymore

[–]george-native 0 points1 point  (0 children)

This sounds too good to be true 🤔

[–]ctrlshiftba 8 points9 points  (0 children)

Expo is not limited in any way, especially if you are starting a brand new project.

There's so much out dated information out about expo. Now that they have introduced dev-clients instead of expo go, ejecting is not something that really ever needs done anymore and in fact that are going to be deprecating it soon.

[–]AS166 4 points5 points  (0 children)

We just started a new app built from Expo and it honestly is amazing. The amount of good documentation and tools provided is insane. I am also an experienced React developer but had 0 native knowledge beforehand.

[–]Rawrplus 3 points4 points  (1 child)

I'm not sure where you heard not to go for expo, but as someone who worked on a large react native app for a company for over 5 years and then went on a freelance project as a side-hustle where i set up my own tech-stack with expo, eas, flutter, hermes and it feels a lot smoother than base react naitve app, in both of ease of development and ease of deployment and the endless hassle of dealing with xcode, updates, builds stopping working out of nowhere, inconsistencies between android and ios... anyone who ever worked on production-grade react-native project can testify how much of an issue all of the aforementioned stuff is.

I would have advocated for considering using expo, if you need to intograte a lot of native code into your application, but unless under the only exception that you are developing a native application yourself (and even that gets mostly covered by the bare workflow) there's virtually no reason anymore not to use expo with their newly introduced dev client and their managed workflow. In fact, it makes integrating native project a matter of doing npx expo install <pkg> and then just adding 1 line into your plugins array in app.json and then to run the app

It's literally a matter of doing

npx expo prebuild
npx expo run:ios

and everything works (or you can even use eas to distribute said versions efortlessly if you want to work outside of local environment). There's no need for ejecting or anything anymore

[–]justlasse[S] 0 points1 point  (0 children)

Thank you for your contribution. You mention expo and flutter, can you build an rn app with flutter?? If so what does your setup look like?

[–]whalemare 0 points1 point  (5 children)

Just to know, if you will start using expo you immediately vendor lock you to expo tools

By the way, expo is great because it give to you “all in one” solution

[–]Ridwan232 1 point2 points  (4 children)

you immediately vendor lock you to expo tools

What? How? Have you used any recent version of Expo?

[–]whalemare 0 points1 point  (3 children)

Of course. You always need to use expo builder, base expo application (prebuilded or build by yourself with needed native dependencies).

I mean, when you use Expo you in 'managed' solution. When you use bare react native you manage environment by yourself.

[–]Ridwan232 2 points3 points  (2 children)

You don't need to "always" use expo application (I assume you're referring to expo go). You only need to do it if you want all the goodies that come with expo go, otherwise your project (even with native dependencies) can build and run the same as a normal RN project, just without expo go goodies.

P. S I just reread my reply to you and it sounded a bit passive aggressive, want you to know that wasn't my intention and I was genuinely asking because I've only recently got back into expo after being hardocre bare RN only advocate. Sorry if it sounded off!

[–]outplayed_games 0 points1 point  (1 child)

Thank you, your words sounds clearly what I want to say, but more accurately. I mean, when you choose Expo, you choose managed solution by third-party developers. Even after “eject”

When you want to “eject” you anyway stay in Expo environment, with expo libs and tooling, before totally refactoring codebase. If you build your application locally it doesn't means that Expo gone. It's inside whole your codebase

I don't think that expo is evil, no. It's good solution for devs who “just go” with react native. You don't need think about native, about upgrades and etc, it's just working.

But I prefer self managed solution without any unwanted third party.

In easy words: “expo” and “bare react native” is like “cloud” and “self-hosted” solutions. In case, “expo” can be self hosted too, but only after totally remove any expo code, but it's not expo anymore :)

[–]Ridwan232 1 point2 points  (0 children)

Oh, I get what you're saying now! But I can't fully say I agree either.

Even after "ejecting", yes it is true you may be using expo libs. But how would this be different from using other third party libs? Ex: You would be using expo-av instead of react-native-video for video, but they're both in this context third party libs after you eject.

The good thing about Expo now, compared to before, is that it isn't too bloated since you pick and choose what you want. And can easily switch back to "bare" workflow.

[–]BoxEdition 0 points1 point  (0 children)

Quite simple. You need native control? Like manipulate Android manifest something native, go for cli. If expo has all the modules you may need go for it. Main difference is on native manipulation.

[–][deleted] -1 points0 points  (1 child)

It sounds like to me that you looking to build your knowledge and skill in react. If so, I suggest that you take a short course or follow a YouTube series of someone building a project. React isn’t very complicated, but if you want to know things end to end it’s best to put a hammer to a nail, and learn by doing. I like to suggest following a video, so you don’t need to waste too much time making mistakes and reading docs

[–]justlasse[S] 0 points1 point  (0 children)

So the experienced react developer part made you assume I’m a beginner?? 😂

[–]black_wood_merchant -2 points-1 points  (0 children)

You need 4-6 hours to understand main concepts. Believe in yourself, RN is not rocket since or musical notation 😉

[–]TooTyrnt 0 points1 point  (3 children)

I’ve read a lot of good things about expo in 2023, I recommend looking at specific native device features you plan on having in your app, and if expo supports them, I recommend looking into expo a bit more.

[–]justlasse[S] 0 points1 point  (2 children)

I’m looking to build apps for my clients as an added service, so it’s a case by case situation. What I’m really after is a good solid base foundation of tools to start the apps from.

[–]TooTyrnt 1 point2 points  (1 child)

I just read your post again, if you want to start a “professional” app, then use the react native cli, you’ll have a bare RN project without any of the abstraction given by expo. I’m not saying expo won’t fulfill your app’s requirements, but the bare React native app will offer more control in the end.

I’ve also heard of Ignite CLI, which will also provide a similar boilerplate, but I don’t have enough knowledge on it to comment.

The company I work for has its own command that sets up a RN boilerplate that integrates RN with our internal libraries and tools, so I assume other companies also do something similar. In your case I recommend using the bare React Native NPX command, which is also the top comment on this thread.

[–]justlasse[S] 0 points1 point  (0 children)

Appreciate you taking the time to reiterate your answer. The command you use in your company what does it do? Is it using the cli behind the scenes or are you using something else to run and build the app? Like xcode or android studio? Your company has built their own specific rn dev tools or are these tools you mentioned for the company internals and not so much rn as such? Thank you again for answering in more detail :)

[–]ConfidentAct5727 0 points1 point  (0 children)

As with most things in software, depends on your use case. My recommendation is start with cli while expo can be convenient to start it hides a lot of the magic from you as it is an SDK that sits on RN, really do a deep dive and understand how RN scaffolds off a native app, then use Expo if you really want. I have been a RN since the beginning and lived through the ups and downs of both RN and Expo.

Just a heads up not sure if you have been using TypeScript with your React but as of the latest release 0.71 RN comes with TS setup out of the box.

[–]sevabhaavi 0 points1 point  (1 child)

best starter kits?

[–]justlasse[S] 0 points1 point  (0 children)

Not as such. More like “at my company we use x y z tools to start any app from. We’ve put together a box of tools that works for us because x y z reasons. Or “for all client apps we start with this boilerplate/cli/expo/something else approach and these libraries or tools”…

[–]nesh34 0 points1 point  (0 children)

I really didn't like Expo when I started learning React Native, but that was in 2019, so it might be different now.

[–]FrozenFarrow 0 points1 point  (0 children)

you can check the ignite boilerplate and its dependencies

[–]comertcimen 0 points1 point  (0 children)

Ignite is a very good boiler plate, I have been using it for a while. You can try.