ScaleBridge is a local-first macOS menu bar app for collecting BLE scale measurements from supported eufy smart scales.
It watches for a scale in the background, connects when the scale wakes up, stores measurements and raw packets in SQLite, and opens the dashboard only when you ask for it from the menu bar.
| Overview | History | Devices |
|---|---|---|
![]() |
![]() |
![]() |
- Background BLE watcher for supported eufy scale profiles.
- macOS menu bar app with an on-demand Tauri window.
- Local SQLite storage for measurements, detected devices, and raw packets.
- Shared Rust core used by both the desktop app and debugging CLI.
- Raw packet capture for parser fixes and future device support.
- No cloud login, server sync, or official account API dependency.
Measured on macOS 26.5 during the normal BLE scan cadence.
| State | Included processes | Physical footprint | RSS |
|---|---|---|---|
| Background | App process and WebKit networking service | 39 MB | 108-109 MiB |
| Dashboard window open | App process, WebKit WebContent, GPU, and networking XPC | 88-89 MB | 201.8-202 MiB |
ScaleBridge is currently focused on the T9120 protocol family.
| Device family | Status | Notes |
|---|---|---|
eufy T9120 |
Confirmed | Live measurements have been verified on hardware. |
eufy T9146 / T9147 |
Candidate | Expected to share the T9120-style profile, but not yet verified. |
| Other eufy BLE scales | Research | Devices and raw packets are logged so new profiles can be added without guessing. |
See docs/protocol.md for the protocol notes and supported GATT profile details.
Requirements:
- macOS 13 or newer.
- Rust 1.85 or newer.
- pnpm 11.4.0 or newer.
- Xcode Command Line Tools.
Install dependencies:
pnpm installRun the desktop app in development:
pnpm tauri:devBuild the macOS app bundle and DMG:
pnpm tauri:buildThe debugging CLI uses the same Rust BLE core as the desktop app.
Watch for scale events without writing a database:
cargo run -p scalebridge-cli -- watch --no-dbWatch and persist events to a local SQLite database:
cargo run -p scalebridge-cli -- watch --db ./scalebridge.sqliteParse a captured notification packet:
cargo run -p scalebridge-cli -- parse --hex "cf e8 12 b4 14 b3 b6 9f 00 00 0f"src/ Tauri frontend and dashboard UI
src-tauri/ macOS app shell, menu bar, autostart, commands
crates/scalebridge-core/ BLE scan/connect, GATT I/O, protocol parsing
crates/scalebridge-storage/ SQLite schema and repository layer
crates/scalebridge-cli/ Stdio debugging CLI
docs/ Protocol and implementation notes
The frontend talks to the Rust backend through Tauri commands and events. BLE scanning, packet parsing, storage, and macOS integration stay on the Rust side.
ScaleBridge is local-first. Measurements, device records, and raw BLE packets are stored on your Mac by default. The app does not require a cloud account and does not sync data to a server.
Apache-2.0


