Testing

Web Bluetooth: Browser Support, API, Limitations

Web Bluetooth works in Chrome 56+, Edge 79+, Opera 43+, and Samsung Internet 6.2+. Firefox and Safari do not support it. Learn the API, use cases, and limits.

Author

Prince Dewani

May 1, 2026

Web Bluetooth is a JavaScript API from the W3C Web Bluetooth Community Group that lets web pages talk to Bluetooth Low Energy devices through a secure permission flow. It works in Chrome 56+ on macOS, Android, and ChromeOS, Chrome 70+ on Windows, Edge 79+, Opera 43+, Opera Mobile 80+, and Samsung Internet 6.2+, while Firefox, Safari on macOS, and Safari on iOS do not support it in any version.

This guide covers what Web Bluetooth is, the browsers that ship it, the key API features, real-world use cases, and the limitations to plan around before you ship.

What is Web Bluetooth?

Web Bluetooth is a JavaScript API that gives a web page access to Bluetooth Low Energy peripherals through the Generic Attribute Profile (GATT), exposed on the navigator.bluetooth object. The Web Bluetooth Community Group at the W3C edits the spec, with Reilly Grant and Ovidio Ruiz-Henriquez at Google as the listed editors. The API first shipped in Chrome 56 in January 2017 and is gated to secure HTTPS contexts and a user-gesture permission prompt for every new device.

Which browsers does Web Bluetooth support?

Chromium-based desktop and Android browsers ship Web Bluetooth, while Firefox and every Safari version on macOS, iOS, and iPadOS leave it out, so global browser support sits near 76% as of April 2026.

Loading browser compatibility data...

Web Bluetooth compatibility in Chrome

Chrome supports Web Bluetooth from Chrome 56 on macOS, Android 6.0+, and ChromeOS, and from Chrome 70 on Windows 10 version 1703 and later. Chrome 45 to 55 had the API disabled by default behind chrome://flags/#enable-experimental-web-platform-features. Chrome on Linux still ships Web Bluetooth only when that experimental flag is on, and the platform needs Linux Kernel 3.19+ with BlueZ 5.41+ installed. Chrome 4 to 44 did not support Web Bluetooth.

Web Bluetooth compatibility in Edge

Microsoft Edge supports Web Bluetooth from Edge 79, the first Chromium-based release shipped on January 15, 2020, on Windows 10 and macOS. Pre-Chromium EdgeHTML 12 to 44 never added the API, and Internet Explorer never supported it. Edge for Linux follows the same experimental-flag rule that Chrome on Linux uses.

Web Bluetooth compatibility in Firefox

Firefox does not support Web Bluetooth in any version on Windows, macOS, Linux, or Android. Mozilla published a harmful standards position on the spec, citing fingerprinting, tracking, and security concerns about exposing low-level radio access. There is no about:config preference that turns it on, and there is no public Mozilla plan to ship it.

Web Bluetooth compatibility in Safari on macOS

Safari does not support Web Bluetooth on macOS in any version, including Safari 18 on macOS Sequoia and Safari 17 on macOS Sonoma. Apple WebKit has not published a public position on the spec, and no WebKit bug tracks an active implementation. macOS users who need a Web Bluetooth tester can install Chrome, Edge, or Opera instead.

Web Bluetooth compatibility in Safari on iOS and iPadOS

Safari on iOS and iPadOS does not support Web Bluetooth in any version, including iOS 18 and iPadOS 18. Apple's app store rules force every iOS browser to use the WebKit engine, so Chrome on iOS and Edge on iOS inherit the same gap. iPhone and iPad users who need Web Bluetooth must install Bluefy or WebBLE, third-party browsers from the App Store that ship a separate Bluetooth stack.

Web Bluetooth compatibility in Opera

Opera supports Web Bluetooth from Opera 43, released February 7, 2017, on Windows, macOS, and Linux, and tracks every Chromium release after that. Opera 36 to 42 had the API disabled by default behind the same experimental flag Chrome used. Opera Mobile supports Web Bluetooth from Opera Mobile 80 on Android, while Opera Mini does not support it in any version.

Web Bluetooth compatibility in Samsung Internet

