Readit News logoReadit News
jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
LeoNatan25 · 2 years ago
Hi James, thank you for this comment.

I'm glad to hear the tech and, more importantly, the community have improved.

By "layer", I mean custom controls and animation toolkits that get bundled in an Expo-enabled project. Those are in addition to the RN-provided ones. It all adds to complexity.

jameside · 2 years ago
Expo Modules Core is the only module that is bundled in. It is a small runtime library that defines the Expo Modules API used by other modules, and adds about 150 KB to a production build of an app downloaded from the stores. A hello world iOS app made with Expo ended up being smaller than the same hello world app that used RN without Expo due to the Xcode settings.

There are also no custom UI controls or animation libraries bundled with Expo. The Expo Go starter app includes a preset SDK, and when developers create a build for the app stores or a development build of their own app, only the libraries they use are included.

IMO it would be a meaningful improvement for the react-native package to provide the minimal runtime needed, namely JSI, Hermes, Turbo Modules, Yoga, Fabric, and perhaps a few primitive view components like View, ScrollView, and Text. The package provides more than a library needs. Animations and gestures today are better served in my experience by modules outside of the react-native package, like Reanimated and Gesture Handler that use truly native gestures. React Navigation uses the system navigator UI and Expo Router adds file-based routing and universal links. Expo Image adds support for modern image formats like AVIF and WebP and uses mature, performant image libraries like Glide and SDWebImage. So there is definitely still work to be done that can improve quality and reduce complexity in RN.

jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
wesvance · 2 years ago
I've used Expo going on 3 years now, their development team is incredible. There are very few reasons to use base react-native over Expo anymore; They make upgrades to new RN versions easier, can support any custom native libraries, have an awesome build service (EAS), support OTA updates, their docs are great... I could go on and on. If you're a RN dev and haven't tried out Expo in the past year I highly recommend giving it another go - its not the Expo you remember before their custom dev-client days.
jameside · 2 years ago
Adding support for custom native code to Expo definitely has been a game-changer for developers. Glad it has been working well for you!
jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
benterix · 2 years ago
Just to make sure: if the company goes bankrupt, will I be able to continue releasing updates etc.?
jameside · 2 years ago
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.

jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
thorben84 · 2 years ago
Expo and EAS is my preferred choice for building a new product these days.

I was focused on native Android development (Java/Kotlin) for many years. React Native (I first used in late 2016) and Expo (I first used it in production in early 2020) have matured so much over the last years and all the Expo tooling is a game changer for building (cross platform) apps.

A few examples of how Expo has changed the game: - The Expo Go or Expo dev client make it possible to no longer need XCode or Android Studio during development and thus make it much easier to bring engineers onto a project who do not necessarily have mobile dev experience. The dev client can be built locally by one engineer and shared with the team or can be built in the cloud with EAS Build. - Upgrades in bare React Native projects used to be painful and time consuming. With Expo prebuild, one can (re-)generate the native projects at any time including after upgrading to the latest RN/Expo versions. Further this allows having to never source control the iOS/Android folders. - Expo config plugins have made it possible (and really straightforward) to apply modification to the XCode/AS projects such as adding permissions or adding extensions. Requiring modifications to the XCode/AS projects used to be a reason for having to use bare RN / eject from Expo. - The Expo Modules API has made it really simple to create a library project and allows for writing the native code in Swift/Kotlin. Setting up and maintaining a RN library used to be a lot more involved especially if it was small and not touched very often. - The entire Expo EAS offering basically provides you with what normally a mobile ops time would provide - builds in the cloud, app store submission and ota updating. For anyone who has set this up with Buildkite/App Center/CI tool knows how much time this could cost / take.

And these are just a few things that are top of mind.

It is my experience that using Expo + dev client, allows me to bring together a team from all backgrounds (iOS, Android, web, backend) and quickly get everyone up and running, contributing and have impact.

The first product I built with Expo was HowWeFeel (April 2020) and with a small team we shipped the initial version iOS, Android and web in less than two weeks. The most recent product is Pinterest TV Studio and because of Expo/RN it is feasible for us to have it not only available for iOS but also Android.

I'm excited for the future of Expo and curious what will drop during launch party (August 8th).

jameside · 2 years ago
Sometimes I tell people the best Expo apps have custom native code and it is a really useful skill to know Kotlin and Swift in addition to React and JavaScript. Glad to hear you have found Expo and EAS so useful! One of the features we'll be previewing during launch week is something Pinterest has been needing for a long time, and we'll make sure you hear about it.
jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
robin_heinze · 2 years ago
I work for Infinite Red (leading RN consultancy), and we have really bought into Expo in full force in the past year or so. The addition of EAS, and prebuild with config plugins has completely changed the game and for us and all but eliminated the need to ever do bare workflow anymore.

