Home / Developers
Nine SDKs that actually agree with each other.
A property you send from Swift means exactly what it means from Python, because every SDK implements one written protocol and the same conformance fixtures run against all of them. "It should behave the same" is a test here, not an assumption.
Install
Pick a language.
Offline queueing, batching and retries are built in. A dropped network becomes a delay, not a hole in your data.
Every SDK
Documentation, per language.
How it works
Five hops, and none of them lose your data.
Worth knowing before you commit a product's telemetry: this is the whole path an event takes, and what happens at each step when something fails.
- →Failures are visible, not silent. An event that genuinely cannot be processed is kept and surfaced with the reason, so "the numbers look low" has an answer.
- →Recovery does not depend on backups. Because the log is replayable, most storage incidents are resolved by re-reading it — losing nothing at all.
Questions engineers ask first
What does the SDK cost me in bundle size and latency?
The browser SDK is small and loads deferred; tracking calls are queued and flushed in batches on an idle callback, so they never block interaction. Flag evaluation is local — a flag check does not make a network request.
What happens if your ingest endpoint is down?
The SDK keeps events in a local queue and retries with backoff. Nothing is discarded because a request failed. On the server side, events land in a replayable log before they reach the warehouse, so an outage downstream of the queue is caught up rather than lost.
Can I send events without an SDK?
Yes. The HTTP ingest API is the same contract every SDK speaks, documented field by field and published as an OpenAPI specification. Anything that can POST JSON can be a client.
How do you stop one bad deploy flooding my data?
Keys are rate limited per workspace, events are validated against your schema on arrival, and rejections are surfaced with reasons rather than silently dropped — so a malformed release is visible within minutes instead of appearing as a mysterious gap.
Is the SDK naming consistent?
Not yet, and it is visible above: the JavaScript packages are published under @tangent/* while Python, Java, Go and Swift still carry selica-* names from an earlier iteration. Unifying them is on the list.