Your Web Bluetooth app, in the Safari they already use.
The same navigator.bluetooth code
you ship to Android Chrome — now running in real iPhone Safari.
Not a separate browser: the URL bar, bookmarks and Add to Home Screen
they already have, and a genuine Safari user-agent, so no
“unsupported browser” wall. No native app. No rewrite.
beacio is active in Safari — scan a device above.
Add to Safari — free Try the live demoimport '@beacio/core/auto'
- Runs in real Safari — not a separate browser
- 92/93 W3C Web Bluetooth conformance, verified section by section
- Free to confirm your own device connects
- Works on Chrome, Edge & Safari from one codebase
Already own a BLE device? Confirm it connects in the live scanner above — free, before you integrate anything.
Three steps to Bluetooth
Get started in under a minute. No configuration, no server-side changes.
Add one line
Import the auto polyfill once. That's the entire integration — a no-op where Web Bluetooth already ships natively.
import '@beacio/core/auto';
No build step? Use the
no-build alternative (CDN
<script> tag) instead.
User enables the extension
On first visit, users install the free companion app and enable beacio in Settings > Apps > Safari > Extensions.
Bluetooth just works
The standard Web Bluetooth API is now available. Your existing code works without changes.
You already have a Web Bluetooth app — or a BLE device you want to reach from iPhone
If your navigator.bluetooth site
already works on Android and desktop Chrome, beacio makes it work in
iPhone Safari too — no rewrite. Any standard GATT device is
reachable through the standard API; these are a few of the protocols
owners ask for most.
You ship a Web Bluetooth site
Your navigator.bluetooth app is
dead on iPhone today. Point users at beacio and it works in their
Safari — no rewrite, with an optional detect/CDN polyfill.
Maker serial over BLE
Espruino, Bangle.js, Puck.js, micro:bit and ESP32 over Nordic UART;
Arduino and cheap modules over HM-10 / 0xFFE0.
The serial bridge that powers most maker pages.
Fitness & heart rate
Heart rate (0x180D), power meters,
speed/cadence and trainers — live web dashboards on iPhone,
no extra app to install.
Environmental sensing
Temperature, humidity and air-quality sensors over Environmental
Sensing (0x181A) — read them
straight from a web page.
Battery & device info
Read battery level (0x180F) and
device information from nearly any BLE peripheral — shipped
profiles, verified on a physical iPhone.
Scales, health & find-me tags
Weight scales, blood pressure, pulse oximeters and “beep my tag” find-me alerts — the standard SIG profiles a web app can read directly.
Smart locks & access state
Web check-in flows and clear-text lock state in real Safari. (Vendor unlock commands stay in dedicated app code — we don't claim one-tap unlock.)
Bluetooth device makers
Already ship a native iOS app for your hardware? Offer a web app alongside it — same device, no second native build. See the iOS superpowers below.
Integrate in seconds
Use the standard Web Bluetooth API. We handle the Safari part.
// One line activates the iOS Safari polyfill.
import '@beacio/core/auto';
// Same code runs on Chrome and Edge — no vendor prefix, no fallback.
const device = await navigator.bluetooth.requestDevice({
filters: [{ services: ['heart_rate'] }]
});
const server = await device.gatt.connect();
<!-- No build step? Drop the CDN script instead. -->
<script src="https://ioswebble.com/webble.js"></script>
// Then use the standard Web Bluetooth API
const device = await navigator.bluetooth.requestDevice({
acceptAllDevices: true
});
import { BeacioProvider } from '@beacio/react';
function App() {
return (
<BeacioProvider>
<MyBluetoothApp />
</BeacioProvider>
);
}
# Quick setup via CLI
$ npx beacio init
? Detected: Next.js project
? Adding @beacio/react...
? Wrapping _app with BeacioProvider...
Done! Web Bluetooth is ready for Safari.
Standard API. Zero lock-in.
beacio polyfills the Web Bluetooth API for Safari. If the user has Chrome or Android with native support, the polyfill stays out of the way. Your code is always standard.
Works with every framework, or no framework at all.
Full W3C conformance — beacio implements the full W3C Web Bluetooth specification, verified section by section against the spec. Read the conformance matrix.
Background Sync — Keep BLE devices active, fire iOS notifications for characteristic updates, and register beacon scans with Background Sync docs.
AI Agent Integration — AI agents can add
beacio to any project in 30 seconds via MCP. Run
npx beacio init or let your agent handle it.
The iOS-only capabilities Apple usually gates behind a native app
The polyfill is free and pure-W3C. For teams that need iOS-specific
capabilities, the extension exposes them on the vendor-prefixed
window.webbleIOS surface —
never on navigator.bluetooth.
Background sync / keep-alive GATT
Keep a CGM stream alive when the phone locks.
await window.webbleIOS.backgroundSync.register({...});
BLE-driven iOS notifications
Low-battery alerts for insulin pumps and hearing aids. Threshold breaches for clinical flows.
Lock Screen / Dynamic Island
Workout session progress visible while the user does something else on the phone.
Beacon scanning
Warehouse forklift logs arrival automatically at a yard beacon — no app launch needed.
Peripheral mode
Two phones chat end-to-end encrypted with no internet. See the
ble-e2e-chat flagship demo.
await window.webbleIOS.peripheral.advertise({...});
White-labeled companion app
Your brand in the App Store without building a native iOS app from scratch.
Tell us what you're building
You ship Bluetooth hardware with a native iOS app. We can help you offer a web app alongside it. 30-minute call, no pitch — we just want to hear what you're shipping.