Web Bluetooth API

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

The Web Bluetooth API provides the ability to connect and interact with Bluetooth Low Energy peripherals.

Note: This API is not available in Web Workers (not exposed via WorkerNavigator).

Interfaces

Bluetooth

Provides methods to query Bluetooth availability and request access to devices.

BluetoothCharacteristicProperties

Provides properties of a particular BluetoothRemoteGATTCharacteristic.

BluetoothDevice

Represents a Bluetooth device inside a particular script execution environment.

BluetoothRemoteGATTCharacteristic

Represents a GATT Characteristic, which is a basic data element that provides further information about a peripheral's service.

BluetoothRemoteGATTDescriptor

Represents a GATT Descriptor, which provides further information about a characteristic's value.

BluetoothRemoteGATTServer

Represents a GATT Server on a remote device.

BluetoothRemoteGATTService

Represents a service provided by a GATT server, including a device, a list of referenced services, and a list of the characteristics of this service.

Extensions to other interfaces

The Bluetooth API extends the following APIs, adding the listed features.

Returns a Bluetooth object for the current document, providing access to Web Bluetooth API functionality.

Security considerations

The Web Bluetooth API can only be used in a secure context.

Access to the API is controlled by the Permissions Policy directive bluetooth. The default allowlist for the bluetooth policy is self, which enables Bluetooth usage in same-origin nested frames but prevents access by third-party content by default. Cross-origin access is enabled by specifying the allowed origins in both the Permissions-Policy: bluetooth HTTP header and the desired <iframe>.

In order to use the feature the user must first grant explicit permission (they will not be prompted for access if it is not allowed for other reasons, such as being blocked by a Permissions Policy). The permission prompt is displayed when calling Bluetooth.requestDevice() to request access to a new Bluetooth device for which permission is not granted (the owning global object must also have transient activation). You can use Bluetooth.getDevices() to retrieve any devices that have previously been granted permission for the site.

The Permissions API navigator.permissions.query() method can be used with the bluetooth permission to test whether a site has permission to use Bluetooth devices. The permission state will be granted, denied or prompt (requires user acknowledgement of a prompt):

js
const btPermission = await navigator.permissions.query({ name: "bluetooth" });
if (btPermission.state !== "denied") {
  // Do something
}

Specifications

Specification
Web Bluetooth
# bluetooth

Browser compatibility

