Expo Changelog
Check out release history our Expo Plugin. Alpha and beta releases provide access new features and fixes that have been tested internally at Customer.io but have not been tested with a production app or audience. We strongly recommend that you use these versions internally, for acceptance testing or to get a head start integrating new features in your app.
Need to upgrade?
Select your current version to see everything that changed between it and the latest Expo release.
4.x Releases
4.3.0
Features
- iOS deep links: Adds the opt-in
ios.acknowledgedDeepLinkRoutingoption for Expo SDK 58+ apps. When set totrue, Customer.io deep links go to the handler registered withCustomerIO.setDeepLinkHandlerinstead of React NativeLinking. Cold-start links wait for that handler, so they are no longer lost when the navigator mounts late. Register the handler beforeCustomerIO.initialize, or at app start with native auto-initialization. Requires React Native 0.88+. Existing apps are unaffected unless they set the option. Fixes #445. (#446) (c81a611)
4.2.1
Expo plugin 4.2.1
Bug Fixes
- In-app and app startup: Updates
customerio-reactnativeto 7.2.1, which brings in iOS 5.1.3 and Android 5.0.3. These fix in-app message delivery when switching users, in-app modal display on iOS and Android, and a possible ANR at launch on slow Android devices. Installcustomerio-reactnative7.2.1 with the plugin, because the plugin requires that exact version. (#440) (1bb0d72)
4.2.0
4.1.0
Upgrading
- Update
customerio-reactnativeto 7.1.0 along with this release; 4.1.0 requires exactly that version. It uses the same native iOS and Android SDKs as 7.0.0, so a plainpod installis enough if you keepios/. - Nothing else changes for apps that don't use React Native Firebase.
React Native Firebase 26.1 and later on iOS
- React Native Firebase 26.1 and later adds Firebase through Swift Package Manager by default (27 has no other option), and the
fcmprovider adds it through CocoaPods, so the iOS build failed with two copies of Firebase. 3.x and 4.0 had the same problem. - Set
ios.pushNotification.useFirebaseFromApptotrue. The plugin then installscustomerio-reactnative/fcm-core, which adds no Firebase of its own and uses the FirebaseMessaging that React Native Firebase brings in. - Set
ios.useFrameworkstodynamicin bothexpo-build-propertiesand the plugin options, install@react-native-firebase/messaging, and remove the earlier workaround if you set it up:ios.disableSPMand the React Native Firebase entries inios.forceStaticLinking. Keep React Native Firebase's owngoogleServicesFilesettings, and don't set ours. Without FirebaseMessaging in the app, the app stops at launch. - Setup guide: https://docs.customer.io/integrations/sdk/expo/whats-new/4.x-upgrade/#known-limitation
Fixes
- Apps that set
useFrameworkstodynamicnow get dynamic frameworks in the generated rich push and Live Activities extension targets too. Before, those targets built statically, and React Native Firebase's default setup stoppedpod install. - FCM apps with
FirebaseAppDelegateProxyEnabledset toNOnow pass the APNs token to Firebase, so they get an FCM token.
Features
Bug Fixes
4.0.0
⚠ BREAKING CHANGES
- require customerio-reactnative 7.0.0 (native iOS and Android 5.0) (#435)
Migrating from 3.x
For most apps this is a version bump. The plugin config and your app code stay the same.
- Use Expo SDK 54 or later. The SDK's Android build needs compileSdk 36 and AGP 8.9.1, which SDK 54 and later meet by default; SDK 53 isn't supported with 4.x. iOS 15.1 and API 24 stay the minimums.
- Install
customerio-reactnative7.0.0 with the plugin; it's the plugin's peer dependency now. - iOS: if you keep your
ios/folder between prebuilds, runnpx expo prebuild --clean, or once inios/runpod update CustomerIO(FCM apps:pod update CustomerIO CioFirebaseWrapper; apps with live notifications also addCustomerIOLiveActivitiesTemplates CustomerIOLiveActivitiesAttributes). A plainpod installstops on the 6.x versions inPodfile.lock. - Android: native 5.0 brings
firebase-messaging26,play-services-base18.11 and WorkManager 2.12. Gradle picks these up on its own; apps that force older versions of them need to raise those pins. - Known limitation, same as 3.x: React Native Firebase 27 ships Firebase only through Swift Package Manager, so it can't be combined with the
fcmpush provider yet.
Features
3.x Releases
3.14.2
3.14.1
3.14.0
Features
- Geofencing: Adds dwell events. Set a dwell time on a geofence in Customer.io, and the SDK sends a
dwelltransition once a person has stayed inside that long, so you can reach people who actually visit instead of everyone passing by. (#429) (2f770cb) - Geofencing: Exit events now include how long the visit lasted (
visitDurationSeconds), so you can trigger automations like "left after more than 20 minutes inside". (#429) (2f770cb) - Updates
customerio-reactnativeto 6.16.0, which brings in iOS 4.13.0 and Android 4.26.0.
3.13.0
Features
- Public API keys. This release changes how the plugin handles API keys. The plugin now accepts the new public
pk_key and reads your region (US or EU) from it when you don't set one. Prebuild now fails ifcdpApiKeyorios.pushNotification.env.cdpApiKeyis a secretsk_key, because secret keys must never ship inside an app. To upgrade, create a publicpk_key in Customer.io and put it in your plugin config. This release updates the React Native SDK to 6.15.0 (iOS 4.12.0, Android 4.25.0). (#413) (29c93ce)
3.12.0
Features
- FCM apps can now register Firebase Installation IDs instead of FCM tokens. Set
firebaseInstallationId: { enabled: true }in the plugin config. It's opt-in, and apps that don't opt in keep using FCM tokens. APNs apps aren't affected on iOS. See our docs for migration guide. (#424) (08c1f93)
Notes
- Updates React Native SDK to 6.14.0 (iOS 4.11.0, CioFirebaseWrapper 1.1.0, Android 4.24.0).
- FID mode needs FirebaseMessaging 12.16.0+ on iOS (12.19.0+ recommended) and firebase-messaging 25.1.0+ on Android (25.1.2+ recommended).
- Android: on launch, if the device token changed, the SDK now removes the old device before registering the new one. This applies to all apps.
- iOS: secret
ak_keys are rejected and the SDK won't initialize. If no region is set, it's read from the key (e.g.wk_eu_). From iOS 4.10.0.
3.11.0
Highlights
Polygon Geofences: Geofences drawn as polygons in Customer.io are now supported, so enter and exit events follow the exact shape of a venue. Circle geofences behave exactly as before, no config changes are needed, and geofences cached by earlier versions keep working after the upgrade.
Features
3.10.0
3.8.0
3.7.2
Fixes
- In-app: Added multi-app support.
- Push (iOS): Push callbacks no longer stop working when your app or another SDK sets a
UNUserNotificationCenterDelegate. Delegates assigned both before and after Customer.io initializes now keep receiving notifications; previously one was silently dropped. - In-app / Inbox (iOS): Fixed in-app and inbox content occasionally failing to load at startup, when SDK network requests could be starved by lower-priority background work.
- Update
customerio-reactnativeto6.6.3(#392) (02f566b)- Android
4.20.2— In-app multi-app support (release notes) - iOS
4.7.5— In-app multi-app support, notification-center delegate composition, and SDK background-work prioritization (release notes)
- Android
3.7.1
Bug Fixes
- update customerio-reactnative to 6.6.2 (#384) (c690ac3)
- Android
4.20.1— Geofence enter/exit event accuracy (release notes) - iOS
4.7.2— Geofence enter/exit reliability and in-app page route rule matching (release notes)
- Android
3.7.0
3.6.1
Bug Fixes
- update customerio-reactnative to 6.5.1 (#366) (1b78fa7)
- Android
4.18.1— Harden push notification activity and in-app message WebView (release notes) - iOS
4.5.1— Internal test-isolation refactor; no runtime impact (release notes)
- Android
3.5.2
3.5.1
3.4.0
Features
Bug Fixes
- inject killed-state deep link workaround before factory.startReactNative (https://github.com/customerio/customerio-expo-plugin/pull/337)
3.0.0
⚠ BREAKING CHANGES
- remove React Native old architecture support (#323)
Features
RN
- Exposed
trackMetricmethod for manually tracking push notification metrics. This is useful when using multiple push providers or displaying notifications without relying on Customer.io SDK. (#539) (43deefe) - In-app messages now support SSE (Server-Sent Events) as an alternative to polling, reducing latency and improving message delivery efficiency (#555) (a777c69)
2.x Releases
2.11.0
2.10.0
Features
- Updated the SDK and dependencies for Android 16 compatibility, including minor updates to better support newer OS restrictions and behavior changes. (#319) (2537f17)
⚠️ Notes
- Apps now may need to update their
compileSdkversion to36and Gradle version to at least8.9.3to ensure compatibility with updated dependencies and to successfully build against Android 16. - Apps not using the required
compileSdkor Gradle versions may experience issues. The plugin attempts to downgrade dependencies automatically. If issues persist, Android 16 support can be disabled by settingandroid.disableAndroid16Supporttotruein plugin configuration.
2.9.0
2.8.0
Features
- You can now send banners, modals, pop-ups, and surveys to anonymous visitors —no ID or email required.
- Improve push notification delivery receipts delay for android (#313) (ad96c18)
Breaking Features
- Support for Kotlin 2+ is added (#591) (b5f94ff)
but this also means apps needs to have the following minimum requirement, which should already be covered in Expo 53 and above
- Gradle: 8.0 or later
- Android Gradle Plugin (AGP): 8.0 or later (8.2+ recommended)
- Kotlin: 1.9.20 or later (2.0+ required if using Kotlin Multiplatform or K2-specific features)
Bug Fixes
- Resolved a crash when dismissing in app messages using back press during initial loading phase. Users can now safely navigate away from messages without encountering unexpected app crashes
- Fix in-app inline tabbed bug
2.7.3
2.7.2
Bug Fixes
- Improved plugin logging and is now limited to node development environments by default and can be enabled manually by setting
CUSTOMERIO_DEBUG_MODE=truein env (#306) (aa32215) - Auto initialization
configis now lenient and only runs duringprebuild. To enforce strict checks, setCUSTOMERIO_STRICT_MODE=truein env (#307) (d57d650) - Push config is now optional if app includes a valid
google-services.jsonusing other means, auto-initialization will work as long as the build succeeds (#300) (548bc01) (#309) (a69e62b)
2.7.1
2.7.0
Improvements
- Updated React Native SDK from
4.7.0to4.8.0which includes following updates: (#294) (a0e6190)- Added support for queueing sticky sessions on iOS
- Aligned iOS public API with other Customer.io SDK platforms
- Fixed build issues on Xcode 26 beta that only affected apps using CocoaPods
- Fixed an issue where custom scheme URLs were not opening when using FCM with
CioAppDelegateWrapper
- When
setHighPriorityPushHandleris explicitly set tofalse, Firebase Messaging service is now added to Android manifest with a lower priority (-10, previously-1) to reduce the chance of conflicts with other push handlers (#297) (cb72527)
2.6.0
✨ Expo Plugin: Auto Initialization Support for React Native SDK
- Customer.io React Native SDK can now be configured directly from
app.json, removing the need to callCustomerIO.initialize()manually in JavaScript. This update enables automatic SDK initialization at app startup when a validconfigis present, requiring only thecdpApiKey(regionis needed forEU,siteIdfor in-app messaging). It is compatible with Expo SDK 53+ and fully backward compatible, manual initialization continues to work without any warnings. Read more in plugin docs. (#292) (529306b)
2.5.0
Utilizing React Native New Architecture
- This release fully adopts React Native's new architecture using Fabric and TurboModules while maintaining compatibility with old architecture. No changes to public API, apps will automatically use appropriate setup based on their configuration. (#278) (96e4069)
Fixes and Tooling update
- Support for FCM 12.x is added which requires a minimum iOS deployment target of 15. If you're using FCM module, ensure your deployment target and tooling are up to date. Or lock Firebase to 11.x to avoid compatibility issues
- Fixes a crash when build attributes from device are nullable
2.4.0
2.3.1
2.3.0
2.2.0
2.1.0
2.0.2
Bug Fixes
- Improves clarity and reduces configuration errors by grouping all iOS push notification settings under a unified pushNotification property; the previous configuration pattern has been deprecated (but not yet removed) and will be unsupported in future releases.(#247)