Samsung Internet supports Web Bluetooth from Samsung Internet 6.2, released April 2018, on Galaxy phones and tablets running Android 6.0 Marshmallow or later. The browser ships the same Chromium GATT pipeline Chrome uses on Android. Samsung Internet 1.0 to 6.0 did not support the API.

Web Bluetooth compatibility in Android Browser

Chrome for Android, Samsung Internet, and Android WebView together provide Web Bluetooth on most modern Android phones running Android 6.0 Marshmallow or later. The legacy stock Android Browser, last shipped with Android 4.4 KitKat, never added the API. Firefox for Android does not support Web Bluetooth in any version.

Web Bluetooth compatibility in Internet Explorer

Internet Explorer does not support Web Bluetooth in any version. The API depends on a Chromium device service plumbing that Trident never had. Internet Explorer is end-of-life and out of support, so move any Bluetooth-dependent web app to Chromium-based Edge or Chrome for any new work.

What are the key features of the Web Bluetooth API?

The Web Bluetooth API is built around a permission-gated chooser, a GATT client for service discovery, and event-based connection updates. Every call runs in a secure HTTPS context on a top-level page or in an iframe that the parent has unlocked through the bluetooth Permissions-Policy.

  • navigator.bluetooth.requestDevice: Pops a browser-supplied device chooser on a click. The user picks a peripheral from a filter list of services, names, or manufacturer data, and the page only sees the device the user picked.
  • navigator.bluetooth.getDevices: Returns the list of devices the user has already approved for the origin. The page never gets a free pass to scan nearby radios.
  • BluetoothRemoteGATTServer: Connects to and disconnects from the GATT server on the chosen device. Every connection starts with device.gatt.connect and survives until the page calls disconnect or the user revokes permission.
  • getPrimaryService and getCharacteristic: Walk the GATT tree to fetch a service and the characteristics inside it. Both methods accept a 16-bit, 32-bit, or 128-bit UUID, or one of the Bluetooth SIG short names like heart_rate or battery_service.
  • readValue, writeValue, startNotifications: Read a characteristic value once, write a value, or subscribe to characteristicvaluechanged events. Notifications are how heart rate monitors and CGMs stream live data to the page.
  • gattserverdisconnected event: Fires on the BluetoothDevice when the radio link drops. Pages can react to a closed lid, dead battery, or out-of-range device without polling.
  • Permissions-Policy bluetooth=self: Cross-origin iframes are blocked by default. The embedder must list bluetooth in its Permissions-Policy header to unlock embedded use.
  • Built-in blocklist: Chrome blocks devices that match security-sensitive vendor and product IDs, including some FIDO and HID classes, before the chooser opens. Pages cannot bypass this list.
...

What are the use cases of Web Bluetooth?

Web Bluetooth lets a web app talk directly to a paired BLE device without a native app or driver. That is the right fit for short-lived configuration tools, wellness dashboards, and IoT control panels. Production sites already use it for health, fitness, education, and hardware control.

  • Health and fitness dashboards: Pages that read heart rate from a chest strap, step count from a fitness band, or glucose from a continuous glucose monitor, then sync the data to a cloud account.
  • IoT and home automation: Lights, thermostats, locks, and garage door openers that ship with a BLE characteristic the page can flip on a click.
  • Firmware updaters and configuration tools: Web pages that flash firmware to drones, e-bikes, or audio gear over the BLE OTA service, replacing a per-platform native installer.
  • Maker and education tools: Web Bluetooth controls Arduino, ESP32, BBC micro:bit, and Pixel Kit boards from a tab. Schools and workshops lean on this because no install or app store account is needed.
  • Industrial and lab tools: Bluetooth scales, calipers, and multimeters that report measurements straight into a web-based lab notebook.

Paste this snippet into the DevTools console of Chrome, Edge, or Opera over HTTPS. Click anywhere on the page once and the chooser opens, ready to read battery level from any BLE device the user picks.

// Paste this into the DevTools console of Chrome, Edge, or Opera over HTTPS.
// Click anywhere on the page once and the device chooser opens.
if (navigator.bluetooth) {
  console.log("Web Bluetooth is available.");

  document.body.addEventListener("click", async () => {
    try {
      const device = await navigator.bluetooth.requestDevice({
        acceptAllDevices: true,
        optionalServices: ["battery_service"],
      });
      console.log("Picked device:", device.name);

      const server = await device.gatt.connect();
      const service = await server.getPrimaryService("battery_service");
      const level = await service.getCharacteristic("battery_level");
      const value = await level.readValue();
      console.log("Battery level:", value.getUint8(0), "percent");
    } catch (err) {
      console.error("Bluetooth request failed:", err.message);
    }
  }, { once: true });
} else {
  console.log("Web Bluetooth is not supported in this browser.");
}

