Skip to main content

Standalone React Native SDK sunset

Maintenance of @bota.dev/react-native-sdk ended on September 29, 2026. New integrations use @bota.dev/react-native-app-sdk@2.0.0-beta.12, which remains a prerelease. Existing standalone versions remain downloadable; retirement does not replace installed dependencies. Follow the migration guide and rebuild the native application. The old and new facades must not be co-installed. See the retirement decision and compatibility limits.

React Native App SDK beta.6 migration

Since beta.6, the React Native package consolidates current maintenance-source presence and upload recovery in @bota.dev/react-native-app-sdk. Pin the published exact version and rebuild native applications; changing a JavaScript bundle cannot install its native runtime. Publication status is recorded in the SDK release. Beta.7 retains this runtime and repairs Flutter publication staging. Existing verified beta.6 app binaries do not require rebuilding for that tooling change.
  • BotaClient.clientPresence.nextReport(deviceId) returns the snake_case SdkClientContext compatibility report. The modern BotaDeviceSDK facade retains its camelCase runtime report, now typed BotaClientPresenceContext.
  • readClientPresenceObservation binds a fresh host-supplied status read to the current SDK session. The host still checks authenticated account, project and binding before HTTP dispatch and discards disconnected, superseded or aged observations (120 seconds at the baseline 60-second cadence).
  • createUploadRecoveryProvider takes scoped host backend callbacks and always requires completion acknowledgement, even when status is already uploaded, before SDK native cleanup or device CONFIRM. Credentials are refreshed, never persisted. Apps must not move completion outside the SDK operation.
React Native consumers require Node 22+, React 19.2.3+ and React Native 0.86.3+ (below 1.0), with iOS 15.1+ or Android API 26+. The maintained native example uses Expo 57. Rebuild with a compatible native dependency matrix. Native file bytes and encrypted-v2 cryptography remain SDK owned. These helpers do not add an SDK backend client, independent heartbeat timer, or legacy JS byte-store support. The retired standalone @bota.dev/react-native-sdk package remains available for existing consumers; do not co-install the two facades.

Managed encrypted-v2 integration

React Native App SDK introduced createEncryptedUploadV2Backend in beta.11 on iOS/Android. Use 2.0.0-beta.12 for the native resume recovery fixes below. The helper packages the native backend adapter previously implemented by Demo; beta.10 does not include it. Customers supply their HTTPS backend prefix, fresh app-token callback, stable account/project/EndUser identity and a lifetime AbortSignal. Each sync also supplies the device ID and binding generation. The SDK manages native HTTP, session journals, exact manifest replay and publication polling. See the integration example and requirements. The application must abort on account/project/binding changes and trigger sync after reconnect/restart. The native journal reuses the same recording/session; an accepted manifest avoids another ciphertext PUT. Pending verification never permits deletion. Cleanup requires the exact signed receipt and native CONFIRM. Polling is bounded and retains state on timeout or a transient backend failure. After that attempt ends, the host must trigger the next sync, such as after reconnect/restart; the helper does not guarantee a scheduled retry or OS background execution. An unknown initial create outcome remains parked to avoid duplicates. Your backend must expose the existing authenticated v2 recording/session/context routes and preserve their response codes and bodies. No new Bota API schema is required for an existing v2 proxy. Legacy-only proxies need those routes, and applications need a native rebuild plus this helper’s one-time wiring. For an already-wired v2 integration, upgrading to beta.12 requires a native rebuild and app release; its backend proxy contract stays the same. Existing custom native providers remain supported and must preserve their scoped journal and recovery callbacks. This does not enable firmware v2 gates.

Beta.12 release

App SDK 2.0.0-beta.12 is published for Apple, Android, React Native, Flutter and Web. The release workflow passed public native consumer checks and exact Flutter archive verification. npm beta is beta.12; latest remains beta.0. See the publication and acceptance record. On Android, it fixes handling of manifest/EOF immediately after accepting a retained checkpoint with complete ciphertext. That path previously failed with unexpected_event before backend reconciliation. Android and Apple receivers also validate packet sequences within the current transport attempt, separately from the saved byte checkpoint. This corrects partial resumes that restart DATA numbering and complete resumes that send no DATA and report EOF sequence zero. Exact identity, checkpoint, complete-file and manifest hashes, EOF sequence and signed-receipt checks remain required. These fixes do not change the Bota API or authorize deletion from an upload status alone. See the recovery review. Rebuild and release the native application to install these fixes; a JavaScript OTA update is insufficient. Beta.12 also includes failed connect/MTU cleanup, but does not establish a fix for every Bluetooth connection failure. Android testing recovered one retained, already-published recording after restarting Demo: the original cloud identity, plaintext hash and signed receipt remained valid, and the local journal and device pending count cleared. This does not measure repeated PUTs or qualify partial-transfer interruption, other apps or Apple hardware. Firmware rollout and device qualification remain separate from SDK publication.

Beta.11 release

