The open platform for smart rings.
⚠️ Very early work in progress. OpenRing is at the scaffolding stage. The desktop Inspector compiles and can already scan, connect, and stream notifications from BLE rings on macOS — but no protocol has been decoded yet, the SDK is unstable, and nothing here is ready for users. Expect breaking changes everywhere. Star the repo if you want to follow along.
OpenRing is an open-source platform for working with smart rings independently of vendor apps — inspecting their Bluetooth protocols, decoding their data, and building your own experiences on top.
This repo is a monorepo containing the desktop inspector, mobile app (planned), shared packages, and per-device profiles.
Overall progress against the long-term vision: roughly ~12%.
Phase 1 — Inspector ████████░░░░░░░░░░░░ 40 %
Phase 2 — Protocol Explorer █░░░░░░░░░░░░░░░░░░░ 5 %
Phase 3 — SDK ██░░░░░░░░░░░░░░░░░░ 10 %
Phase 4 — OpenRing Mobile ░░░░░░░░░░░░░░░░░░░░ 0 %
─────────────────────────────────────────────────────────
Design system ███████░░░░░░░░░░░░░ 35 %
Device profiles ████░░░░░░░░░░░░░░░░ 20 %
Public docs █████░░░░░░░░░░░░░░░ 25 %
The first deliverable: a desktop tool that can find a smart ring on Bluetooth and let you watch its traffic.
- Monorepo scaffold (npm workspaces, TypeScript, Tauri 2 + React)
- Design tokens + dark glassmorphism shell (Linear / Raycast aesthetic)
- Rust BLE backend using
btleplug— scan, connect, discover, subscribe, write - Live device list (RSSI-sorted) and full GATT services tree
- Packet logger with hex dump, timestamps, RX/TX direction
- Hex / text TX input for sending commands to the ring
- Capture export (
.hexfiles) and replay - Settings panel + polished error / empty states
- First-run BLE permission flow on Linux & Windows
Pattern recognition over captured packets. Show a guess and a confidence: "Possible Battery Packet — 87 %".
- Package stubs (
@openring/parser,@openring/protocol) - First decoded packet → real
ProtocolDefinition - Confidence scoring rendered in the Inspector
- Pattern grouping (repeating opcodes, length prefixes, checksums)
- Auto-suggest field boundaries from observed variance
A library so other people can build apps on top of OpenRing without re-inventing the BLE layer.
- Core types + transport-agnostic
BleAdapterinterface - Stable TypeScript public API
- Python bindings (for data science / ad-hoc reverse engineering)
- Swift bindings (for iOS apps)
- Documented protocol contract per supported device
An open health app built on the SDK. Not started.
- Design system
35 %— tokens (colors / spacing / typography / motion) live in@openring/ui; component library still to come. - Device profiles
20 %— Optim Ring profile is the only one and still has more unknowns than knowns. - Public docs
25 %— vision, architecture, contributing guide live indocs/; protocol documentation per device pending Phase 2.
openring/
├── apps/
│ ├── inspector/ # Desktop inspector (Tauri + React)
│ └── mobile/ # Mobile health app (planned)
├── packages/
│ ├── core/ # Cross-platform core SDK types
│ ├── ble/ # BLE adapter interface
│ ├── parser/ # Packet parsing and inference
│ ├── protocol/ # Protocol definitions
│ └── ui/ # Shared UI components & design tokens
├── devices/ # Device profiles (Optim Ring, etc.)
├── docs/ # Vision, architecture, contributing
└── tools/ # Reverse engineering & dev scripts
| Tool | Why | Install |
|---|---|---|
| Node.js 20+ | Build tooling and the React frontend | nodejs.org or brew install node |
| Rust (stable) | Tauri shell + the BLE backend (btleplug) |
rustup.rs or brew install rustup |
| Git | Cloning this repo | Comes with macOS Xcode tools; otherwise OS package |
| A working Bluetooth stack | …obviously | macOS / Linux / Windows |
macOS extras: nothing — tauri dev builds a dev binary with the right
NSBluetoothAlwaysUsageDescription linked in, so CoreBluetooth grants
permission on first launch. Linux: install libdbus-1-dev and bluez
via your package manager. Windows: the Windows BLE stack works out of
the box on Windows 10/11.
git clone https://github.com/Querbox/openring.git
cd openring
npm installThe first npm install pulls about ~80 packages including the Tauri
CLI, React, and Vite. cargo will fetch its own crates on the first
build (a few minutes).
npm run inspector:tauriThe first launch compiles the Rust crate from scratch — expect ~2–5 minutes the first time, near-instant on subsequent runs. A native window opens with the OpenRing Inspector dashboard. macOS will prompt you for Bluetooth permission on first launch — accept it, otherwise the scanner sees nothing.
If you only want the React frontend (no Tauri shell) for UI work, run:
npm run inspector # http://localhost:1420npm run tauri:build -w @openring/inspectorThe bundled artefact lands under
apps/inspector/src-tauri/target/release/bundle/ —
.app on macOS, .msi on Windows, .AppImage / .deb / .rpm on
Linux. Bundling the full icon set first (one-time):
npm run tauri -w @openring/inspector -- icon apps/inspector/src-tauri/icons/icon.pngcargo: command not found— install Rust via rustup.rs, then restart your shell so~/.cargo/binis on$PATH.- macOS Bluetooth permission denied — open System Settings → Privacy & Security → Bluetooth and grant access to OpenRing Inspector. The prompt only appears once; toggle it manually if you dismissed it.
- First
tauri devis slow — Tauri compiles a few hundred Rust crates the first time. Subsequent runs only rebuild what changed (~seconds). Could not read package.json— you rannpmfrom your home directory.cdinto the clonedopenringfolder first.
See docs/ for the full vision, architecture, and contribution guide.
Early-stage, but contributions are welcome. The most useful things right now:
- Device profiles — own a smart ring? Add a profile in
devices/<your-ring>/. - Protocol captures — connect with the Inspector, subscribe, share what you observe.
- Design polish — better empty states, animations, copy.
See docs/contributing.md.
MIT — see LICENSE.