
Company News
AWS Security Hub Adds Socket for Supply Chain Security
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.
@beacio/detect
Advanced tools
Detect WebBLE Safari extension on iOS. Auto-show install banner when extension not found
Detect the WebBLE Safari Web Extension on iOS and guide users through install — extension state checks, an install banner, and a React provider.
Requires iOS 26.0+ Safari with the WebBLE app for the extension path. On browsers with native Web Bluetooth (Chrome, Edge) detection is a no-op.
npm install @beacio/detect
Import once in your browser entry file. It detects the extension and, when missing on iOS Safari, shows a guided install prompt:
import '@beacio/detect/auto';
The auto entry reads an optional API key from <meta name="ioswebble-key" content="wbl_xxxxx"> or window.__IOSWEBBLE_KEY__.
import {
getExtensionInstallState,
isExtensionInstalled,
isIOSSafari,
} from '@beacio/detect';
if (isIOSSafari()) {
const state = await getExtensionInstallState();
// 'not-installed' | 'installed-inactive' | 'active'
if (state !== 'active') {
// show your own UI, or use showInstallBanner() below
}
}
import { showInstallBanner, removeInstallBanner } from '@beacio/detect';
showInstallBanner({
mode: 'sheet', // 'sheet' (iOS bottom sheet, default) or 'banner'
operatorName: 'FitTracker', // your app name shown in the prompt
dismissDays: 14, // suppress after dismiss
});
The banner's default CTA opens the guided setup flow at https://ioswebble.com/setup (install → enable the Safari extension → return to your page). Override with startOnboardingUrl or appStoreUrl.
import { initBeacio } from '@beacio/detect';
await initBeacio({
operatorName: 'FitTracker',
banner: { mode: 'sheet' }, // or false to disable
onReady: () => console.log('extension active'),
onInstalledInactive: () => console.log('installed, needs Safari activation'),
onNotInstalled: () => console.log('not installed'),
});
State changes also dispatch a ioswebble:statechange CustomEvent on window.
import { BeacioProvider, useBeacio } from '@beacio/detect/react';
export default function Layout({ children }) {
return <BeacioProvider>{children}</BeacioProvider>;
}
function Status() {
const { state } = useBeacio();
return <span>{state}</span>;
}
@beacio/core — the navigator.bluetooth polyfill itself@beacio/profiles — typed GATT profiles (heart rate, battery, …)@beacio/testing — mock Bluetooth API for testsDocs: https://ioswebble.com/docs.md · Setup guide: https://ioswebble.com/setup
MIT
FAQs
Detect WebBLE Safari extension on iOS. Auto-show install banner when extension not found
The npm package @beacio/detect receives a total of 8 weekly downloads. As such, @beacio/detect popularity was classified as not popular.
We found that @beacio/detect demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Socket is now in the AWS Security Hub Extended plan. Adopt it through AWS, apply committed spend, and block malicious open source packages.

Research
/Security News
Popular npm packages keyv and cacheable compromised.

Security News
A misconfiguration gave three Anthropic models internet access, and one, believing it was in a simulation, shipped a credential-stealing package to PyPI.