SDKs overview
One platform, ten SDKs. The web ships as a multi-package monorepo so you can pick what you need; mobile platforms ship every product in a single SDK; server SDKs focus on Catch + tracing.
Sankofa speaks to your code through SDKs. Every official SDK calls into the same engine using the event ingestion and (where applicable) the decision handshake protocols.
Pick the platform you want and follow its dedicated guide.
The asymmetric matrix
The matrix splits into three groups:
Web — multi-package
Seven small packages. Install only what you use. Tree-shakeable. Every product (Catch, Switch, Config, Pulse, Replay, React) is an optional plugin to
@sankofa/browser.Mobile — single SDK
Flutter, React Native, iOS, and Android each ship a single SDK that bundles every supported client product (Analytics, Catch, Switch, Config, Pulse, Replay). Of these, only React Native ships Deploy/OTA at the SDK level today.
Server — Catch-focused
Node, Go, Java, and Python SDKs focus on Catch (error tracking) plus distributed tracing. Server-side flag and config evaluation is not built into these SDKs — instead they accept optional
readFlagSnapshot/readConfigSnapshotcallbacks so captured error events can include flag context.
Multi-package
Web
@sankofa/browser (core), plus optional packages for Catch, Switch, Config, Pulse, Replay, and React hooks.
Single SDK
Flutter
sankofa_flutter on pub.dev. Six products bundled.
Single SDK + Deploy
React Native
@sankofa/react-native. The only mobile SDK shipping OTA Deploy.
Single SDK
iOS
Native Swift framework. Six products bundled.
Single SDK
Android
Kotlin-first library on Maven Central. Six products bundled.
Catch + tracing
Node
@sankofa/node. Express + Fastify subpath exports.
Catch + tracing
Go
Catch-focused; package name is sankofacatch.
Catch + tracing
Java
dev.sankofa:sankofa-catch on Maven Central. Servlet filter included.
Catch + tracing
Python
sankofa-catch on PyPI. WSGI + ASGI middlewares.
Tooling
CLI
sankofa-cli. Init, check, flags, config, deploy releases, demo seeding.
Feature × platform matrix
✓ = full support; ◐ = partial; — = not shipped at the SDK level.
A few specific notes from this matrix:
- A/B testing is built into Switch + Config. Switch flag variants and Config A/B item experiments share the same targeting engine — there's no separate "A/B Switch" product or SDK module.
- Deploy / OTA is React-Native only at the SDK layer. Native iOS / Android / Flutter SDKs do not export a
SankofaDeployclass today. Pure-native apps use Switch for feature gating + the platform's standard staged rollouts. - Pulse is mobile + web only. Server SDKs don't render UI, so they don't ship Pulse.
- Server SDKs are Catch-focused. They expose error capture, breadcrumbs, transactions, and profiling. They do not expose
Sankofa.flags.get(...)/Sankofa.config.get(...)calls — instead, they accept callbacks (readFlagSnapshot,readConfigSnapshot) that you wire to your own flag system, so error events can include flag context.
Where they're hosted
| SDK | Registry | Coordinates |
|---|---|---|
| Web — 7 packages | npmjs.com | @sankofa/{browser,catch,config,switch,pulse,replay-rrweb,react} (each 0.1.2) |
| Flutter | pub.dev | sankofa_flutter (0.1.0) |
| React Native | npmjs.com | @sankofa/react-native (0.1.0) |
| iOS | Swift Package Manager | SankofaIOS (Swift target name) |
| Android | Maven Central | dev.sankofa.sdk:sankofa-android:1.0.0 |
| Node | npmjs.com | @sankofa/node (0.1.0) — subpaths ./express, ./fastify |
| Go | Go modules | github.com/sankofa-hq/sankofa_sdk_go (package: sankofacatch) |
| Java | Maven Central | dev.sankofa:sankofa-catch:0.1.0 (JDK 11+) |
| Python | PyPI | sankofa-catch (0.1.0); import as sankofa_catch |
| CLI | npmjs.com | sankofa-cli (0.1.0) — binary: sankofa |
All SDKs are open source under permissive licenses. The Sankofa platform — engine, dashboard, admin — is proprietary; only the SDKs are open.
Common ground across all SDKs
Every SDK ships a consistent API for the basics:
Initialize once, as early as possible
init(orinitialize) takes anapiKeyand anendpoint. Subsequent calls are no-ops. Initialize before you fire any tracking calls.Capture errors with `captureException`
On the server SDKs and Web's
@sankofa/catch, this is the primary product call. On mobile, it's also available viaSankofaCatch.Track events (where supported)
Web and mobile SDKs expose
track(eventName, properties?). Server SDKs are Catch-focused — they capture errors, transactions, and breadcrumbs, but don't expose a generictrack(...).Flush before exit
Every SDK exposes
flush()(or equivalent) — drains the queue. Call it from your shutdown handler in long-running processes.
Common ground across all client SDKs (web + mobile)
Client SDKs (web, Flutter, RN, iOS, Android) share three more things that server SDKs do not:
- Offline-first event queue — events are durable across app restarts and survive network failures.
- Decision handshake at session start — one snapshot per session covers Switch flags + variants, Config items + A/B experiments, and Pulse triggers.
- Default property collection — geo, OS, device, browser, app version, session — added automatically.
Server SDKs use an in-memory queue, no decision handshake, and a smaller default-property set focused on the runtime + request context.