vitalera SDK v2 — Kotlin Multiplatform for 30+ Medical Devices
The Vitalera SDK v2 is a Kotlin Multiplatform (KMP) library that provides a unified API for integrating medical devices on Android and iOS. It replaces the v1 monolithic SDK with a modular, provider-based architecture.
Key Features
- Modular Provider System: Include only the device integrations your app needs. Each device vendor (Omron, Polar, Lifevit, Beurer, etc.) is a separate provider module.
- Kotlin Multiplatform: Shared codebase across Android and iOS with platform-specific BLE and crypto implementations.
- Typed Observations: 30+ typed observation classes (e.g.,
BloodPressureObservation,HeartRateObservation) replace the genericObservationmodel from v1. - Flow-Based Discovery: Device scanning uses Kotlin
Flow(Android) andAsyncSequence(iOS) with built-in timeouts and filtering. - DPoP Authentication: Organization license keys with DPoP-bound OAuth2 tokens. 7-day offline grace period with cached entitlements.
- Connected Mode: Optionally resolve patients and post observations directly to the Vitalera backend.
- Standard BLE Fallback: Devices using standard Bluetooth SIG health profiles (Blood Pressure, Heart Rate, etc.) work automatically without a vendor-specific provider.
Architecture
Platform Support
| Platform | Min Version | Distribution |
|---|---|---|
| Android | API 24 (Android 7.0) | Maven (GitHub Packages) |
| iOS | 14.0 | Swift Package Manager |
Modules
| Module | Android Artifact | iOS SPM Product | Description |
|---|---|---|---|
| Core | com.vitalera:sdk-core | VitaleraSdkCore | Builder, auth, registry, observation types |
| BLE | com.vitalera:sdk-ble | VitaleraSdkBle | BLE abstraction, standard profiles |
| Omron | com.vitalera:provider-omron | VitaleraSdkProviderOmron | Blood pressure, thermometer |
| Polar | com.vitalera:provider-polar | VitaleraSdkProviderPolar | Heart rate (H10, Verity Sense) |
| Lifevit | com.vitalera:provider-lifevit | VitaleraSdkProviderLifevit | BPM, oximeter, scale |
| Beurer | com.vitalera:provider-beurer | VitaleraSdkProviderBeurer | BPM, oximeter |
| Smart Peak Flow | com.vitalera:provider-smart-peak-flow | VitaleraSdkProviderSmartPeakFlow | Audio-based peak flow |
| HealthKit | N/A | VitaleraSdkProviderHealthKit | Apple HealthKit (iOS only) |
| Health Connect | com.vitalera:provider-health-connect | N/A | Android Health Connect |
| Umbrella | com.vitalera:sdk-android | VitaleraSdk | All providers included |
Quick Start
// 1. Initialize SDK with DPoP auth
val sdk = VitaleraSdk.builder()
.clientId("your-org-license-key")
.addProvider("omron")
.addProvider("polar")
.connectedMode(true)
.build()
// 2. Discover devices
val filter = DiscoveryFilter(
capabilities = setOf(DeviceCapability.BLOOD_PRESSURE)
)
sdk.devices.discover(filter, timeoutMs = 15_000L).collect { descriptor ->
println("Found: ${descriptor.name} (${descriptor.provider})")
}
// 3. Connect and collect typed observations
val device = sdk.devices.createDevice(descriptor)
device.connect()
device.collect().collect { observation ->
when (observation) {
is BloodPressureObservation ->
println("BP: ${observation.systolic}/${observation.diastolic}")
is HeartRateObservation ->
println("HR: ${observation.heartRate} bpm")
}
}
device.disconnect()
// 4. Cleanup
sdk.close()
Getting Started
- Android: See the Android Overview, Installation, and Usage guides.
- iOS: See the iOS Overview, Installation, and Usage guides.
- Migrating from v1: See the migration guide in the SDK reference documentation.
- Device support: See the Device Integration Guides for setup instructions per device.
Support
Contact sdk@vitalera.com for license keys or technical support.