Client v5: BLE, BLE Hosting, HTTP, Jobs - Linux, MacOS, & Blazor Support! Full AOT, RX on BLE only & MANY other features! Power up!
BluetoothLE
Getting Started
Section titled “Getting Started”| GitHub | |
| Downloads | |
| Blazor | |
| Linux |
Frameworks
.NET
.NET MAUI
Blazor
Operating Systems
Android
iOS
macOS
Windows
Linux
Shiny BluetoothLE provides a unified cross-platform API for Bluetooth Low Energy operations in the BLE central role (scanning, connecting, and talking to peripherals). It wraps the native BLE APIs on each platform, giving you a consistent reactive and async experience.
Features
Section titled “Features”- Unified central-role API across iOS, macOS, Android, Windows, Linux, and Blazor WebAssembly
- Reactive (IObservable) and async/await patterns
- Managed scanner with observable collection
- Automatic GATT Error 133 handling on Android
- Background scanning and peripheral state monitoring (mobile platforms)
- Connection lifecycle management
- MTU negotiation, pairing, and reliable write transactions
Platform Notes
Section titled “Platform Notes”| Feature | iOS | macOS | Android | Windows | Linux | Blazor WASM |
|---|---|---|---|---|---|---|
| Package | Shiny.BluetoothLE | Shiny.BluetoothLE | Shiny.BluetoothLE | Shiny.BluetoothLE | Shiny.BluetoothLE.Linux | Shiny.BluetoothLE.Blazor |
| Scanning | Full | Full | Full | Full | Full (BlueZ) | Limited |
| Background scanning | Allowed with entitlements | N/A (desktop) | Foreground service | N/A | N/A | Not supported |
| Pairing | Full | Full | Full | Full | Manual via BlueZ | Not supported |
| L2CAP CoC | Full | Full | API 29+ | — | Full (BlueZ socket) | — |
Enabling Web Bluetooth in the browser
Section titled “Enabling Web Bluetooth in the browser”| Browser | How to enable |
|---|---|
| Chrome / Edge / Brave / Opera (desktop) | Enabled by default on Windows, macOS, Linux, and ChromeOS. If scanning fails, check chrome://flags/#enable-web-bluetooth (or edge://flags, brave://flags, opera://flags) and set Web Bluetooth to Enabled, then restart. Linux also needs experimental-web-platform-features enabled and BlueZ 5.43+. |
| Chrome / Edge (Android) | Supported on Android 6.0+. No flag needed on recent versions; on older builds enable chrome://flags/#enable-experimental-web-platform-features. OS-level location services must be on for the native chooser prompt to appear. |
| Samsung Internet | Open internet://flags, enable Web Bluetooth, then restart. |
| Safari (macOS / iOS / iPadOS) | Apple does not ship Web Bluetooth in Safari. On iOS/iPadOS use a third-party browser that implements Web Bluetooth on top of WKWebView, such as Bluefy or WebBLE. There is no supported option in stock Safari on macOS. |
| Firefox (all platforms) | Not supported — Mozilla has not implemented Web Bluetooth and there is no flag to turn it on. Use a Chromium-based browser instead. |
Changed files
- MyApp/
Platforms/Android/AndroidManifest.xml
AndroidManifest.xml
1<?xml version="1.0" encoding="utf-8"?>2<manifest xmlns:android="http://schemas.android.com/apk/res/android">3 <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true">4 </application>5 <uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />6 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>7 <uses-permission android:name="android.permission.BATTERY_STATS" />8 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />9 <uses-permission android:name="android.permission.INTERNET" />10 <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />11 <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />12 <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />13 <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />14 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />15 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />16</manifest>AI Coding Assistant
Section titled “AI Coding Assistant”Step 1 — Add the marketplace:
claude plugin marketplace add shinyorg/skills Step 2 — Install the plugin:
claude plugin install shiny-client@shiny Step 1 — Add the marketplace:
copilot plugin marketplace add https://github.com/shinyorg/skills Step 2 — Install the plugin:
copilot plugin install shiny-client@shiny