Choose by build mode first, then check each SDK’s version rules.
- AppsFlyer, Adjust, Branch, Singular, and Airbridge each document an Expo integration route.
- Expo Go has a fixed set of built-in native libraries; a development build lets you include the native code your app needs.
- Branch sets an explicit floor of Expo SDK 54; Adjust explicitly requires EAS Build.
- Airbridge documents a dedicated
airbridge-expo-sdkpackage and anapp.jsonplugin.
For an Expo-managed app, AppsFlyer, Adjust, Branch, Singular, and Airbridge all document an Expo integration path, but their build requirements and version conditions differ. The useful test is whether the vendor explains how its native SDK enters an Expo build, which Expo workflow it needs, and which version rules apply. A React Native SDK listing alone is weaker evidence than an Expo-specific guide with a configuration and build path.
This comparison uses the five vendors’ first-party integration documents and Expo’s official build guidance.
What counts as Expo support for an attribution SDK?
A documented Expo path connects the JavaScript app configuration to native iOS or Android code, then produces an app binary that contains that code. Expo’s config plugin guide describes plugins as functions listed in the app config’s plugins property and run during prebuild. In Continuous Native Generation (CNG) projects, config plugins apply configured native-project changes during prebuild, avoiding repeated manual edits.
The build mode is a separate part of the test. Expo Go includes a fixed set of native libraries, according to the Expo development-build FAQ. If a library calls native code that Expo Go does not include, its JavaScript can load but errors when it calls that missing native module. Expo defines a development build as a production-grade development environment, and its development-build setup guide starts by adding expo-dev-client; teams can build locally or use EAS.
Use three checks when reading vendor documentation:
- Expo-specific setup: Look for the vendor’s Expo guide, plugin name, app-config example, or Expo prebuild instructions.
- Build workflow: Confirm whether the guide calls for EAS Build, a development build, or native prebuild. Expo Go suits libraries already bundled into Expo Go; a new native SDK calls for an app build that includes it.
- Version fit: Match the project’s Expo SDK and React Native versions to the vendor’s stated floor, plugin table, or Expo-aware installer. A version condition for one vendor is not a universal MMP requirement.
Five vendors’ documented Expo paths
Comparison table Scroll to view every column ↔
| Vendor | Expo integration path | Build and version fit | Best fit when… |
|---|---|---|---|
| AppsFlyer | Expo installation guide with a config-plugin path | Prebuild applies native setup; automatic AppDelegate wiring covers the Expo SDK 52+ Swift template and the legacy Objective-C template. |
You want AppsFlyer attribution and plugin-applied deep-link setup. |
| Adjust | Install react-native-adjust and @config-plugins/react-native-adjust with npx expo install, then add its plugin to the Expo config. |
Adjust explicitly supports EAS Build for Expo and requires that route for this plugin. Expo Go is outside the supported route. | Your team already builds Expo apps with EAS. |
| Branch | Dedicated Expo integration guide covering setup, deep linking, paid ads, and troubleshooting. | Expo-managed or prebuild workflow on Expo SDK 54 or later, plus a development build; the SDK and plugin versions must match the Expo SDK. | You meet the SDK floor and need Branch’s documented deep-linking or paid-ad features. |
| Singular | Install the React Native SDK, add singular-react-native to app.json under plugins, and rebuild with native customization. |
Requires native modules. React Native 0.60+ auto-links; its direct TurboModule API is recommended only for the New Architecture on React Native 0.76+. | You can maintain native configuration alongside the SDK integration. |
| Airbridge | Dedicated airbridge-expo-sdk package, installed with airbridge-react-native-sdk, plus an app.json plugin. |
Configure the plugin with appName and appToken, then configure optional SDK settings in a top-level airbridge.json file. |
You want a package and Expo plugin explicitly documented for Airbridge’s Expo integration. |
The table describes published setup paths, not a benchmark of attribution results or implementation effort. The strongest fit depends on the app’s current Expo SDK, how the team builds, and which attribution or linking features it plans to use.
AppsFlyer: Expo plugin and generated native setup
AppsFlyer documents an Expo installation path and native integration through its React Native plugin. AppsFlyer’s Expo installation instructions say that running expo prebuild with the plugin automatically updates the iOS AppDelegate to wire up deep linking and attribution. That automation applies to both the Swift template used by Expo SDK 52 and later and the legacy Objective-C template.
AppsFlyer’s SDK getting-started guide says SDK integration provides attribution out of the box, alongside access to its broader marketing-services features.
The Expo installation guide says the SDK includes built-in Android backup rules for install and reinstall detection; by default, the plugin respects the app’s backup rules and does not modify them.
Adjust: the clearest EAS-only constraint
The Adjust React Native integration guide gives Expo developers this install command: npx expo install react-native-adjust @config-plugins/react-native-adjust. The guide says this Expo-aware installer keeps the SDK and plugin versions compatible with the project’s Expo SDK. Its plugin configuration then applies native settings when the app is built with EAS Build.
Choose Adjust when your team can build with EAS, because the guide says its Expo config plugin cannot run in Expo Go.
For apps targeting Android 12 or later (targetSdkVersion ≥ 31), the guide shows an optional targetAndroid12: true setting that adds the Google Advertising ID permission.
Branch: clear minimum and paired versions
Branch’s React Native SDK Expo integration guide sets a minimum of Expo SDK 54 and calls for an Expo-managed or prebuild workflow. It also requires a development build, since its plugin adds native code.
The Expo SDK, Branch React Native SDK, and config-plugin versions must match; Branch’s version table lists the compatible combinations for each Expo SDK. Branch warns that --legacy-peer-deps skips version checks and can leave incompatible versions installed.
After Expo integration, Branch’s React Native SDK reference lists features such as creating Branch Links, tracking Branch Events, and handling Branch Universal Objects. It includes setup and troubleshooting for the integration, while features such as NativeLink have their own configuration requirement: the guide says to add an entry to Branch.json so the SDK can check the pasteboard for a Branch Link.
Choose Branch when its documented deep-linking or paid-ad setup matches the release plan.
Singular: Expo plugin plus native customization
Singular’s basic integration guide tells Expo users to add singular-react-native to app.json under plugins and rebuild with Expo’s native-code customization workflow. Its prerequisites say the SDK requires native modules, so the Expo route includes native app setup alongside the JavaScript package.
Singular’s Expo deep-link instructions call for platform-specific settings in app.json and custom Expo plugin files to apply native changes during prebuild. The guide registers the Singular plugin alongside separate custom iOS and Android deep-link plugins.
For its React Native SDK, Singular says React Native 0.60 and later auto-links the SDK. Singular recommends its direct NativeSingular TurboModule API only for apps using the New Architecture on React Native 0.76 or later; other projects should use the SingularConfig and Singular.init wrapper for compatibility.
Choose Singular when your team can maintain Expo plugins and platform-specific native settings for the features it needs.
Airbridge: dedicated Expo package and app-config settings
Airbridge’s Expo SDK v4 guide names a dedicated package, airbridge-expo-sdk. The installation instructions install it alongside airbridge-react-native-sdk. The guide adds airbridge-expo-sdk to the Expo plugins array and configures it with appName and appToken.
The guide puts SDK options in an airbridge.json file at the project root and tells developers to omit keys their service does not need.
Airbridge’s Expo package uses a config-plugin architecture, so plan a build that applies its plugin configuration.
Choose by your project’s actual constraints
-
- Record the Expo SDK and React Native versions your app uses.
-
- Choose a native build route. Expo Go includes a fixed set of native libraries; use a development build or another custom app binary when the selected SDK needs native code.
-
- Turn feature needs into tests. List install attribution, the app’s required deep-link routes, and paid-ad flows as separate acceptance tests.
-
- Build and validate the release path. Build for iOS and Android, test a fresh install and each required link flow, then confirm the expected attribution arrives.
Airbridge is a strong shortlist candidate when a dedicated Expo package is a deciding criterion.