Documentation and example apps for connecting to smart glasses directly from mobile apps over Bluetooth, powered by MentraOS. This is the supported Mentra Bluetooth SDK for mobile apps and works with MentraOS compatible glasses, including Mentra Live, Even Realities, Vuzix Z100, NIMO, and more.
The SDK is available in three first-class forms:
| Platform | Package | Example |
|---|---|---|
| Android | com.mentraglass:bluetooth-sdk |
examples/android |
| iOS | MentraBluetoothSDK Swift package |
examples/ios |
| React Native / Expo | @mentra/bluetooth-sdk |
examples/react-native |
Use the latest SDK version published by Mentra for your app. This repo can be cloned and used without any local path to the MentraOS source tree.
Read the first-party Mentra Live Bluetooth SDK docs.
- Read Getting Started for install, permissions, and minimal connection flows.
- Run the example that matches your app stack:
- Keep API Reference, Display Guide, Audio Guide, and Hardware Integration Notes nearby while building.
- Use Troubleshooting and the Production Checklist before shipping.
Every commit on main publishes installable builds of the example apps to GitHub Releases, grouped by Bluetooth SDK version: the sdk-<version> release always carries the latest build of each example for that SDK version.
From the release matching your SDK version (e.g. sdk-0.1.20), download:
mentra-example-android.apk— native Android examplementra-example-react-native.apk— React Native examplementra-example-rn-elevenlabs-audio.apk— React Native ElevenLabs audio examplementra-example-ios-unsigned.ipa— native iOS example
Android APKs install directly from the phone browser (enable installs from unknown sources when prompted). The iOS IPA is unsigned; install it with a sideloading tool such as Sideloadly or AltStore, which re-signs it with your own Apple ID. Pull-request builds are also available for 90 days as run artifacts on each workflow run.
- Scanning for supported Mentra glasses, connecting, disconnecting, and reconnecting to a saved/default device.
- Reading typed lifecycle state for glasses, SDK runtime, and scan progress.
- Displaying text, clearing the display, and opening the dashboard on display-equipped models such as G2.
- Checking Mentra Live OTA availability and showing update progress/status.
- Handling button, touch, swipe, head-up, battery, Wi-Fi, hotspot, stream, photo, video upload, OTA, audio, and SDK diagnostic events.
- Controlling model-supported features such as brightness, dashboard position, head-up angle, gallery mode, button photo/video settings, speaker playback, RGB LED patterns, Wi-Fi, hotspot, microphone, camera capture settings, and streaming.
- Running local media upload and RTMP/SRT/WebRTC streaming demos from a fresh clone.
docs/getting-started.md: package install and first connection for Android, iOS, and React Native.docs/api-reference.md: public API shape, command/event lifecycle, and cross-platform model names.docs/display-guide.md: text, dashboard, and display-related settings.docs/audio-guide.md: microphone events, LC3/PCM, local transcription, playback route, and glasses media volume.docs/hardware-integration.md: model differences and capability gating.docs/mentra-live-ble-wire-protocol.md: Mentra Live BLE wire v2, K900 endian negotiation, and SDK/firmware pairing notes.docs/production-checklist.md: release-readiness checklist.docs/troubleshooting.md: build, permission, scan, stream, and React Native issues.examples/local-demo-cloud: recommended local helper for media upload and stream preview.examples/react-native-elevenlabs-audio: focused Mentra Live PCM to ElevenLabs WebSocket repro app.examples/photo-webhook-server: focused media upload webhook server.examples/local-webrtc-server: lower-level MediaMTX helper.
Published package installs are the normal SDK path. Local overrides are only for SDK development before a release is published:
- Android: publish
com.mentraglass:bluetooth-sdkand its companion artifacts to Maven local, then build the example withmavenLocal()enabled. - iOS: point Xcode at a local Swift package checkout when testing unpublished Swift SDK source changes.
- React Native: keep the published package pinned for clean checkouts, then
locally symlink
node_modules/@mentra/bluetooth-sdkto an SDK source checkout and setMENTRA_BLUETOOTH_SDK_PACKAGE_PATHso Metro and native builds resolve the same package.
The example READMEs document each override explicitly. Do not bake machine-specific paths into committed app config.