Overview
RuView is an open-source WiFi-sensing platform. Every WiFi radio already floods a room with radio waves, and people disturb those waves as they move, sit and breathe. RuView captures those disturbances as Channel State Information (CSI) from low-cost ESP32 sensors and turns them into presence and occupancy, motion and activity, fall events, breathing and heart rate, and 17-keypoint body pose — with no camera and no wearable.
The stack is written in Rust and runs on the edge: an ESP32-S3 or ESP32-C6 node streams CSI, a bridge processes it, and small models do the inference locally. The contrastive CSI encoder is published on Hugging Face and its 4-bit variant fits in 8 KB, so it runs in microseconds on a Raspberry Pi. A Docker image with simulated data lets you evaluate the whole pipeline before buying any hardware, and Python bindings ship as a compiled PyO3 wheel on PyPI.
RuView is unusually explicit about which of its numbers are load-bearing. The README documents that the earlier "100% presence" claim was measured on a single-class recording and has been retracted in favour of a label-free held-out temporal-triplet accuracy of 82.3% for the v2 encoder, and it separates the published MM-Fi pose benchmark from the first-cut on-device pose model committed to the repo. On the integration side it speaks Home Assistant over MQTT, exposes an Apple HomeKit (HAP) bridge and a Matter endpoint, and publishes 21 entities per node covering raw signals and inferred states such as bed-exit, bathroom-occupied and no-movement.
What it does
- Camera-free sensing from WiFi CSI: presence and occupancy, motion and activity, fall detection and multi-person counting
- Contactless vital signs — breathing rate from a 0.1–0.5 Hz phase band, heart rate from a 0.8–2.0 Hz band
- 17-keypoint pose estimation from CSI, with a published MM-Fi benchmark model and a camera-supervised fine-tuning pipeline
- Runs on the edge on $9-class ESP32-S3 / ESP32-C6 nodes, with multi-frequency mesh scanning across six WiFi channels
- Home Assistant (MQTT), Apple Home (HAP bridge), Google Home, Alexa and Matter integrations, plus starter HA blueprints
- Pretrained CSI encoder on Hugging Face, 128-dimensional and quantisable to 8 KB, with an on-device retraining path
Getting started
The Docker image runs the full system on simulated data with no hardware, which is the fastest way to see what the pipeline produces. Live sensing needs a CSI-capable radio — a consumer laptop only gives RSSI-level presence.
Evaluate with simulated data
Pull the multi-arch image and open the dashboard on port 3000. No sensor required.
docker pull ruvnet/wifi-densepose:latest
docker run -p 3000:3000 ruvnet/wifi-densepose:latest
# Open http://localhost:3000Flash an ESP32-S3 CSI node
Write the csi-node firmware, then provision it with your WiFi credentials and the IP of the machine that will receive the stream.
python -m esptool --chip esp32s3 --port COM9 --baud 460800 \
write_flash 0x0 bootloader.bin 0x8000 partition-table.bin \
0xf000 ota_data_initial.bin 0x20000 esp32-csi-node.bin
python firmware/esp32-csi-node/provision.py --port COM9 \
--ssid "YourWiFi" --password "secret" --target-ip 192.168.1.20Or build for an ESP32-C6
The same firmware compiles for the C6 target and picks up its overlay automatically, adding WiFi 6 subcarrier tagging and an 802.15.4 mesh time-sync.
cd firmware/esp32-csi-node
idf.py set-target esp32c6 && idf.py build
idf.py -p COM6 flashUse it from Python
Both PyPI names ship the same compiled abi3 wheel. The `[client]` extra adds the asyncio WebSocket and MQTT clients.
pip install "ruview[client]"
from ruview import BreathingExtractor, HeartRateExtractor
from ruview.client import SensingClient, RuViewMqttClientPublish into Home Assistant
One `--mqtt` flag turns the node into a Home Assistant discovery publisher; pairing as a Matter bridge exposes it to Apple Home, Google Home, Alexa and SmartThings instead. See docs/integrations/home-assistant.md in the repo.
Commands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Add room-level presence and occupancy to a smart home without putting a camera in the room
- Monitor breathing, heart rate and bed-exit events for elderly-care or sleep applications, contactlessly and overnight
- Detect falls and long periods of no movement, and surface them as Home Assistant or HomeKit entities
- Research WiFi-based pose estimation with a published pretrained CSI encoder and a camera-supervised fine-tuning pipeline