App SDK 2.0.0-beta.11 was published as a synchronized prerelease for Apple, Android, React Native, Flutter and Web. Publication, public native consumers and complete Flutter archive verification passed in the release workflow. At that release, npm beta advanced to beta.11; latest remained beta.0. See the publication and acceptance record. The managed backend helper is React Native-only. Standalone native, Flutter and Web integrations retain custom providers. Package publication does not rebuild installed applications, enable device rollout flags or establish physical interruption acceptance.

Beta.10 release and example adoption

App SDK 2.0.0-beta.10 is the complete synchronized prerelease for Apple, Android, React Native, Flutter and Web. Maven Central, npm, SwiftPM, CocoaPods and pub.dev publication and the public native/Flutter consumer checks passed in the release workflow. CocoaPods registration and CDN readiness are verified, and the public Flutter archive matches the preserved release candidate. The earlier publication timeouts are resolved for this release. See the publication record. Pin beta.10 exactly and rebuild native applications after upgrading. Beta.10 closes the exact Android native session when an explicit disconnect times out or is cancelled without a platform callback. It clears connection and presence state while preserving a replacement session and its queued work. This narrow fix does not establish the cause or resolution of the separate Flutter GATT 8/133 failures observed on beta.9. All five independent connection examples pin beta.10. The Flutter example passes locked installation, analysis and its six UI lifecycle tests; its beta.10 native-build and physical acceptance are tracked separately in the review. On Samsung SM-A166U1 / Android 16 / Bota Pin firmware 1.0.19, the public beta.10 RN lab passed three automatic radio-loss clears and three first explicit reconnects with fresh status, plus graceful disconnect/reconnect. These foreground checks cover one phone/device/firmware pair; a missing disconnect callback was not physically induced. See the bounded acceptance review for artifacts and remaining platform/build checks. No automatic reconnect or general GATT 8/133 recovery is claimed.

Bluetooth-loss recovery in beta.9

App SDK 2.0.0-beta.9 handles Android adapter shutdown even when the platform omits a GATT disconnect callback. It closes the exact native session, settles pending operations and cancelled connects, and reports loss through native, React Native and Flutter connection listeners. Late cleanup from an old session cannot erase its replacement. Apps should clear stale connection/status UI when their listener reports loss. Rebuild native apps, restore Bluetooth, scan and explicitly reconnect to the verified serial before reading fresh status. This release adds no automatic reconnect loop and does not authorize BLE upload fallback: a lost phone link does not establish that the device’s WiFi/4G upload has stopped. All five public packages and native/Flutter consumers passed the release workflow. At beta.9 adoption, all five independent connection examples pinned beta.9 and passed hosted builds. On Samsung SM-A166U1 / Android 16 / Bota Pin firmware 1.0.19, RN and Flutter each cleared stale state automatically on all three radio shutdowns. RN passed all three first reconnects. Flutter passed two; the third dropped with GATT 8, then an immediate retry failed with 133. A fresh scan/reconnect recovered verified identity and fresh status in the same app session without another radio cycle. First-attempt reliability remains partial; this is not a general GATT 133 fix. See the exact example acceptance review. Earlier candidate results remain separate evidence. Physical iPhone/macOS/Web, background, out-of-range, other phone/firmware combinations and transfer interruption remain outside this Android connection check.

Historical beta.8 acceptance

App SDK 2.0.0-beta.8 forwards confirmed Android Bluetooth connection loss through the native connection stream and React Native disconnection event, including when the app has no status subscription. The SDK invalidates the verified connection and client-presence state; apps should clear stale selection and status when their connection listener reports loss. Flutter consumes the same native stream. Rebuild native applications after upgrading. Restore Bluetooth and explicitly reconnect to the verified serial before reading fresh status. This fix does not add automatic reconnect attempts or authorize BLE upload fallback: losing the phone link does not prove that a device’s WiFi/4G upload has stopped. Beta.8 phone acceptance was partial: Kotlin passed radio-off and explicit reconnect on the tested Android 16 device, while React Native reconnect failed with GATT 133 and Flutter missed one radio-off event. Android can clean up a GATT client without the disconnect callback consumed by beta.8, leaving stale state. The beta.9 adapter-off fix addresses this missing callback path; wider connection reliability still needs separate acceptance. See the release evidence and the example acceptance review for exact build and hardware coverage. Physical iOS/macOS/Web, background and out-of-range behavior remain separate acceptance checks.

Mobile SDKs

The Bota App SDK family provides device communication and native recording transfer through synchronized Apple, Android, React Native, Flutter and Web packages. The last complete synchronized release is 2.0.0-beta.12, a prerelease.

React Native

Remove the retired standalone dependency before adding the replacement:
Follow the migration guide for imports, native setup and host callbacks, then rebuild the native app. This migration changes the native runtime and cannot be delivered as a JavaScript-only update. Legacy JavaScript byte stores are not supported.

React Native App SDK

Current package; install an exact version

App SDK source and guides

Platform integration and migration documentation
The new RN/Web packages use beta for 2.0.0-beta.12; their latest tags remain at 2.0.0-beta.0. The retired standalone package retains latest=0.0.67 and beta=1.2.0-beta.11. Retirement does not move those tags or remove old versions. Historical standalone API examples remain in the archived repository.

