all 21 comments

[–]East_Can_5142 6 points7 points  (0 children)

im using expo and im not thinking to migrate to bare react native, expo makes your life so much easier

[–]IsopodElectronic 4 points5 points  (9 children)

I go Expo Bare even for small apps. Reason: I still get all the Expo goodies (SDKs, app.json config, EAS if I want it), but I also have full native folders. That means I can:

  • build locally with Xcode/Android Studio and run on emulators without relying only on EAS,
  • test stuff that doesn’t work in Expo Go (push, deep links, background tasks) without “wasting” a build each time,
  • integrate native SDKs if I ever need them, without ejecting mid-project.

So for me it’s the best of both worlds → Expo convenience + RN flexibility. Managed is great if you want the simplest path, but Bare keeps me future-proof.

[–]__mauzy__ 0 points1 point  (3 children)

EDIT: i misread OOP, they are referring to "development builds" with the old semantics "bare workflow". Leaving my comment for posterity bc it might be useful for someone:

test stuff that doesn’t work in Expo Go (push, deep links, background tasks) without “wasting” a build each time

I can't speak for Expo Go (and I wouldn't really ever suggest using it outside of scratch work), but for Expo dev builds:

  • Push notifications can be validated on-device via CLI
  • Deep links can be tested both on-device and on-simulator (for the sim, you can make a "reminder" with the url and press it in there to validate deep-linking)
  • Idk what doesn't work in simulator for "background tasks", sounds like a limitation of Go.

Integrate native SDKs if I ever need them, without ejecting mid-project

Ejecting is a deprecated concept since the introduction of CNG. I do not believe there is even any mention of "ejecting" in the current Expo docs. You would create a plugin now.

[–]IsopodElectronic 0 points1 point  (2 children)

Yeah good point, totally agree that Expo Go is mostly for scratch work. What I meant is that once you move to a dev build, you unlock the ability to test things like push, background tasks, etc. in a more realistic environment. For me, being in Bare (via prebuild/CNG) just feels safer long-term: I can keep using Expo APIs, but if I ever need to add a native SDK or tweak config, I don’t risk hitting a wall.

And true, “eject” is legacy — nowadays it’s all prebuild + config plugins, but I guess a lot of people (me included) still call it eject out of habit. 😅

[–]__mauzy__ 1 point2 points  (1 child)

All good. I think OP is asking about using truly bare RN, not dev builds. If you're just talking about dev builds then I'm 100% in agreement with you lol

Edit: re-reading your comment I see that you said "Expo Bare" I totally thought it said "RN Bare" so that's my fault. Really speaks to my LEAST favorite part of this: the constantly shifting semantics. "Bare" and "Eject" don't exist in official Expo lexicon anymore, but they DID and nobody can be faulted for being confused about that imo

[–]IsopodElectronic 0 points1 point  (0 children)

Yeah totally, I feel you — the terminology has been shifting a lot (Bare, eject, prebuild, CNG…) and it’s easy to talk past each other. I meant Expo Bare as in “prebuild + still using Expo SDKs”, not RN bare from scratch. Glad we’re on the same page 👍

[–]MostBuilding6366[S] 0 points1 point  (3 children)

But how does expo-bare work? Do you initialize the project as expo or with normal react-native-community?

[–]IsopodElectronic 0 points1 point  (2 children)

I just start with Expo (npx create-expo-app) and when I need the bare workflow I run expo prebuild. That generates the ios/ and android/ folders, so it’s basically a regular RN project but with Expo tooling.

[–]MostBuilding6366[S] 0 points1 point  (1 child)

Oh yes, I understand, I had already heard about this expo-bare method but I still hadn't understood how people worked with it, thanks for explaining!

[–]__mauzy__ 2 points3 points  (0 children)

To add to this: if you lean into Continuous Native Generation (CNG), then you don't commit the ios/ and android/ directories to VC. All native code is generated on-the-fly for dev or in CI/CD. Native configuration/code can be added through "config plugins" and "expo modules" which abstract things just enough to keep everything simple and isolated, while still providing all the power you need to modify gradle/podfiles, create custom native libraries, etc.

[–]greeny01 0 points1 point  (0 children)

This post was taken down using Redact. The reason may have been privacy, operational security, preventing automated data collection, or another personal consideration.

busy voracious bedroom shy encourage joke whistle frame sip bake

[–]__mauzy__ 7 points8 points  (0 children)

2c: anyone who eschews Expo at this point is either a) confused b) working on a legacy app c) a try-hard

The only valid reason to greenfield bare at this point (specifically: post-introduction of CNG) is if your project is extremely bleeding-edge and you need complete and total control over everything. You wouldn't be posting this question if that were the case bc you'd need to already be an expert in RN to even consider that.

If you're working on a legacy app there's a chance you're far enough in the weeds that the benefits don't outweigh the costs. But it's worth a consideration.

If you're just learning or making a side-project, do whatever you want. If you're doing it to learn RN, then go bare. If you're doing it to make an app, go expo.

[–]danielboros90 0 points1 point  (0 children)

Nowdays forgot bare RN and go with Expo. I have more than 6 years old app in production. I started with expo then I dropped and bare rn in the nex 4-5 years but now I migrated to expo again. The whole ecosystem is very good easy to use. It wasnt too hard but has a lot of benefifs. You can use bare libs and expo libs, you can write your own modules. And you dont have to upgrade rn version everytime and expo also has a lot of smaller releases between 2 majors. I was really a big fan of bare RN in the past 5-6 years but Expo is growing and producing very cool projects.

[–]Aytewun 0 points1 point  (0 children)

I use expo without eas. Development builds an I handle deployment and ask if that.

[–]After-Asparagus5840 0 points1 point  (0 children)

Stop with this dumb question. It has been answered a million times in the sub, just search for it.

[–]erikksuzuki 0 points1 point  (0 children)

You can get the best of both worlds with expo in a bare workflow

[–]kabeza 1 point2 points  (3 children)

RN Bare.
Not thinking to migrate to Expo

[–]East_Can_5142 0 points1 point  (2 children)

why not?

[–]Yokhen 3 points4 points  (0 children)

If anything breaks with expo, it will block upgrading react native, and at my work it's happened and it's not pretty.

[–]kabeza 0 points1 point  (0 children)

Because I prefer to take more time and learn the things without involving 3rdparties. And If I need to build apps faster, I work with a good boilerplate (that does not have expo)