Most rooms are already full of radio waves. Your WiFi router is constantly transmitting, and your phone, laptop, and smart-home gear are constantly listening. Every human body in the room subtly disturbs those waves — moving, breathing, even just sitting still. RuView is open-source software that turns those disturbances into useful data: where people are, what they're doing, whether they're okay.
Just shipped v0.6.5 of the ESP32 firmware. This is the bit that runs on the $9 sensor board.
Links:
- 📦 Release with flash-ready binaries: https://github.com/ruvnet/RuView/releases/tag/v0.6.5-esp32
- 🔗 Source repo: https://github.com/ruvnet/RuView
- 🌐 Project page: https://cognitum.one/ruview
| Capability | What it means | Latency |
|---|---|---|
| 🧍 Presence sensing | Detect that a person is in the room — through internal walls | <1 ms |
| 🫁 Breathing rate | Contactless, while sitting still or sleeping (6–30 BPM) | ~1 s |
| 💓 Heart rate | Contactless, requires reasonable signal-to-noise (40–120 BPM) | ~1 s |
| 🚶 Activity recognition | Walking, sitting, gestures, falls | Real-time |
| 🛏 Sleep monitoring | Overnight breathing + movement patterns | Continuous |
| 🏠 Multi-room mesh | 3+ ESP32 nodes cover a whole home, triangulate position | Real-time |
| 🔐 Cryptographic attestation | Every measurement signed via Ed25519 witness chain | Verifiable |
All of this happens on the local network. No camera. No microphone. No wearable. No cloud. No internet required.
The hardware: an ESP32-S3 board (~$9 each from anywhere), 1-6 of them per room, optionally a Cognitum Seed (a $15 Raspberry Pi Zero 2 W with persistent memory and AI integration) at the center.
Two regressions caught on actual hardware before shipping:
-
Fresh installs no longer crash on first boot. A FreeRTOS timer-task stack-size setting silently fell out of the canonical build config (it was still in the template). Result: any fresh build crashed inside the OS timer task and looped forever. I caught this when I flashed v0.6.5 to my own COM7 board and watched it bootloop. Cherry-picked the line back. Verified: 0 panics, 0 reboots in 30 seconds of operation on real hardware.
-
OTA security made visible. A prior release (#623) made the over-the-air firmware update endpoint refuse uploads until you set a password — important security default. But the boot-time warning explaining this wasn't printing because the production code path was different from the path the fix lived on. Refactored so both paths print the warning. Now operators get a clear signal on the serial log:
W (3126) ota_update: NVS namespace 'security' not found — OTA upload endpoint will REJECT all requests until provisioned. Fail-closed per RuView#596. -
Closes issue #438 (boot loop at "edge tier 2" reported on an old release). Validated as not-reproducible end-to-end on a physical ESP32-S3.
- 🏥 Healthcare and elder care — fall detection, contactless vital signs, overnight breathing trends. Nothing on the person.
- 🏠 Smart home builders who don't want a camera in every room.
- 🔬 Researchers doing WiFi sensing — the signal-processing pipeline is open source, with a deterministic verification harness you can run with one command (
./verify). - 🛡 Privacy-first deployments — everything runs on $9-$15 hardware, locally, no API keys, no third-party servers.
- 🏗 Hardware tinkerers who want to try CSI (Channel State Information) without first writing your own ESP-IDF firmware from scratch.
You need: an ESP32-S3 board (8 MB or 4 MB flash, ~$9 on AliExpress / Amazon / Adafruit), a USB-C cable, a 2.4 GHz WiFi network, and a computer.
Download the 6 binaries from the release page, then run:
python -m esptool --chip esp32s3 --port COM7 --baud 460800 \
write_flash --flash_mode dio --flash_size 8MB \
0x0 bootloader.bin \
0x8000 partition-table.bin \
0xf000 ota_data_initial.bin \
0x20000 esp32-csi-node.bin(Replace COM7 with your serial port — /dev/ttyUSB0 on Linux, /dev/cu.SLAB_USBtoUART on macOS.)
python firmware/esp32-csi-node/provision.py --port COM7 \
--ssid "YourWiFi" --password "YourPassword" \
--target-ip 192.168.1.100 \
--node-id 1 --edge-tier 2--target-ip is the address of the computer that'll receive sensor data over UDP.
git clone https://github.com/ruvnet/RuView.git
cd RuView
cargo run -p wifi-densepose-sensing-server -- --source esp32 --http-port 3000
# then open http://localhost:3000/ui/index.htmlWalk into range. Presence, motion, breathing, and heart-rate readings should light up.
For multi-node setups (3+ boards covering a whole home with through-wall sensing), see the User Guide. For the system-level architecture (Cognitum Seed integration, mesh coordination, cryptographic attestation), see cognitum.one/ruview.
It's important to be straight about what works today vs what's in flight:
- No pretrained pose-keypoint model ships in the repo yet. What works today: presence, motion, breathing, heart rate. What's pending: full 17-keypoint skeleton estimation (the training pipeline exists, the trained weights don't yet — tracked in #509).
- Person-counting is a heuristic, not a learned classifier. On multi-node deployments it can over-report (e.g. show 2 people when there's 1). There's a live PR (#491) that auto-calibrates to your specific environment.
- Single-node = presence-only. For triangulated position / room mapping you need 3+ nodes — the geometry math needs diversity.
- First 60 seconds are a calibration window. If the board boots while someone's in the room, the presence baseline will sit too low. Power-cycle in an empty room if it gets stuck.
- Strong RF interferers (microwaves, fans near the antenna, neighbouring AP power swings) can cause false positives. Multi-node mesh helps; single-node is sensitive.
- 🐛 Bug reports: https://github.com/ruvnet/RuView/issues
- 📚 User Guide: https://github.com/ruvnet/RuView/blob/main/docs/user-guide.md
- 🏗 Architecture Decision Records: https://github.com/ruvnet/RuView/tree/main/docs/adr (100+ ADRs covering the design rationale)
- 🌐 Cognitum Seed integration: https://cognitum.one/ruview
Thanks to everyone who reported bugs this release cycle — three critical bugs got caught and fixed in under 24 hours because the reports were precise and reproducible. The project moves fast when the inbound signal is high-quality.
RuView is open source under MIT OR Apache-2.0. Built on RuVector and Cognitum Seed. The original DensePose-From-WiFi research came out of Carnegie Mellon — RuView is the productionized, edge-running version of that idea.