Native iOS and Android

The native Apple and Android packages are available as synchronized App SDK beta artifacts. Native registries do not use npm dist-tags, so pin the exact beta version. For iOS 15+ and macOS 13+, add the BotaAppSDK Swift package product:
For Android API 26+, add the Maven Central artifact:
Historical 1.1.0 packages remain unchanged. The renamed synchronized release is 2.0.0-beta.12. Source and release notes are in the Bota App SDK repository.

Flutter And Web App SDKs

For Flutter on iOS 15+ or Android API 26+:
For foreground Web Bluetooth in supported desktop Chromium browsers:
Flutter delegates to the exact native SDK versions. Web requires a secure context and a user gesture for its device picker; browser background operation is unsupported. See the platform guides and capability matrix before integrating backend callbacks or performing device-changing operations. Published packages and automated consumer builds do not establish physical device acceptance or upgrade existing applications automatically.
Browser connection compatibility: Chrome blocks the standard Serial Number characteristic (0x2A25). Since beta.7, App SDK uses a read-only Bota Identity service (B07A0008-0000-1000-8000-00805F9B34FB), serial characteristic (B07A0008-0001-1000-8000-00805F9B34FB), returning the same stored serial. Both matching firmware and the updated Web package are required; historical beta.1 does not contain this fix. A local Chrome connection and snapshot Refresh passed with matching flashed firmware; broader physical device-workflow acceptance remains separate from publication. After upgrading, select the device in the picker again to grant access to the new service. Missing support fails closed; do not disable browser protections or substitute the device name for its serial. Native SDK serial reads are unchanged.

Server SDKs

Server SDKs for backend integration with the Bota API.

Node.js / TypeScript (Coming Soon)

Python (Coming Soon)

Go (Coming Soon)

Example Apps

Choose a focused example and follow its own README. Each installs independently. React Native, Web, Kotlin, SwiftPM and Flutter examples pin App SDK 2.0.0-beta.10. Example build results and physical acceptance are tracked in the verification review separately from the completed SDK publication. Beta.10 remains a prerelease. Backend API examples use ordinary HTTP clients while the separate API SDK family remains planned.

Upload and transcribe: Node.js

Upload local audio, verify server SHA-256 completion, and retrieve a transcript.

Upload and transcribe: Python

The same server-side workflow using the Python standard library.

Receive webhooks

Verify raw-byte signatures and commit events to a durable SQLite inbox.

List recordings

Follow cursor pagination with a page cap and print selected recording metadata.

Download a recording

Download original stored bytes with size limits, credential isolation and no file overwrite.

Search transcript excerpts

Retrieve timestamped excerpts for a configured end user and verify recording ownership.

Summarize a transcription

Generate structured JSON and resume the saved summary job with a Node.js CLI.

React Native connection

Discover a device, verify its exact serial, read status, and disconnect.

Swift connection

A macOS SwiftUI application consuming the public Swift package.

Kotlin connection

A native Android application consuming the Maven Central package.

Android recording catalog

Verify a device’s serial and list recording metadata without transferring audio.

Flutter connection

An Android Flutter application consuming the pub.dev package.

Web connection

A desktop Chromium example using Web Bluetooth and the SDK’s WASM package.

Android encrypted recording sync

React Native and an authenticated local backend for an already-provisioned device.
The Node.js and Python API flows are live-verified with synthetic speech in a dedicated test project. Automated checks and native builds are recorded in the verification review. Physical-device acceptance and hosted webhook delivery remain separate checks. Keep Bota API keys on the server; connection-only examples need no API key. The Android catalog uses a fresh public SDK pairing-state read before allowing metadata access. In beta.10, the Android connection snapshot’s isProvisioned field defaults to false; do not interpret that snapshot alone as a fresh device observation. A paired result also does not establish cloud project ownership. The Android recording-sync example uses public App SDK beta.10 and encrypted upload v2 only. It verifies the configured physical serial and current binding, keeps upload material native, retains cloud identity in a durable server journal, and requests transcription separately after verified cloud publication. The backend is a loopback-only, fixed-user test service with a separate app token; the Bota project key stays on the server. Session creation with an unknown outcome stops for reconciliation rather than creating another upload owner. See its setup and acceptance limits for local checks, required firmware capabilities, and outstanding live/physical verification. This bounded example does not implement first binding, reset, recording control, or automatic WiFi/4G fallback.
The repository also retains a legacy React Native/backend compatibility pair. Its backend has no caller authentication and is local-only. Its raw-token provisioning flow does not implement target prepare/provision/confirm binding. The full recording-sync replacement remains blocked on protected first-bind integration and wider recovery/hardware acceptance. The already-provisioned Android example does not retire this legacy pair; see the review before choosing that workflow.

Using the OpenAPI Spec

Until official server SDKs are published, you can generate clients from our OpenAPI specification:
Tools like openapi-generator or Speakeasy work well with our spec.