Skip to content

Choose your SDK

Three questions, one package, plus the constraints that rule options out.

Most of this decision is made for you. The package follows from where your code runs, and the language follows from what you already write. What is left is checking that your runtime qualifies and that the package covers what you need.

1. Where does the code run

It runsTakeBecause
On your serverA server SDKIt holds the secret key, so nothing is out of reach
In a browserWajub ComponentsIt renders and confirms a checkout
In a mobile appA mobile SDKIt renders a native payment sheet
On WordPressThe pluginNo integration code at all
Nowhere yetPayment Links or InvoiceA payable link, no code and no package
Somewhere with no packageThe REST APIEvery SDK is a wrapper over it

Most integrations use two: a server SDK to create the payment, and a browser or mobile package to collect it. That split is not a style choice, it is where the secret key is allowed to be.

Already know your stack?

Jump straight there. Node.js, Python, PHP, Go, Ruby, Java, C#, JS, React, Vue, Svelte, Flutter, React Native, Android.

2. Does your runtime qualify

This is the question that eliminates options. Versions and registries are on SDKs and Libraries.

Server

LanguagePackageNeeds at least
Node.js@wajub/nodeNode 18
PythonwajubPython 3.10, and httpx
PHPwajub/wajub-phpPHP 8.4, and Guzzle 8.2
Gogithub.com/wajubhq/wajub-goGo 1.22
RubywajubRuby 3.1, no runtime gems
Javacom.wajub:wajub-javaJava 17, and OkHttp
C# and .NETWajub.NET 8

Below the floor, call the REST API directly. It is HTTPS and JSON, and every endpoint on this site carries a raw example.

Browser

PackageNeeds at least
@wajub/jsA browser that understands ES2020, and an ESM bundler or the CDN script
@wajub/reactReact 18, React DOM 18
@wajub/vueVue 3.3
@wajub/svelteSvelte 4 as declared, see the warning below

All four need @wajub/js installed beside them. It is a peer dependency, not a bundled one.

Mobile

PackagePlatformNeeds at least
wajub_mobileFlutterDart 3.5, and flutter_stripe
@wajub/react-nativeReact NativeReact Native 0.74, React 18, @stripe/stripe-react-native and @react-native-community/netinfo
com.wajub:wajub-mobile-coreKotlin, any JVMJava 17, Kotlin 2.0
com.wajub:wajub-mobile-composeAndroidAndroid 7.0, API 24, and Jetpack Compose

Android ships as two artifacts, and you usually want both

wajub-mobile-core is a plain Kotlin and JVM library, no Android dependency, no manifest. It is the session client. wajub-mobile-compose is the Android archive that carries the Material 3 payment sheet and depends on the core. Take core alone only when you are building the payment interface yourself.

3. Does it cover what you need

Coverage follows from where the code runs, not from the language. All seven server SDKs expose the same eighteen resources under the same names, so there is no feature reason to prefer one.

ProductServer SDKsBrowserMobile
Paymentspayments, refunds, disputes, linksCheckout onlyPayment sheet only
BillinginvoicesNoNo
Transferstransfers, beneficiaries, balanceNoNo
Syncaccounts, plus a per request account referenceNoNo
ShieldshieldNoNo
TaxtaxNoNo

Alongside those sit customers, identity, events, webhooks, webhookEndpoints, listen and global, which every server SDK also carries.

A preview or beta label belongs to the product, never to the SDK. The clients do not gate anything, so shield and tax are callable from every language today. Whether the product behind them is ready for your account is on its own page.

Constraints worth knowing before you commit

Four things eliminate an option outright, and none of them is obvious from a package listing.

The Python package on PyPI is empty

wajub 1.1.1 ships only a py.typed marker. pip install wajub succeeds, import wajub raises ModuleNotFoundError. Until a fixed build is published, a Python backend talks to the REST API directly with httpx or requests.

There is no Swift package

Nothing native for iOS, and nothing on the public roadmap. Three paths work today.

PathEffortWhat you get
React NativeLowest, if the app is already React NativeThe full payment sheet
FlutterA cross platform rewriteThe same sheet
Hosted checkout in a WKWebViewLowest overallThe whole Wajub page, no dependency

If iOS is a hard requirement for a native experience, talk to support before you plan the work.

The Go module path is not what it looks like

The import path is github.com/wajubhq/wajub-go. The organisation is wajubhq, and github.com/wajub/wajub-go resolves to nothing.

The Android group is com.wajub

Both Android artifacts are published under com.wajub, not co.wajub. A Gradle coordinate on the wrong group simply fails to resolve.

Two more things to decide

Picking the package is not the same as picking the integration. Two separate choices remain, and both have their own page.

DecisionWhere
Hosted page, inline embed, overlay, or your own fieldsChoosing your payments integration
How API field names land in your languageSDK naming conventions

What did you think of this content?