Hacker News new | past | comments | ask | show | jobs | submit login

I've been using Expo for past 2 years and I enjoyed the experience overall.

But make no mistakes that Expo is a SaaS with the ability to inspect some part of the codebase.

(I stand corrected here) ~Everything important for building and distribution process is moving to EAS, cloud-based service that is not open-source and cannot be self-hosted. So if want to build your app using your own VPS, you are out of luck (at least for Expo managed workflow).~

Again I'm happy with their service and probably would pay for it when the time comes, but the open-source part is not really the big selling point anymore.




You can use the `--local` flag to build on your own computer/CI/VPS. `eas build --local -p ios --profile production` can locally build you an iOS bundle. Don't expect it to work out of the box, though. Your machine should have all the XCode tooling correctly installed and configured. Works for Android as well.


> Your machine should have all the XCode tooling correctly installed and configured. Works for Android as well.

I mean that's the case for the 'regular' React Native workflow as well, and most mobile / crossplatform development. That said, yeah getting RN running is a bit more effort compared to Expo, but it allows for a bit more flexibility.

We decided against using Expo because we had a number of 3rd party dependencies (trackers, analytics, chat, sigh) that had native components; it can work with Expo, but the dependency has to implement support for it, and that was a bit all over the place.


AFAIK using -—local still requires an eas account though.


It does. It's possible to make a patchset that lifts this restriction, though. If you're interested, I'd be willing to make it available.


The Expo setup that I use never calls into Expo servers at build time. For OTA updates, I've managed to get my self-hosted Expo update server working too, although I'm not using it at the moment, as its incompatible with the React Native New Architecture (it's the last expo package to lack this support - hopefully they'll add it soon).


Do you have the self hosted OTA open-sourced? I tried implementating it, but it didn't work for some reason.


Unfortunately my update server contains a bit more stuff which I'm not planning to clean up at the moment, but the logic of the update server really is taken right from their https://github.com/expo/custom-expo-updates-server repo. Perhaps you were blocked by this https://github.com/expo/custom-expo-updates-server/issues/12 ? If so, its been fixed in the meantime, perhaps it works for you now?


Just to make sure: if the company goes bankrupt, will I be able to continue releasing updates etc.?


The Expo Updates protocol is an open standard specified here https://docs.expo.dev/technical-specs/expo-updates-1/

The hosted services offered by the Expo team called EAS has an implementation of an updates server that conforms to that protocol. If EAS went away or you wanted not to use EAS, you could write and operate your own server that conforms to the protocol instead.


please do so, I would like to build it totally local and when I realize that outsourcing the build to the EAS cloud saves more time and money I will switch later, that sounds like a nice way to get more people use Expo.


I've put a link to it on my other comment. Hope it helps.


I believe it still uses EAS for certificates by default. You can use "prebuild" to get the ios / android directories. Alternatively start a React Native app and install their modules separately. These options still work well but require a lot more setup.


Thanks. I wasn't aware that eas build works locally as well (since they deprecated expo build).

Is the build job also open source somehow?



Thank you very much and I'm glad you were able to get it working without the cloud stuff.


Expo is the free and open source framework and, separately, Expo Application Services (EAS) is the SaaS. Expo and EAS are designed to be decoupled while also working well together, optionally.

The Expo framework gives you the module system, runtime environment, CLI tools, debugger, a suite of modules, navigation to build universal native apps. They're universal in that there is an Android build, an iOS build, and a web build, and, especially with Expo Router, they work together with universal links. They're native in that the user experience is native to the underlying platform, usually using system UI components and behaviors.

EAS provides hosted services for building your app, submitting it to the stores, and updating it. Many developers will use both EAS and their own hardware. It is convenient and fast to build locally when iterating on a feature. And it is convenient in a different way to use EAS to make preview builds of your app on your PRs that change your app's native code or to make release candidates for production.


Hey. I appreciate that there is a distinction between Expo and EAS.

However, as a user reading the Expo docs, I'm not sure if I can separate them easily without deviating from official docs.

Look at the Expo docs on building and deployment, which are essential steps to getting your app distributed. I don't see any mention of how to achieve it without EAS.

There used to be an expo build but it was deprecated a while ago.

https://docs.expo.dev/develop/development-builds/installatio...

https://docs.expo.dev/deploy/build-project/


A lot of the docs prioritize ease of getting started and EAS has a free plan generous enough to get you to production and often beyond. The Expo CLI docs have a section on building locally here: https://docs.expo.dev/more/expo-cli/#building

"npx expo prebuild" (covered in that link) is a good command to know. It generates "android" and "ios" directories with your Android Studio and Xcode projects, respectively. These projects can be built entirely locally and there is no dependency on EAS.

As a side note, the old "expo build" command also ran on hosted servers. It was part of the old Expo CLI, which, for historical reasons from six or seven years ago, didn't separate the free & open source Expo framework from the hosted offering. We built EAS years later, with a major new feature being support for builds that have custom native code. Keeping EAS decoupled from Expo has been a conscious effort, and we've also designed EAS to work with any React Native app whether it uses Expo or not.


I guess I'm just saying it would be nice to have an actual "expo build" command that can build the app locally (assuming Android Studio and Xcode are in place), to complete the full Expo framework experience, instead of using expo prebuild and letting the user deal with Android Studio and Xcode manually.

Then again, I can understand why it isn't a priority for the company.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: