Web Bluetooth talks to Bluetooth Low Energy devices such as heart-rate straps through GATT services. From a click, navigator.bluetooth.requestDevice({ filters: [{ services: ['heart_rate'] }] }) opens a chooser; then device.gatt.connect(), getPrimaryService('heart_rate'), getCharacteristic('heart_rate_measurement') and startNotifications() deliver characteristicvaluechanged events carrying a DataView. It runs in Chrome 70 1 + on desktop (off by default on Linux) and 56+ on Android, not in Firefox 555 or Safari 10 . Headless Chrome, with no adapter, resolves navigator.bluetooth.getAvailability() to false.