Real-time heart rate monitoring that connects to Bluetooth devices and displays your heart rate in VRChat via OSC.
- Connect to BLE heart rate devices:
- Heart rate monitors: Polar, CooSpo, Garmin, etc.
- Smart wearables with BLE heart rate broadcast: Huawei bands, etc.
- Display heart rate in VRChat via OSC protocol
- Dynamic heart display styles based on BPM
- SQLite data logging for heart rate tracking
- Web-based graph visualization
For users who prefer a simple setup without development environment, download the pre-built Rust binary from GitHub Releases.
The Rust version provides the same functionality as the Node.js CLI in a single executable file. When you run the Rust binary, it will automatically generate a heartio.config.json configuration file in the current directory. The heart rate threshold key in the config represents "less than" values.
Xiaomi Band versions ≤ 7 support Bluetooth heart rate broadcasting. Versions ≥ 8 are not supported.
Only Xiaomi Band 7 has been tested. Other versions (≤ 7) may work but haven't been tested with actual devices. You can share feedback in issues.
Enable in heartio.config.json:
{
"XIAOMI_BAND": true
}Note: Xiaomi Band heart rate broadcast has limited frequency (2-6 seconds per update). Standard heart rate monitors or bands are recommended for better performance.
Build the iOS app to collect heart rate data from AirPods Pro 3 and forward it to HeartIO.
Build the watchOS app to collect heart rate data from Apple Watch and forward it to HeartIO.
Install dependencies:
just installCreate .env file in the cli directory:
OSC_PORT=9000
OSC_HOST=0.0.0.0
# Configure ONE of the following:
HEART_RATE_DEVICE_NAME="YOUR_DEVICE_NAME"
# OR
# HEART_RATE_DEVICE_ADDRESS="YOUR_DEVICE_ADDRESS"Configuration options:
- You can use either device name or address for connection
- If both name and address are omitted, the app will automatically connect to any available device with heart rate service (explicit configuration is recommended)
Start the Node.js CLI:
just startView heart rate data in a web interface:
just start-graph- OSC not working: Ensure OSC is enabled in VRChat
- Bluetooth not working: Verify heart rate broadcasting is enabled on your wearable device
- Device not found: The Bluetooth reception range of most motherboards is very limited. If your device is not detected, try moving closer to your computer or consider purchasing a USB Bluetooth adapter for better range and reliability
- Connection issues: Make sure your heart rate device is not connected to other applications
- Node.js CLI: Not by AI
- Apple Watch App、Graph Visualization: Created with GPT-4o
- Rust Version: Claude Sonnet 4
MIT