Skip to content

Querbox/openring

Repository files navigation

OpenRing

The open platform for smart rings.

status license phase

⚠️ 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.

Status

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 %

Phase 1 — Inspector 40 %

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 (.hex files) and replay
  • Settings panel + polished error / empty states
  • First-run BLE permission flow on Linux & Windows

Phase 2 — Protocol Explorer 5 %

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

Phase 3 — OpenRing SDK 10 %

A library so other people can build apps on top of OpenRing without re-inventing the BLE layer.

  • Core types + transport-agnostic BleAdapter interface
  • Stable TypeScript public API
  • Python bindings (for data science / ad-hoc reverse engineering)
  • Swift bindings (for iOS apps)
  • Documented protocol contract per supported device

Phase 4 — OpenRing Mobile 0 %

An open health app built on the SDK. Not started.

Cross-cutting tracks

  • 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 in docs/; protocol documentation per device pending Phase 2.

Structure

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

Install the Inspector

Prerequisites

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.

1 · Clone and install

git clone https://github.com/Querbox/openring.git
cd openring
npm install

The 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).

2 · Run the Inspector in dev mode

npm run inspector:tauri

The 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:1420

3 · Build a distributable

npm run tauri:build -w @openring/inspector

The 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.png

Troubleshooting

  • cargo: command not found — install Rust via rustup.rs, then restart your shell so ~/.cargo/bin is 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 dev is slow — Tauri compiles a few hundred Rust crates the first time. Subsequent runs only rebuild what changed (~seconds).
  • Could not read package.json — you ran npm from your home directory. cd into the cloned openring folder first.

See docs/ for the full vision, architecture, and contribution guide.

Contributing

Early-stage, but contributions are welcome. The most useful things right now:

  1. Device profiles — own a smart ring? Add a profile in devices/<your-ring>/.
  2. Protocol captures — connect with the Inspector, subscribe, share what you observe.
  3. Design polish — better empty states, animations, copy.

See docs/contributing.md.

License

MIT — see LICENSE.

Releases

No releases published

Packages

 
 
 

Contributors