desktop mobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Bluetooth
Experimental
Chrome – Partial support
Chrome 56 – 69 (Release date: 2017-01-25)
footnote Partial support
footnote Only supported on macOS.
Chrome – Partial support
Chrome 70 (Release date: 2018-10-16)
footnote Partial support
footnote Linux support is not enabled by default.
Edge – Partial support
Edge 79 (Release date: 2020-01-15)
footnote Partial support
footnote Linux support is not enabled by default.
Firefox – No support
Firefox
footnote
footnote See bug 674737
Opera – Partial support
Opera 43 – 56 (Release date: 2017-02-07)
footnote Partial support
footnote Only supported on macOS.
Opera – Partial support
Opera 57 (Release date: 2018-11-28)
footnote Partial support
footnote Linux support is not enabled by default.
Safari – No support
Safari
footnote
footnote See bug 101034
Chrome Android – Full support
Chrome Android 56 (Release date: 2017-02-01)
footnote Full support
Firefox for Android – No support
Firefox for Android
footnote
footnote See bug 674737
Opera Android – Full support
Opera Android 43 (Release date: 2017-09-27)
footnote Full support
Safari on iOS – No support
Safari on iOS
footnote
footnote See bug 101034
Samsung Internet – Full support
Samsung Internet 6 (Release date: 2017-08-23)
footnote Full support
WebView Android – No support
WebView Android
footnote
footnote See bug 40703318
WebView on iOS – No support
WebView on iOS
footnote
footnote See bug 101034
getAvailability
Experimental
Chrome – Full support
Chrome 78 (Release date: 2019-10-22)
footnote Full support
Edge – Full support
Edge 79 (Release date: 2020-01-15)
footnote Full support
Firefox – No support
Firefox
footnote
footnote See bug 674737
Opera – Full support
Opera 65 (Release date: 2019-11-13)
footnote Full support
Safari – No support
Safari
footnote
footnote See bug 101034
Chrome Android – Full support
Chrome Android 78 (Release date: 2019-10-22)
footnote Full support
Firefox for Android – No support
Firefox for Android
footnote
footnote See bug 674737
Opera Android – Full support
Opera Android 56 (Release date: 2020-02-06)
footnote Full support
Safari on iOS – No support
Safari on iOS
footnote
footnote See bug 101034
Samsung Internet – Full support
Samsung Internet 12 (Release date: 2020-06-19)
footnote Full support
WebView Android – No support
WebView Android
footnote No support
WebView on iOS – No support
WebView on iOS
footnote
footnote See bug 101034
getDevices
Experimental
Chrome – No support
Chrome 85 (Release date: 2020-08-25)
disabled
disabled From version 85 users must explicitly set the #enable-experimental-web-platform-features preference to enabled. To change preferences in Chrome, visit chrome://flags.
Edge – No support
Edge 85 (Release date: 2020-08-27)
disabled
disabled From version 85 users must explicitly set the #enable-experimental-web-platform-features preference to enabled. To change preferences in Edge, visit about:flags.
Firefox – No support
Firefox
footnote
footnote See bug 674737
Opera – No support
Opera 71 (Release date: 2020-09-15)
disabled
disabled From version 71 users must explicitly set the #enable-experimental-web-platform-features preference to enabled. To change preferences in Opera, visit opera://flags.
Safari – No support
Safari
footnote
footnote See bug 101034
Chrome Android – No support
Chrome Android 85 (Release date: 2020-08-25)
disabled
disabled From version 85 users must explicitly set the #enable-experimental-web-platform-features preference to enabled. To change preferences in Chrome Android, visit chrome://flags.
Firefox for Android – No support
Firefox for Android
footnote
footnote See bug 674737
Opera Android – No support
Opera Android
footnote No support
Safari on iOS – No support
Safari on iOS
footnote
footnote See bug 101034
Samsung Internet – No support
Samsung Internet
footnote No support
WebView Android – No support
WebView Android
footnote No support
WebView on iOS – No support
WebView on iOS
footnote
footnote See bug 101034
requestDevice
Experimental
Chrome – Full support
Chrome 56 (Release date: 2017-01-25)
footnote Full support
Edge – Full support
Edge 79 (Release date: 2020-01-15)
footnote Full support
Firefox – No support
Firefox
footnote
footnote See bug 674737
Opera – Full support
Opera 43 (Release date: 2017-02-07)
footnote Full support
Safari – No support
Safari
footnote
footnote See bug 101034
Chrome Android – Full support
Chrome Android 56 (Release date: 2017-02-01)
footnote Full support
Firefox for Android – No support
Firefox for Android
footnote
footnote See bug 674737
Opera Android – Full support
Opera Android 43 (Release date: 2017-09-27)
footnote Full support
Safari on iOS – No support
Safari on iOS
footnote
footnote See bug 101034
Samsung Internet – Full support
Samsung Internet 6 (Release date: 2017-08-23)
footnote Full support
WebView Android – No support
WebView Android
footnote No support
WebView on iOS – No support
WebView on iOS
footnote
footnote See bug 101034
options.exclusionFilters parameter
Experimental
Chrome – Full support
Chrome 114 (Release date: 2023-05-30)
footnote Full support
Edge – Full support
Edge 114 (Release date: 2023-06-02)
footnote Full support
Firefox – No support
Firefox
footnote No support
Opera – Full support
Opera 100 (Release date: 2023-06-29)
footnote Full support
Safari – No support
Safari
footnote No support
Chrome Android – Full support
Chrome Android 114 (Release date: 2023-05-30)
footnote Full support
Firefox for Android – No support
Firefox for Android
footnote No support
Opera Android – Full support
Opera Android 76 (Release date: 2023-06-26)
footnote Full support
Safari on iOS – No support
Safari on iOS
footnote No support
Samsung Internet – Full support
Samsung Internet 23 (Release date: 2023-10-18)
footnote Full support
WebView Android – No support
WebView Android
footnote No support
WebView on iOS – No support
WebView on iOS
footnote No support
options.filter.manufacturerData parameter
Experimental
Chrome – Full support
Chrome 92 (Release date: 2021-07-20)
footnote Full support
Edge – Full support
Edge 92 (Release date: 2021-07-22)
footnote Full support
Firefox – No support
Firefox
footnote No support
Opera – Full support
Opera 78 (Release date: 2021-08-03)
footnote Full support
Safari – No support
Safari
footnote No support
Chrome Android – Full support
Chrome Android 92 (Release date: 2021-07-20)
footnote Full support
Firefox for Android – No support
Firefox for Android
footnote No support
Opera Android – Full support
Opera Android 65 (Release date: 2021-10-20)
footnote Full support
Safari on iOS – No support
Safari on iOS
footnote No support
Samsung Internet – Full support
Samsung Internet 16 (Release date: 2021-11-25)
footnote Full support
WebView Android – No support
WebView Android
footnote No support
WebView on iOS – No support
WebView on iOS
footnote No support

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.