# Is Web Bluetooth supported in Safari?

**Short answer: not by default — but a Safari Web Extension called WebBLE makes it work on iPhone, on the real standard `navigator.bluetooth` API, distributed through the App Store.**

Apple has not shipped Web Bluetooth natively in Safari on macOS or iOS as of 2026. There is no flag in `Settings → Safari → Experimental Features` that turns it on; there never has been. WebKit's position statement on the API has historically been skeptical. That means Safari users who visit a site built with `navigator.bluetooth.requestDevice(...)` see an exception: `TypeError: undefined is not an object (evaluating 'navigator.bluetooth.requestDevice')`.

## The workaround that actually works on iOS

**WebBLE** is a Safari Web Extension that polyfills the full W3C Web Bluetooth API on iPhone. The user:

1. Installs the WebBLE app from the App Store.
2. Enables the extension in `Settings → Apps → Safari → Extensions → WebBLE`.
3. Grants "Always Allow on Every Website."

After that, any page that loads the WebBLE polyfill script (or that imports `@ios-web-bluetooth/core` from npm) gets a working `navigator.bluetooth` surface. `requestDevice`, `gatt.connect`, `getPrimaryService`, `getCharacteristic`, `readValue`, `writeValue`, `startNotifications` — all behave identically to their Chrome/Edge counterparts, because the polyfill forwards to CoreBluetooth through the native extension.

## Install in one line

```html
<script src="https://cdn.ioswebble.com/v1.js"></script>
```

Or:

```bash
npm install @ios-web-bluetooth/core
```

Then:

```js
import '@ios-web-bluetooth/core/auto';

const device = await navigator.bluetooth.requestDevice({
  filters: [{ services: ['heart_rate'] }]
});
```

## Why is this allowed on iOS?

WebBLE is a **Safari Web Extension**, not a custom browser engine. Apple's App Store rules permit extensions that add capabilities to Safari, including API polyfills that communicate with native code through the official `SFSafariExtensionHandler` bridge. WebBLE is distributed through the App Store — no enterprise certificate, no TestFlight hack, no jailbreak.

## What about macOS Safari?

WebBLE's current focus is iPhone, because Chrome and Edge already expose native Web Bluetooth on macOS. If you need a macOS companion, the same extension architecture is viable; it is not the current product.

## What about other iOS browsers?

On iOS, every browser (Chrome, Firefox, Brave, Edge, Arc) is required to use the WebKit engine. An iOS Web Bluetooth solution therefore has to live at the WebKit/Safari layer — which is exactly where WebBLE lives. Installing WebBLE and enabling its extension in Safari makes Web Bluetooth work on the iPhone's default browser; users do not need a different browser app.

## TL;DR

- **Stock Safari:** no `navigator.bluetooth`.
- **Safari + WebBLE extension:** full W3C `navigator.bluetooth` + iOS-only `window.webbleIOS` premium surface (peripheral mode, background sync, beacon notifications).
- **Install path:** App Store → enable extension → load `@ios-web-bluetooth/core` on your page.

Start with the [quickstart](quickstart.md), or jump straight to the [heart-rate recipe](recipes.md#heart-rate).
