All notable changes to the Glomo React Native SDK.
The format is based on Keep a Changelog, and the SDK adheres to Semantic Versioning.
The canonical changelog ships with the npm package. This page mirrors it for convenience.
A feature release. No API changed and no existing code needs to move - appColorScheme is optional and defaulted. If your app or your network restricts outbound hosts, see the Migration Guide; nothing else needs anything.
appColorSchemeprop ("auto" | "light" | "dark", default"auto") onGlomoCheckout, providing the Glomo checkout page the preferred colour scheme. It requests rather than forces: the page decides, against your merchant dashboard settings. Changing it during a live checkout is supported and does not reload the page, so a payment in flight survives it. Optional and defaulted, so existing integrations need no change. See Dark mode, and Dark mode across the SDKs for how the same property resolves on the other Glomo SDKs.GlomoColorSchemetype, exported.
- Improved SDK diagnostics and observability revamp to better assist merchants.
- If you restrict outbound hosts, see the Migration Guide.
- Android WebView algorithmic darkening is now explicitly off on every WebView the SDK renders, including bank and 3DS pages. Previously the platform could invert a page that handles its own colours. Nothing to configure.
"auto"resolves to your app's effective appearance (Appearance.getColorScheme()), not the device setting underneath it - React Native does not expose the latter once an app overrides its own appearance. See Dark mode, which also covers why the prop isappColorSchemewhile the URL parameter stayscolorScheme.- Pin
jail-monkeyto the 2.x line.jail-monkey@latestis 3.0.0, and on an app that has not enabled the New Architecture its native module does not compile at all: it passes aReactApplicationContextto a no-argument constructor and reads an undeclaredrootedCheck, so the build stops at:jail-monkey:compileReleaseJavaWithJavacbefore any Glomo code is reached. No 3.x patch exists. The SDK's peer range has always been^2.6.0and is unchanged; what changed is that the install commands now pin it rather than resolvinglatest. Nothing in the SDK moved - this is recorded here because a freshnpm install jail-monkeyis the likeliest way to walk into it. - Android hosts should declare
uiModein their activity'sandroid:configChanges. Without it, an OS dark-mode toggle destroys and recreates your activity mid-checkout and loses the payment in flight. This is pre-existing behaviour and not new in this release, but it matters more now that users have a reason to toggle. The SDK ships no native Android code and cannot detect or prevent it. See Required on Android:uiMode.
Part of the v5 documentation.
jail-monkeyis now a required peer dependency, and device compliance fails closed. It was optional in v4 and the SDK warned and proceeded when it was missing. A device whose security cannot be verified is now refused on alive_key rather than assumed clean:start()returnsfalseandonSdkErrorfires withtype: "device_forbidden". Mock and test keys are never blocked, so this does not show up in atest_key QA pass. See the Migration Guide first - this can take a working live integration off the air.onUserRefusedCameraPermissionsrenamed toonUserRefusedDevicePermissions. The signature is unchanged, so the compiler points at every call site. The new name reflects what the callback covers - a device permission the bank's page asked for - rather than the camera specifically.paymentIdandsignatureare optional onGlomoCheckoutPayload. The checkout page can report a terminal outcome before the backend has resolved those ids; v4 dropped such outcomes entirely rather than report an incomplete one. Withstrictenabled this surfaces as a compile error wherever either value is forwarded to something expecting astring, which is the intended guardrail.onPaymentTerminatereceives aGlomoTerminationPayload. Carriessource, from the newTERMINATION_SOURCESenum. An existing() => voidhandler stays assignable and compiles unchanged.
- Document downloads. A checkout page can now ask the SDK to save a document to the device, which a page cannot do for itself inside a WebView. Available on every flow. Requires two optional peer dependencies -
react-native-blob-utiland@react-native-documents/picker- and a rebuild of the app after installing them; without both the SDK does not advertise the capability and the page keeps its existing behaviour, so nothing breaks by leaving them out. A save that fails reports throughonSdkErrorwithfield: "file.save"and never affects the payment session. See Document Downloads. TERMINATION_SOURCESenum andGlomoTerminationPayloadtype, both exported.- Emulators and simulators now pass device compliance on live keys. The SDK computes its own root verdict from
jail-monkey's per-check breakdown instead of its aggregate, which reports every stock Android emulator image as rooted. Every strong root indicator is still enforced. productandsurfacequery parameters on the checkout and education carousel URLs, so an SDK-originated order is distinguishable from a dashboard one.
- A
mock_public key ran in live mode. It passed validation and then hadmode=livebuilt into its checkout URL. - Camera now works on LRS checkouts. The LRS flow had no permission handling wired on either platform, so a bank page requesting camera access got no prompt on Android and no grant on iOS. It now behaves identically to the standard checkout.
onUserRefusedDevicePermissionsis now forwarded to LRS. The unifiedGlomoCheckoutaccepted the callback and advertised it in its types, but never passed it to the LRS flow - so on an LRS order it could never fire. Note it remains Android-only: on iOS the WebView raises its own prompt and never reports the answer back.- Terminal payment outcomes are no longer dropped silently. A payload the SDK could not route left no trace in a release build - no callback, no telemetry, nothing for support to find. It now reports through
onSdkErrorand telemetry. - The SDK's back chevron has a touch target that meets the 44dp / 44pt minimum, an accessibility label and a button role.
- WebView configuration, permission handling and bridge message routing moved into a shared layer used by every checkout flow, so capabilities land on all flows at once rather than being wired per flow.
- Improved SDK diagnostics.
Part of the v5 documentation. See the Migration Guide for upgrade instructions.
- End-to-end test harness and CI for Android and iOS. No change to SDK behaviour or public API.
Part of the v4 documentation (Archived).
- Consolidated async payment callbacks:
onBankTransferSubmittedandonPayViaBankCompletedhave been replaced by a singleonUserJourneyCompletedcallback. The new callback receives aGlomoUserJourneyCompletedPayloadwith ajourneyTypefield from theASYNC_PAYMENT_EVENTSenum. - Removed
onPayViaBankBankConnectionSuccessful: This callback has been removed. - Removed types:
GlomoBankTransferPayloadandGlomoPayViaBankConnectionPayloadare no longer exported. onSdkErroris now required: Previously optional,onSdkErrormust now be provided. This ensures validation errors, device compliance failures, and configuration issues are handled properly.
ASYNC_PAYMENT_EVENTSenum: Enumeration of asynchronous payment event types (BANK_TRANSFER_SUBMITTED,PAY_VIA_BANK_COMPLETED).GlomoUserJourneyCompletedPayloadtype: Flat payload interface withjourneyType,orderId?,status?,senderAccountNumber?,transactionReference?.onUserJourneyCompletedcallback: Single callback for all asynchronous payment flow completions.
CheckoutStatusvaluesbank_transfer_submittedandpay_via_bank_completedremain for granulargetStatus()state checks.
Part of the v4 documentation (Archived). See the Migration Guide for upgrade instructions.
- Subscriptions checkout support - new
subscriptionIdprop onGlomoCheckout. When provided, the SDK bypasses order type detection and renders the subscriptions checkout flow directly. No API call is made - the inner checkout component mounts immediately. Thedetecting_order_typestatus is not emitted for subscription flows. - Mutual exclusion validation -
GlomoCheckoutvalidates that exactly one oforderIdorsubscriptionIdis provided. If both or neither are set,onSdkErrorfires with a clear message andstart()returnsfalse.
orderIdis now optional onGlomoCheckoutProps- required only whensubscriptionIdis absent.
useGlomoCheckouthook - use theGlomoCheckoutcomponent with a ref instead. The hook does not provide reactive state -getStatus()returns a point-in-time snapshot. Will be removed in a future major version.
Part of the v3 documentation.
onPayViaBankBankConnectionSuccessfulcallback - fires when a bank connection is successfully established during the pay via bank flow. ProvidesGlomoPayViaBankConnectionPayload(bankIdentifier,cooldownPeriodInMinutes,bankName,bankImageSrc,bankImageAlt). This is informational only and does not change the checkout status.GlomoPayViaBankConnectionPayloadtype - new exported type for the bank connection callback payload.
- Repeat
start()calls with the same orderId no longer fail silently due to cached API responses. - Checkout dismissal now fully resets internal state, preventing stale UI on re-open.
Part of the v3 documentation.
- New unified component:
GlomoLrsCheckouthas been replaced byGlomoCheckout. The new component automatically detects the order type (LRS or Standard) and renders the appropriate checkout flow. start()is now async: ReturnsPromise<boolean>instead ofboolean. Update call sites toawait:const started = await checkoutRef.current?.start();- Renamed exports:
v2 v3 GlomoLrsCheckoutGlomoCheckoutGlomoLrsCheckoutRefGlomoCheckoutRefGlomoLrsCheckoutPropsGlomoCheckoutPropsGlomoLrsCheckoutPayloadGlomoCheckoutPayloadGlomoLrsServerGlomoServerLrsCheckoutStatusCheckoutStatususeLrsCheckoutuseGlomoCheckout - Removed exports: v2 LRS-specific names are no longer available.
- Standard checkout support - cards, bank transfers, pay via bank, and camera-based bank authentication flows, all through the same
GlomoCheckoutcomponent. No integration changes needed - the order type is detected automatically. onBankTransferSubmittedcallback - fires when the user submits bank transfer details in a standard checkout flow. ProvidesGlomoBankTransferPayload(orderId,senderAccountNumber,transactionReference).onPayViaBankCompletedcallback - fires when the pay via bank journey completes. Provides{ status: string }.onUserRefusedCameraPermissionscallback - fires when the user denies camera access during bank authentication (Android only). The checkout is dismissed automatically.detecting_order_typecheckout status - returned bygetStatus()while the SDK determines the order type.bank_transfer_submittedcheckout status - indicates a bank transfer has been submitted and is awaiting confirmation.pay_via_bank_completedcheckout status - indicates the pay via bank flow has completed.GlomoBankTransferPayloadtype - new exported type for the bank transfer callback payload.useGlomoCheckouthook - for advanced integration patterns needing direct access to order type detection state.
Checkout flows with camera-based bank authentication require native permissions:
- Android (
AndroidManifest.xml):<uses-permission android:name="android.permission.CAMERA" /> - iOS (
Info.plist):NSCameraUsageDescriptionkey
These are only required for flows that use camera-based bank authentication.
See the Migration Guide for upgrade instructions from v1.
Private v2 release candidate with experimental features. Not available for general use.
Backwards compatible with v1.x
Last v1 release. See v1 documentation.
LRS-only checkout via GlomoLrsCheckout component. Synchronous start() method. Device security compliance via optional jail-monkey integration.