MMP SDKs for Expo
Expo support for attribution SDKs, from npm and each vendor's own docs: which vendors publish a config plugin, which document a community plugin and which have no Expo route at all.
6 of the 9 MMPs tracked here publish an official Expo SDK: Airbridge, AppMetrica, AppsFlyer, Kochava, Linkrunner and Singular. Adjust and Branch document a route maintained by someone else. No Expo SDK found for Tenjin.
Expo pinout: one pin per MMP
Filled pins have an official SDK. Pins are in A to Z order.
Expo SDKs compared
Last checked 2 Nov 2026. Package, version and licence from npm; minimum OS from podspecs, Gradle files and vendor docs.
| MMP | Status | Package | Registry | Version | Licence | Minimum OS | Repo | Install docs | Notes |
|---|---|---|---|---|---|---|---|---|---|
| Vendor-documented | @config-plugins/react-native-adjust + react-native-adjust | npm | 14.0.2 | MIT | iOS 12; Android API 21 | Source | Install docs | Adjust's RN docs have an Expo tab; the config plugin is maintained in expo/config-plugins and cannot be used with Expo Go. | |
| Official | airbridge-expo-sdk + airbridge-react-native-sdk | npm | 4.11.0 | MIT | Not published | Not public | Install docs | Configured as a plugin in app.json; the docs page does not mention Expo Go, prebuild or development builds. | |
| Official | @appmetrica/react-native-analytics | npm | 4.2.0 | MIT | Not published | Source | Install docs | Docs give Expo steps requiring expo-dev-client (development build, not Expo Go); no config plugin mentioned. | |
| Official | react-native-appsflyer (Expo config plugin via app.json plugins) | npm | 7.0.2-v2 | MIT | Expo SDK 52+ (New Architecture) | Source | Install docs | Requires expo-dev-client development build and expo prebuild; not Expo Go. | |
| Vendor-documented | @config-plugins/react-native-branch (with react-native-branch) | npm | 13.0.2 | MIT | Expo SDK 54+ | Source | Install docs | Branch documents Expo but says the config plugin is community-maintained; needs a development build, not Expo Go. | |
| Official | react-native-kochava-measurement | npm | 5.0.0 | Proprietary (Kochava terms) | iOS 15.5; Android API 21 | Source | Install docs | React Native docs list Expo 54 as a minimum; a config plugin is documented only for an older major version. | |
| Official | expo-linkrunner (config plugin) + rn-linkrunner | npm | 3.6.5 | MIT | Expo SDK 52+; iOS 15.0 | Source | Install docs | Config plugin applied at npx expo prebuild; needs a development build, not Expo Go. | |
| Official | singular-react-native (ships app.plugin.js Expo config plugin) | npm | 4.3.1 | MIT | Not published | Source | Install docs | The Expo config plugin ships inside Singular's React Native package; a development build is needed. | |
| None found | No package found | Tenjin docs and the react-native-tenjin README do not mention Expo; package ships no config plugin. |
"Not published" means no primary source states the value; it does not mean there is no minimum. Registry and repo links are for reference.
What the SDK needs from you
The setup steps that apply to any attribution SDK in a Expo app. Each vendor datasheet lists that vendor's own requirements.
- Development buildAttribution SDKs contain native code, so they do not run in Expo Go. Use a development build (
expo-dev-client) or EAS Build. - Config pluginAdd the vendor's config plugin to the
pluginsarray inapp.jsonorapp.config.js. It writes the Info.plist keys, Android manifest entries and Associated Domains duringnpx expo prebuild. - Android permissionsCheck what the plugin adds to the manifest. Singular's plugin, for example, adds
INTERNET,ACCESS_NETWORK_STATEandcom.google.android.gms.permission.AD_ID. - Play Install ReferrerComes with the vendor's React Native package in most cases; nothing extra in Expo unless the vendor's Android docs ask for it.
- ATT promptSet
NSUserTrackingUsageDescriptionthroughios.infoPlistin app config (or the plugin's option), then show the prompt withexpo-tracking-transparencyor the SDK's own method. - Deep linksSet
ios.associatedDomainsandandroid.intentFilterswithautoVerifyin app config, and make sure Expo Router or your linking config passes the URL to the SDK.
Questions
Which MMPs have an official Expo SDK?
6 of the 9 MMPs tracked here publish an official Expo SDK: Airbridge, AppMetrica, AppsFlyer, Kochava, Linkrunner and Singular. Adjust and Branch document a route maintained by someone else. No Expo SDK found for Tenjin.
How do I install an MMP SDK in a Expo app?
npx expo install the package, add its config plugin to app.json, then npx expo prebuild and run a development build. Expo Go cannot load these native SDKs.
Can I use an MMP SDK in Expo Go?
No. Expo Go only contains the native modules Expo ships, so an attribution SDK with its own native code needs a development build or an EAS build. Every Expo route in this table assumes that.
What is the difference between a vendor and a community Expo config plugin?
A vendor plugin is published inside or alongside the vendor's own package, so it moves with SDK releases. A community plugin, such as those in the expo/config-plugins repository, is maintained separately and can lag behind a new SDK version.
What is an MMP SDK?
An MMP SDK is the library a mobile measurement partner asks you to add to your app. It records the first open, in-app events and deep link opens, and sends them to the MMP so installs can be matched to the ad or link that drove them.
Is every MMP SDK open source?
No. Many wrappers and SDKs are MIT licensed, but some native SDKs are proprietary: AppsFlyer's native iOS and Android SDKs, Kochava's SDKs and AppMetrica's Flutter plugin are published under proprietary terms. The licence column in each table shows what the registry or repository states.
Other frameworks
- FW-RNReact Nativenpm install the vendor package, then run pod install in the ios folder. Autolinking wires up the native side.9 of 9 official
- FW-FLFlutterflutter pub add the package, then check the iOS deployment target in the Podfile and minSdk in android/app/build.gradle.8 of 9 official
- FW-UNUnityAdd the package by Git URL in Unity Package Manager or import the .unitypackage, then resolve native dependencies (often with EDM4U) before building for iOS and Android.8 of 9 official
- FW-CPCapacitornpm install the plugin, then npx cap sync to copy it into the iOS and Android projects.4 of 9 official
- FW-CDCordovacordova plugin add the package, then rebuild both platforms.7 of 9 official
- FW-IOSiOS (native)Add the Swift package in Xcode or the pod to your Podfile, then initialise the SDK early in the app's launch.9 of 9 official
- FW-ANDAndroid (native)Add the artifact to your Gradle dependencies (and the vendor's Maven repository if it is not on Maven Central), then initialise the SDK in Application.onCreate.9 of 9 official
- FW-WEBWebAdd the vendor's script tag or npm package to the site, then initialise it with your app or project key.7 of 9 official