SDK
Overview

SDK — Overview

Lunixi publishes two SDK families. Both rest on the same platform contract; what differs comes from the environment they run in.

FamilyWhere it runsPage
WebThe browser — 7 separate bundlesWeb SDK
MobileiOS · Android — Flutter and React Native bridgesMobile SDK

True of both

🚫

The decision is never made on the client. An SDK produces and carries evidence; the server decides. Even a fully compromised client cannot fake a favourable outcome, because it is not the thing producing the outcome.

  • Not fail-open — a failed call does not silently return a pass; it throws. You own the fallback.
  • Environments are separated by key — the SDK talks to whichever environment its key was issued for. There is no separate configuration flag.
  • A secret is never present on the client — not in the browser, not in the mobile bundle.
  • The same error envelope and the same requestId correlation. → Error Handling

Why authentication differs

This is the one real difference:

WebMobile
Anchor of trustThe Origin header — set by the browser, unforgeable from the pageDevice attestation and token bindings
KeyPublishable key (mk_{environment}_pk_…)Session context plus the native collector

In a browser Origin exists and cannot be forged, so a publishable key plus an origin allow-list is a sufficient anchor. On mobile there is no Origin — so trust comes from the device proving itself, and from an action token bound to the device, the session and the challenge.

Which to pick

NeedFamily
Payment form, customer portal, pricing tableWeb
A card field without ever touching card dataWeb — Hosted Card Field
Identity verification in a browserWeb — KYC SDK
Transaction-time risk measurement in a mobile appMobile — Mobile Threat
Identity verification in a mobile appMobile — Native KYC (NFC plus attestation)

Where to start