The SDK presents a common native API over multiple glasses models. Capabilities differ by model and firmware, so apps should treat advanced features as optional.
  1. Ask the user which glasses model they are pairing.
  2. Call scan() for that model.
  3. Present typed discovered devices from the progressive scan results.
  4. Connect using the discovered device or default-device helper.
  5. Read shaped glasses state, firmware fields, and capability-related status before enabling advanced features.
  6. Keep app UI derived from SDK status rather than from command success alone.
import BluetoothSdk, {DeviceModels} from '@mentra/bluetooth-sdk';

const devices = await BluetoothSdk.scan(DeviceModels.MentraLive, {
  timeoutMs: 10_000,
  onResults: (nextDevices) => renderDevicePicker(nextDevices),
});

await BluetoothSdk.connect(await chooseDevice(devices));
In multi-device environments, keep the picker explicit. Do not auto-connect to the first scan result; let the user choose the glasses they expect.

Capability Areas

  • Display: text, dashboard, head-up angle, and screen enable/disable commands.
  • Input: button, touch, head-up, and switch events.
  • Audio: PCM, LC3, audio pairing, preferred microphone, and local transcription.
  • Camera: photo, gallery, video recording, and streaming.
  • Network: Wi-Fi scan, credentials, and hotspot state.
  • Maintenance: model-specific version info.

Model Differences

Treat each advanced feature as optional. Your app should degrade gracefully if a model does not support camera, Wi-Fi, display batching, local transcription, streaming, RGB LEDs, or controller pairing.
ModelDisplayCameraMicrophoneSpeakerPrimary strengths
Mentra LiveNoYesYesYesCamera, microphone, speaker, Wi-Fi, streaming, phone-connected workflows
G2YesNoYesNoDisplay and glanceable UI workflows
Unsupported operations are recoverable SDK errors. Reconcile command failures with the latest status snapshot before showing destructive UI.

Connection Resilience

  • Subscribe to status callbacks before connecting.
  • Retry scans manually from the UI instead of scanning forever in the background.
  • On mobile OS background transitions, expect Bluetooth behavior to vary by platform.
  • Provide a visible “forget device” path that clears both the SDK default device and any app-persisted default-device record.
  • If your app persists a default device, restore it with setDefaultDevice() before calling connectDefault().