You are on page 1of 3

Expo limitations

1. We cannot configure older versions of the Android/iOS operating system, for


installation, using Expo.

2. The executable size is large which can hurt the overall downloads.

3. A lot of Firebase – a product by Google, that provides various services for app
development –  products are not supported by Expo, for instance:

o FCM, a Firebase service used for sending notifications to Android/iOS


applications, is still not supported in iOS. 

o Crashlytics, another Firebase service used to report crash events in the live
environment, is not supported. Instead, you have to rely on Sentry, a paid
tool for application monitoring and error tracking, for that.

4. Video streaming player is available with very few configurable controls.

5. Certain features cannot be tested on Expo’s client application. Instead, you need
to make a build to test them. An example of such a feature is ‘Firebase
Authentication’.

6. Image caching libraries in Expo are not efficient enough to support apps like
Instagram.

7. You need to have a paid subscription for a faster build creation process, else you
will have to wait for 45 to 60 minutes for the build, depending on the queue size. 

8. Realm, an external database, is not supported by Expo.

9. If any native module is required to be plugged in then this is not a possibility in


Expo.

10. Things appear to be working fine in the Expo client app but they are not when
compiled and built as a standalone app.
React-native CLI limitations

1. You would have to handle Expo versions yourself along with managing all
certificates and fingerprints. 

2. It will take extra effort to create builds for Android and iOS using their respective
IDE’s where you will be handling all permissions and plugins using Gradle, a build
automation tool for software development, for Android and Pods, a tool that
manages dependencies and libraries, for iOS. 

3. Overall development time will increase since you will now have to consider
dependencies separately.

4. You will miss the Over The Air (OTA) feature for sure if you want to update or fix
any important bug without publishing it and reflecting it on end-users’ devices.
This feature allows the developers to modify something in the live users’
application.

5. You will need MAC hardware for the iOS build creation process which isn’t
required with Expo.

https://www.venturedive.com/blog/expo-cli-vs-react-native-cli/#languages-for-react-native
https://stackoverflow.com/questions/61061489/which-is-better-to-use-react-native-cli-or-expo-
cli
React Native CLI:
Advantages:
 You can add native modules written in Java/Objective-C, so you have full control of
your application.

Disadvantages:
 Needs Android Studio and XCode to run the projects
 You can't develop for iOS without having a mac
 If you want to share the app you need to send the whole .apk / .ipa file
 Does not provide JS APIs out of the box, e.g. Push-Notifications, Asset Manager, they
need to be manually installed and linked with yarn for example.
 Setting up a working project properly take more time.
Expo:
Advantages:
 Setting up a project is easy and can be done in a few minutes.
 Sharing the app is very easy (via QR-code or link).
 No build necessary to run the app
 Integrates some basic libraries in a standard project (Push Notifications, Asset Manager,
etc.)
 You can eject it to ExpoKit and integrate native code continuing using some of the Expo
features, but not all of them
 Expo can build .apk and .ipa files (distribution to stores possible with Expo)

Disadvantages:
 You can't add native modules (probably a gamechanger for some)
 You can't use libraries that use native code in Objective-C/Java (eg: react-native-fbsdk)
 Large APK Size
 Debugging in ExpoKit (with native modules) is a lot more complicated since it mixes
two languages and different libraries.

You might also like