> ## Documentation Index
> Fetch the complete documentation index at: https://developer.neurofit.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Release notes for the NEUROFIT Vitals SDK.

## 1.0.0 (2026-09-30)

First release. Engine 1.3.0, the same engine and defaults as the NEUROFIT app's Vitals feature.

**Platforms**

* iOS 15+: Swift package `NeurofitVitals`, delivered as an xcframework (binary license) or Swift package sources
  (source license; building the sources needs Xcode 16 or newer). No dependencies beyond Apple frameworks.
* Android 9+ (API 28): Kotlin AAR `com.neurofit:vitals-sdk:1.0.0`, CameraX 1.5.0, JVM 17, explicit API. Events
  and state are emitted on the SDK's engine thread; `start()` runs on the main thread.
* Wrappers: `@neurofit/vitals-react-native`, `neurofit_vitals` (Flutter), `@neurofit/vitals-capacitor`
  (Capacitor 6).
* Sample apps: SwiftUI (`com.neurofit.vitals.sample`) and Android Views (`com.neurofit.vitals.sample`).

**Metrics**

* Heart rate, HRV (RMSSD), SDNN, Baevsky stress index, Poincaré SD2:SD1, breathing rate with confidence,
  quality tier (`clean`, `usable`, `withheld`), flags and diagnostics.
* Accelerometer-assisted breathing rate (`motionBreathing`, on by default).
* `VitalsChange.compare` with provisional per-metric thresholds.

**Reading**

* One state machine on both platforms: `idle`, `positioning`, `measuring`, `finalizing`, `completed`, `failed`,
  with automatic re-arm after a cancel.
* Guidance values `noContact`, `lowQuality`, `weakSignal`, `compliant`, `frameDrop`; live preview about once per
  second with a provisional HRV (RMSSD) from about 20 s and a provisional breathing rate from about 30 s;
  heartbeat events; `abortRisk` ahead of the 35 s discard-deadline cancel.
* iOS reconfigures the camera in place across the 60/30/20 fps tiers; both platforms recover from one
  recoverable camera error (`VitalsRecoverableError`) per session before failing.
* Backgrounding (iOS) or the lifecycle owner's `ON_STOP` (Android) during a reading fails the session with
  `interrupted`; a cancel with `autoRestartAfterCancel` off leaves the session idle and restartable.
* Camera permission helpers on both platforms (`cameraAuthorization` / `requestCameraAccess()` on iOS;
  `hasCameraPermission` / `requestCameraPermission` on Android).

**Licensing**

* Offline license keys (`NFV1.` format, ECDSA P-256), verified against a public key compiled into the SDK.
  Perpetual license with `updatesUntil` maintenance semantics. The app-identifier check is relaxed to a warning
  for debuggable Android apps (runtime) and for Debug builds of the iOS SDK sources (compile time).

**Privacy**

* No network calls, no persistence, no telemetry. `PrivacyInfo.xcprivacy` declares no tracking and no collected
  data types. Camera frames are analysed in memory and discarded.

**Validation**

* 30 participants, 265 accepted readings against a Polar H10 chest strap: heart rate 0.46 bpm mean absolute error;
  HRV (RMSSD) 3.39 ms, r 0.979, 94.7% within 10 ms. See [Metrics](/metrics).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.