Skip to main content
Official React Native client for Jaza (Expo or bare RN). Use this in your mobile app with your publishable key (jz_*_pk_*) and a client session from your backend (jaza.init → getSession / authEndpoint). Never put your secret key in the app. Server-side: @jazadev/node — init for the handshake, consume for debits. The SDK mints short-lived top-up JWTs internally; apps do not implement onRequestToken on the happy path.
Source and examples live on GitHub: @jaza-react-native. The Expo sample under example/ mirrors the full sign-in → init → top-up → consume path.

Install

Expo peers:

Expo config

Keep the phone field visible when the keyboard opens on Android:

Provider setup

Wrap the app outermost with GestureHandlerRootView, then JazaProvider. Prefer getSession (or authEndpoint).

Provider props (high level)

See Handshake.

Widgets and customization

Default UI works out of the box. Pass a children render prop to wrap your own components while reusing SDK state.

JazaBalance

JazaBalanceWidget remains as a deprecated alias.

JazaTopUpButton

Opens the bottom sheet using a session-minted top-up JWT (no onRequestToken).

JazaLedger

mode="scroll" needs peer @shopify/flash-list.

JazaActionButton

Gate only — never consume. See Gating actions.

What happens after Top up

  1. SDK calls POST /v1/client/top-ups with the session token
  2. Sheet opens → bundles and balance
  3. User picks bundle → phone, country, currency → quote
  4. Confirm → Jaza collects via Mobile Money → SDK polls
  5. Balance refreshes via GET /v1/client/wallet
You do not configure MoMo aggregators; Jaza handles collection and settlements.

Exports

Full path

Follow the Quickstart for Node BFF + React Native end-to-end.