If the console prints "Web Bluetooth is not supported in this browser", you are on Firefox, Safari, or a mobile iOS browser. Fall back to a native helper app or to Bluefy on iOS for those visitors.

Note

Note: Web Bluetooth breaks across Firefox, Safari, and iOS. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!

What are the limitations of Web Bluetooth?

Web Bluetooth has the smallest footprint of any modern device API outside Chromium. The painful edges show up around Firefox refusal, the Safari and iOS gap, and the rules Chrome layered on top of GATT to keep users safe.

  • Firefox calls the API harmful: Mozilla flagged Web Bluetooth in its standards positions list. Sites that need BLE on Firefox must ship a native helper or guide users to Chrome, Edge, or Opera.
  • No Safari, no iOS, no iPadOS: WebKit has no Web Bluetooth code. iPad and iPhone users need a third-party app like Bluefy or WebBLE that bundles a separate Bluetooth stack. Chrome on iOS is just WebKit, so it inherits the gap.
  • HTTPS only, top-level only: The API throws SecurityError on HTTP and on file:// pages. Cross-origin iframes are blocked unless the parent sends a Permissions-Policy bluetooth=self header.
  • requestDevice needs a user gesture: Chrome throws "Must be handling a user gesture" if requestDevice runs from a setTimeout, fetch handler, or page-load script. Wire it to a click or keypress.
  • Linux and Windows have version floors: Chrome on Linux ships Web Bluetooth only when chrome://flags/#enable-experimental-web-platform-features is on, and the host needs Linux Kernel 3.19+ with BlueZ 5.41+. Windows needs version 1703 (Creators Update) or later.
  • Pairing is not done by the page: The browser shows the chooser, but the OS handles pairing for some classes of devices. Users still pair headsets and watches inside Windows, macOS, or ChromeOS settings before the page sees them.
  • No background scanning by default: requestLEScan and watchAdvertisements stay behind chrome://flags/#enable-experimental-web-platform-features. Production sites cannot rely on background advertisement reading yet.
  • Built-in blocklist: Chrome blocks vendor and product IDs the team flags as risky, including some FIDO classes. The page cannot bypass this list, even with a custom service UUID.

In my experience, the trickiest failure is the user-gesture rule paired with React. A useEffect that calls requestDevice on mount throws every time, even after a real click somewhere else, because Chrome has already burned the activation token by the time the effect runs. Wire requestDevice to an onClick handler on a real button and the problem disappears.

...

Citations

All Web Bluetooth version numbers and platform notes in this guide come from these primary sources:

Author

Prince Dewani is a Community Contributor at TestMu AI, where he manages content strategies around software testing, QA, and test automation. He is certified in Selenium, Cypress, Playwright, Appium, Automation Testing, and KaneAI. Prince has also presented academic research at the international conference PBCON-01. He further specializes in on-page SEO, bridging marketing with core testing technologies. On LinkedIn, he is followed by 4,300+ QA engineers, developers, DevOps experts, tech leaders, and AI-focused practitioners in the global testing community.

Open in ChatGPT Icon

Open in ChatGPT

Open in Claude Icon

Open in Claude

Open in Perplexity Icon

Open in Perplexity

Open in Grok Icon

Open in Grok

Open in Gemini AI Icon

Open in Gemini AI

Copied to Clipboard!
...

3000+ Browsers. One Platform.

See exactly how your site performs everywhere.

Try it free
...

Write Tests in Plain English with KaneAI

Create, debug, and evolve tests using natural language.

Try for free

Frequently asked questions

Did you find this page helpful?

More Related Hubs

TestMu AI forEnterprise

Get access to solutions built on Enterprise
grade security, privacy, & compliance

  • Advanced access controls
  • Advanced data retention rules
  • Advanced Local Testing
  • Premium Support options
  • Early access to beta features
  • Private Slack Channel
  • Unlimited Manual Accessibility DevTools Tests