Clarification on 3rd Party Components Compatible with Expo

#1

Hello.
I just wanted to say that I like the project, and the speed it enables me to create apps.

I’m in the process of converting a regular react-native project, and I have a question on using non-Expo components with Expo. How do I identify which libraries are compatible/incompatible? For example, is any component that requires me to use react-native link automatically incompatible? Since there is not a gradle file or android directory, does that mean I can’t use any libraries that require editing those? The specific libraries I’m concerned with are:

https://github.com/wix/react-native-zss-rich-text-editor - no react-native link but it does require editing the android/app/build.gradle file. Using it with my Expo enable app results in the keyboard is not being displayed, and the component is not filling in its default text the same way it did in my Expo-less version of my app.

https://github.com/ivpusic/react-native-image-crop-picker - requires the use of react-native link. I’d prefer this over the Expo component because of the image cropping and multiple selection features.

#2

This question ended up getting answered by user ap on the #general channel of the Slack who said:

“in general if you need to run react-native link, you can’t use it with expo w/o detaching that covers like 98% of cases, afaict”

#3

Glad I found this, was about to start building with Expo. Uninstalling and walking away for now. Maybe I’ll check it out again in a year or two to see if Expo is more suitable for development that isn’t bound to a curated set of components

#4

If you’re looking to use libraries that have native code (and need react-native link), the path to using them with Expo is to “detach” and use ExpoKit: https://docs.expo.io/versions/latest/guides/detach.html.

With Expo, you write just JavaScript and a set of native APIs that the Expo team maintains and upgrades each time Expo supports a new version of React Native. In my experience, Expo developers have a far easier time keeping up to date with RN’s frequent releases than developers trying to use bare RN directly. Often there are breaking changes to the native Obj-C and Java parts of RN and you have to update your native modules (or get the maintainer of community modules to update them) and test that they work with the newest RN. But sometimes you need to write native code so we introduced ExpoKit to let you keep some of the benefits of Expo.

With ExpoKit, you have Xcode and Android projects that each have a native library (ExpoKit) inside them. ExpoKit contains RN as well as the Expo native modules that work well with that version of RN. ExpoKit also continues to work with the project publishing system that you use with regular Expo. It’s certainly more complex to use ExpoKit and we recommend that both app developers and library authors write just JavaScript but sometimes you need to write native code and ExpoKit is our path to do that.