A cross-platform CLI tool that reads body composition data from 23 BLE smart scales and exports to Garmin Connect, MQTT (Home Assistant), InfluxDB, Webhooks, and Ntfy. No phone app needed. Your data stays on your device.
Documentation · Getting Started · Supported Scales · Exporters
Most BLE smart scales measure weight and body impedance over Bluetooth, but their companion apps have no way to sync data to Garmin Connect. The only workflow was: open the phone app, wait for it to sync, then manually type the numbers into Garmin. Every single time.
I didn't want to depend on a phone app. So I built this tool. A Raspberry Pi Zero 2W sits next to the scale, always on, always listening. Step on the scale, wait a few seconds, and the reading appears in Garmin Connect — no phone needed, no app, no manual entry. It just works.
# Configure
docker run --rm -it --network host --cap-add NET_ADMIN --cap-add NET_RAW \
--group-add 112 -v /var/run/dbus:/var/run/dbus:ro \
-v ./config.yaml:/app/config.yaml ghcr.io/kristianp26/ble-scale-sync:latest setup
# Run (continuous mode, auto-restart)
docker run -d --restart unless-stopped --network host \
--cap-add NET_ADMIN --cap-add NET_RAW \
--group-add 112 -v /var/run/dbus:/var/run/dbus:ro \
-v ./config.yaml:/app/config.yaml:ro \
-e CONTINUOUS_MODE=true \
ghcr.io/kristianp26/ble-scale-sync:latestgit clone https://github.com/KristianP26/ble-scale-sync.git
cd ble-scale-sync && npm install
npm run setup # interactive wizard
CONTINUOUS_MODE=true npm start # always-onRequires Node.js v20+ and a BLE adapter. See the full install guide for prerequisites and systemd service setup.
- 23 scale brands — Xiaomi, Renpho, Eufy, Yunmai, Beurer, Sanitas, Medisana, and more
- 5 export targets — Garmin Connect (multi-user Docker auth), MQTT (Home Assistant), InfluxDB, Webhook, Ntfy
- 10 body metrics — BIA-based body composition from weight + impedance
- Multi-user — automatic weight-based identification with per-user exporters
- Interactive setup wizard — scale discovery, exporter config, connectivity tests
- Cross-platform — Linux (Docker + native), macOS, Windows
- Private — your data stays on your device, no vendor cloud
- Scale protocols — ported from openScale by oliexdev and contributors
- Garmin upload — powered by garminconnect by cyberjunky
- BLE — node-ble (Linux), @abandonware/noble (Windows), @stoprocent/noble (macOS)
See CONTRIBUTING.md for development setup, project structure, and how to add new scale adapters or exporters.
GPL-3.0 — see LICENSE for details.