Desert Ant Labs

Telemetry

We count devices so we can bill for the ones past the free tier. We do not collect any personally identifiable information (PII).

We count devices, not people

Once a day, a device sends one event.

We also receive a count of inference calls. That number never touches your bill, because inference is unlimited.

The device id is a random v4 UUID the SDK writes on first run and keeps on the device. Nothing derives that id: not the hardware, not the network, not your account, and not anything a model read. Delete the app and the next install counts as a new device.

Every field we receive

The request body has a fixed structure, shown here in full. No field contains anything the model read or wrote.

FieldWhat it holdsExample
platformWhich kind of host ran the modelios, android, web, server
app.idThe app the SDK runs in: the bundle id on Apple, the package name on Android, the site's domain in a browser, the process name on a servercom.acme.notes
sdk.nameWhich SDK reportedclear
sdk.versionThe version of that SDK3.1.0
sentAtWhen the batch left the device, in UTC2026-09-09T08:30:23.412Z
deviceIdThe random UUID from first run8f14e45f-ceea-467a-9d31-1c2a0b2f8e77
callCountHow many inferences ran since the last event42
timestampWhen the event happened, in UTC2026-09-09T08:30:23.401Z
keyA publishable key, only if you have an account with usdal_kR2x9vT4...
contextIn a browser only: browser and OS names, a coarse OS version, desktop or mobile, and the page languageChrome 141, macOS, desktop, en-US

Only the browser SDK adds context, and every value it includes is already available to the website with each request. On Apple, Android, and servers, the report ends at the row above.

What never leaves the device

  • Everything you put into a model: Text, audio, images, and video are processed on the device, and none of it is uploaded.
  • Everything a model produces: Transcripts, labels, scores, boxes, and positions in your text stay on the device too.
  • None of this is included in our usage report.

When a device reports

On a phone or a desktop app, once every 24 hours. The first inference after that window opens carries the event.

In a browser, once per session, where a session ends after 30 minutes of no activity. Closing the tab flushes anything still pending, with navigator.sendBeacon.

On a server, the same daily event, and any later call counts are coalesced into one send per hour.

None of this blocks inference. The send is fire-and-forget on its own task, so model calls never wait on the network, and a report that fails never breaks a model call.

Where it goes

The server that receives the event and the object storage that keeps it both run in Nuremberg, Germany. Desert Ant Labs B.V. is registered in Amsterdam, and the GDPR is the law we build under.

The request carries no cookies, and the event we store has no IP address and no location field.

Offline and air-gapped

Some products can never reach us: an air-gapped install, a secure facility, a device with the radio off for good. We license those without telemetry. Let us know what you're building and we can discuss license costs.

Last updated 2026-09-09.