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_caseSdkClientContextcompatibility report. The modernBotaDeviceSDKfacade retains its camelCase runtime report, now typedBotaClientPresenceContext.readClientPresenceObservationbinds 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).createUploadRecoveryProvidertakes scoped host backend callbacks and always requires completion acknowledgement, even when status is alreadyuploaded, before SDK native cleanup or deviceCONFIRM. Credentials are refreshed, never persisted. Apps must not move completion outside the SDK operation.
@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 introducedcreateEncryptedUploadV2Backend 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 SDK2.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 SDK2.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 SDK2.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 SDK2.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 SDK2.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 is2.0.0-beta.12, a prerelease.
React Native
Remove the retired standalone dependency before adding the replacement:React Native App SDK
Current package; install an exact version
App SDK source and guides
Platform integration and migration documentation
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 theBotaAppSDK Swift package product:
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+: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 SDK2.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.
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.

