This quickstart shows the shortest path from package install to connecting to Mentra Live and reading glasses status.
Use a physical phone for Bluetooth testing. Simulators and emulators are useful for UI and compile checks, but they do not provide the real Bluetooth path.

Step 1: Install The SDK

bun add @mentra/bluetooth-sdk
bunx expo install expo-build-properties
Add the config plugin to your Expo app config. In most Expo apps this is the root app.json; in TypeScript-configured apps it is usually the root app.config.ts. Merge these keys into the existing top-level expo object instead of creating a second config file or replacing unrelated settings:
{
  "expo": {
    "plugins": [
      [
        "@mentra/bluetooth-sdk",
        {
          "node": true
        }
      ],
      [
        "expo-build-properties",
        {
          "android": {
            "minSdkVersion": 28,
            "packagingOptions": {
              "pickFirst": [
                "**/libc++_shared.so",
                "**/libonnxruntime.so",
                "**/libonnxruntime4j_jni.so"
              ]
            }
          }
        }
      ]
    ]
  }
}
Then generate and run a native build:
bunx expo prebuild
bunx expo run:ios
# or
bunx expo run:android

Step 2: Add Permissions

Configure permissions in the same root Expo app config. If your app already has android.permissions or ios.infoPlist, append or merge these values:
{
  "expo": {
    "android": {
      "permissions": [
        "android.permission.BLUETOOTH_SCAN",
        "android.permission.BLUETOOTH_CONNECT",
        "android.permission.ACCESS_FINE_LOCATION",
        "android.permission.RECORD_AUDIO",
        "android.permission.POST_NOTIFICATIONS"
      ]
    },
    "ios": {
      "infoPlist": {
        "NSBluetoothAlwaysUsageDescription": "This app connects to your smart glasses over Bluetooth.",
        "NSMicrophoneUsageDescription": "This app uses the microphone when you enable audio features.",
        "NSLocalNetworkUsageDescription": "This app can connect to optional local demo servers on your network."
      }
    }
  }
}

Step 3: Connect And Read Status

import BluetoothSdk, {DeviceModels} from '@mentra/bluetooth-sdk';

const devices = await BluetoothSdk.scan(DeviceModels.MentraLive, {
  timeoutMs: 10_000,
  onResults: (nextDevices) => {
    console.log('Nearby glasses:', nextDevices);
  },
});

const device = await chooseDevice(devices);
if (!device) {
  throw new Error('No Mentra Live glasses selected');
}

await BluetoothSdk.connect(device);
await BluetoothSdk.requestVersionInfo();
onResults is the live UI path while scanning is in progress. The returned devices array is the final list after the scan timeout/completion, which is the right place for final selection, fallback behavior, or “connect to this device” logic. In rooms with multiple pairs of glasses, present an explicit picker instead of auto-connecting to the first nearby device.Use Device.id as the stable app-facing key for scan rows, selected devices, and persisted default devices. Do not parse it for model, name, or address information; use the typed model, name, address / identifier, and rssi fields instead. Android commonly uses a Bluetooth address when available, iOS commonly uses a CoreBluetooth identifier when available, and the SDK falls back to model:name when no platform identifier is available.Device.rssi is optional. A device can appear in scan results before the platform reports RSSI, so picker UI should handle undefined and avoid reordering rows just because RSSI metadata arrives later.In React components, use useMentraBluetooth() to render the current connection and status state:
import {Text} from 'react-native';
import {useMentraBluetooth} from '@mentra/bluetooth-sdk/react';

export function GlassesConnectionLabel() {
  const mentra = useMentraBluetooth();

  if (!mentra.glasses.connected) {
    return <Text>Disconnected</Text>;
  }

  return <Text>Connected to {mentra.glasses.device.deviceModel || 'Mentra Live'}</Text>;
}

Next Steps

Run Example Apps

Start from complete Android, iOS, and React Native examples.

API Reference

Learn the lifecycle, commands, status fields, and events.