Overview
Umami Mobile is a Rust-first, local-first analytics SDK that accepts events quickly, stores them in a bounded app-private SQLite queue, and uploads them when the scheduler has a safe opportunity. The Rust core owns validation, redaction, serialization, persistence, retries, consent, identity, and delivery state. Swift and Kotlin are intentionally thin overlays that add platform ergonomics and relay lifecycle, connectivity, and background-work hints. Status: 0.1.0, pre-1.0.
Features
- Durable SQLite queue as the source of truth for pending events
- One Rust policy engine shared by Apple and Android via a typed UniFFI contract
- SQLx-only SQL: no
rusqlite, Room queue, or second storage backend - At-least-once delivery with stable local event IDs for deduplication
- Bounded work: hard limits on event size, queue size (10k events / 10 MiB / 7 days), retries, and native upload leases
- Privacy by default: sensitive property keys redacted before storage, paths normalized without query strings
track()fast enqueue,track_durable()waits for commit,flush()for bounded delivery- WorkManager integration (
UmamiFlushWorker) that recreates the client after process death
Technology Stack
- Rust core (validation, scheduler, exporter, protocol, transport)
- UniFFI typed FFI façade
- SQLx + SQLite storage actor
- Swift package (
UmamiMobile) for iOS 17+ / macOS 14+ - Kotlin AAR (
dev.umami.mobile) with WorkManager - URLSession upload leases / Rust exporter