Things we love about the expo ecosystem

- React Native upgrades are much less painful if you use prebuild. Upgrading the expo SDK takes care of most things for you

- EAS makes distributing and managing certs incredibly easy

- Most expo packages (like expo-camera, etc) are some of the best out there and very well documented and supported

- The Expo team is incredibly talented and always willing to help if issues arise.

jameside · 2 years ago
Infinite Red has been a great partner for Expo. Thank you!
jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
paradite · 2 years ago
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/

jameside · 2 years ago
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.

jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
jayant_kaushik · 2 years ago
Can’t we disguise the PWA as a browser on the iOS App Store? So in theory it’s just another browser that only allows to open one website- the PWA. But on the surface, to the users it will be available as an app in App Store.
jameside · 2 years ago
It is technically possible, of course, though I vaguely recall iOS App Store guidelines saying not to just wrap an existing website in a webview. On the flip side, PWA support in Safari has been gradually improving with better support for web manifests and web notifications, for example.
jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
LeoNatan25 · 2 years ago
I used to maintain Detox for iOS when I was at Wix, from 2017 to 2021. We ended up dropping support for Expo for plenty of reasons, some technical, some "political". The people reporting "issues" (more like asking questions) for their Expo apps, usually had very little technical understanding of any of the increasingly thick environment stack (the Expo layer, RN layer, UI framework layer, OS layer). They were basically web developers who were trying to emulate developing for the browser, with zero interest (and often, capacity) in learning any of the complexities of the aforementioned complex environment.

It was our experience the expo layer added a lot of complexity and many bugs, with very little ability of users to actually fix anything without "ejecting" their project away from that ecosystem. That was on top of the RN layer, which in itself was full of bugs. We would send users to report expo bugs to the expo team, and were first met by "just fix it on your end, you are detox!" type of comments from that silly community, and those that did report the issues, saw no reaction from the expo team, despite detox being one of the most popular testing frameworks in the RN world at the time (no idea about now, but back then, even Facebook was using detox to test RN itself).

At the end of the day, we decided the hassle was not worth the low quality user benefit, so we decided to drop support for Expo. It was one of the best bureaucratic decisions we ever made.

jameside · 2 years ago
Modern Expo is very different and in 2023, Expo has full support for custom native code and isn't a layer, so to speak. Ejecting is gone. React Native has also become much thinner in several ways. For instance, developers write Kotlin and Swift with the Expo Modules API and uses JSI (RN's "JavaScript Interface") to directly bind the native methods to Hermes JS methods.

Relatedly, the developer demographic has grown and a lot more developers are adding Kotlin and Swift to their skill sets. They write JS and React most of the time while also writing custom native code when they need to. Most of the best Expo apps include custom native code.

Test frameworks have also grown a lot. I suspect the issues with Detox were often from developers looking to use it with the Expo Go starter app that doesn't support custom native code. These days I hear a lot of positive things about Maestro as well and there was a nice talk on it at App.js Conf earlier this year: https://www.youtube.com/watch?v=uoCzBdFCoqc

jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
siquick · 2 years ago
Would it be fair to say that Expo is to RN what Next.js is to React?
jameside · 2 years ago
Expo and Next.js are both React frameworks and Expo also uses React Native. Expo, Next.js: frameworks, React, React Native: libraries.
jameside commented on Expo – Open-source platform for making universal apps for Android, iOS, and web   github.com/expo/expo... · Posted by u/andsoitis
qazxcvbnm · 2 years ago
FYI I've made a patchset that pretty much allows me to actually use the EAS --local builds offline and without an EAS account, so it's in fact possible, even though they, for obvious reasons (e.g. https://github.com/expo/eas-cli/issues/1606), don't encourage it.
jameside · 2 years ago
EAS CLI is designed for EAS, the hosted services. It is intended to use your EAS account, which I suspect is why the PR wasn't accepted.

Expo CLI is for entirely local builds. Run "npx expo prebuild:{android,ios}" to generate your Android Studio and Xcode projects, and build them with the IDEs or their respective CLI tools directly.

u/jameside

KarmaCake day175April 21, 2015
About
[ my public key: https://keybase.io/ide; my proof: https://keybase.io/ide/sigs/EcPQK_FRPXrYviB9ZAj2QPkriHxhFKLgn-daVuYFn4Q ]

Co-founder @ Expo (YC S16) [https://expo.dev]

View Original