Modules for Expo

I would like to ask how I can find out if a certain module supports expo from ? as not all modules can be used.

Hey @george_kulishavili, it will depend on if native code changes are required and if your project is a Managed or Bare project. If it’s a Managed project, you’ll have to make use of config plugins If your project is on the Bare workflow, you will have access to the native directories and will be able to make the changes required.


Now that EAS Build is generally available there’s the potential to use just about any React Native module. Of course, some might be easier to use than others, and in some cases it might not really be easy.

As Adam mentions, if you’re using the managed workflow, a Config Plugin will be needed for modules that include native code.

Because Config Plugins are still quite new there are not many modules that come with a config plugin built-in, so you would (probably) need to write one in order to use modules that are partly implemented with native code. There are some modules that don’t actually need a config plugin, even though they are implemented using native code.

While EAS Build is very powerful and it has opened the door to using many more React Native modules in the managed workflow that you would not have been able to use before unless you switched to the Bare workflow and also allowed for much smaller apps, this power has made things more complicated.

You can use anything that’s included in the Expo SDK (e.g. react-native-svg) out of the box. You don’t need to write a config plugin for those because either they don’t need one, or the Expo team has already written the config plugin. This will work with expo build or eas build.

As you could do before EAS Build became available, you should be able to use any pure JavaScript React Native modules out of the box. This will work with expo build or eas build.

Some React Native modules that are implemented with native code do not require a config plugin, or might only need a config plugin for certain features. e.g. react-native-tcp-socket: If you look at the installation instructions, you basically just need to run npm install react-native-tcp-socket (or yarn add react-native-tcp-socket). The iOS instructions mention the need to run pod install, but the EAS Build build process does this automatically. The Android instructions mention setting the minSdkVersion to 21, but Expo already uses minSdkVersion = 21 by default. Ignore anything about react-native link. That’s only for old versions of React Native.

If the installation instructions talk about making modifications to build.gradle or AppDelegate.m or other things mentioned on the Config Plugins page then you will probably need a Config Plugin. First see the module authors have written one. If so they likely some Expo-specific instructions in their installation documentation. The plugin itself would be a file called app.plugin.js in the root of their project. e.g. The react-native-vision-camera project has one.

If the module authors have not written a config plugin then check the expo/config-plugins repository on GitHub. The Expo team has written config plugins for a few third party modules. See the packages subdirectory.