ADR-184 P2 (version promotion + changelog) — version-metadata prep only;
triggers NO publish (P3's real PyPI upload is still gated on the manual
Trusted Publisher registration on pypi.org).
- python/pyproject.toml: version 2.0.0a1 -> 2.0.0; classifier
"Development Status :: 3 - Alpha" -> "5 - Production/Stable".
- python/ruview-meta/pyproject.toml: version 2.0.0a1 -> 2.0.0; same
classifier bump; repointed the wifi-densepose dependency pins
(base + [client]) from ==2.0.0a1 to ==2.0.0 so the stable ruview
meta-package depends on the stable wifi-densepose, not the alpha.
- python/wifi_densepose/__init__.py: runtime __version__ 2.0.0a1 -> 2.0.0
(caught during the sanity check — it would otherwise contradict the
stable wheel version reported by `wifi_densepose.__version__`).
- CHANGELOG.md: [Unreleased] entry recording the promotion.
Sanity-checked that the core package genuinely deserves "Production/Stable"
(not just a version-string change):
maturin build --release --strip -> default wheel 279 KB
pytest python/tests/ (excluding [aether]/[meridian]/[mat] extra modules)
-> 185 passed, 0 failed (smoke/keypoint/pose/vitals/bfld/security/
WS+MQTT client)
post-bump: wheel installs as 2.0.0, __version__ = 2.0.0, smoke 6/6 pass.
No publish/tag/release commands were run.
ruview
Ambient intelligence from WiFi CSI. Detect human presence, count people, read breathing and heart rate, and estimate skeletal pose — using only the WiFi signal already in your home. No cameras. No wearables. Works through walls and in the dark.
ruview is the brand-facing meta-package for the
RuView sensing stack. It installs
the compiled PyO3 wheel published as
wifi-densepose and
re-exports its full API under the ruview namespace — so you can
write either of these and they do the same thing:
from ruview import BreathingExtractor, SensingClient
from wifi_densepose import BreathingExtractor, SensingClient
Install
pip install ruview # core DSP
pip install "ruview[client]" # + WebSocket/MQTT clients
Usage
from ruview import BreathingExtractor
br = BreathingExtractor.esp32_default() # 56 subcarriers @ 100 Hz, 30s window
for residuals, weights in csi_source:
est = br.extract(residuals=residuals, weights=weights)
if est is not None:
print(f"{est.value_bpm:.1f} BPM (confidence={est.confidence:.2f})")
Full API + WebSocket / MQTT / Home Assistant integration docs: wifi-densepose on PyPI.
Why two PyPI names?
Historic: wifi-densepose is the technical / academic name (the
project started as a WiFi-based DensePose implementation).
ruview is the brand the v2 ambient-intelligence platform ships
under. Both are the same code. You pick the import that reads
better in your project.
Links
- Repository — https://github.com/ruvnet/RuView
- Modernization plan — ADR-117
- Issues — https://github.com/ruvnet/RuView/issues
License
MIT.