Back to Ruview

RuView Desktop

rust-port/wifi-densepose-rs/crates/wifi-densepose-desktop/README.md

0.7.07.4 KB
Original Source

RuView Desktop

Work in Progress — This crate is under active development. APIs and UI are subject to change.

Cross-platform desktop application for managing ESP32 WiFi sensing networks. Built with Tauri v2 (Rust backend) and React + TypeScript (frontend), following the ADR-053 design system.

Overview

RuView Desktop provides a unified interface for node discovery, firmware management, over-the-air updates, WASM edge module deployment, real-time sensing data visualization, and mesh network topology monitoring — all from a single native application.

Pages

PageDescriptionStatus
DashboardSystem overview with live stat cards, server panel, quick actions, and node gridDone
NodesSortable table of discovered ESP32 nodes with expandable detail rowsDone
Flash3-step serial firmware flash wizard (select port, pick firmware, flash + verify)Done
OTA UpdateSingle-node and batch over-the-air firmware updates with strategy selectionDone
Edge ModulesWASM module upload, lifecycle management (start/stop/unload) per nodeDone
SensingServer start/stop, live log viewer (pause/clear), activity feed with confidence barsDone
Mesh ViewForce-directed canvas graph showing mesh topology with click-to-inspect nodesDone
SettingsServer configuration (ports, bind address, discovery interval, theme)Done

Architecture

wifi-densepose-desktop/
├── src/
│   ├── main.rs              # Tauri app entry point
│   ├── lib.rs               # Command registration
│   ├── commands/            # Tauri IPC command handlers
│   │   ├── discovery.rs     # Node discovery (mDNS/UDP probe)
│   │   ├── flash.rs         # Serial firmware flashing
│   │   ├── ota.rs           # OTA update (single + batch)
│   │   ├── wasm.rs          # WASM module management
│   │   └── server.rs        # Sensing server lifecycle
│   └── domain/              # DDD domain models
│       ├── node.rs           # DiscoveredNode, NodeRegistry, HealthStatus
│       └── config.rs         # ProvisioningConfig with validation
├── ui/                       # React + TypeScript frontend
│   ├── src/
│   │   ├── App.tsx           # Shell with sidebar nav, live status bar
│   │   ├── design-system.css # ADR-053 design tokens and components
│   │   ├── types.ts          # TypeScript types mirroring Rust domain
│   │   ├── components/       # Shared UI components (StatusBadge, NodeCard)
│   │   ├── hooks/            # React hooks (useServer, useNodes)
│   │   └── pages/            # 8 page components
│   └── index.html
└── tauri.conf.json           # Tauri v2 configuration

Tauri Commands

GroupCommandDescription
Discoverydiscover_nodesScan network for ESP32 nodes via mDNS/UDP
Flashlist_serial_portsList available serial ports
detect_chipDetect connected chip type
start_flashFlash firmware via serial
OTAota_updatePush firmware to a single node
batch_ota_updatePush firmware to multiple nodes
WASMwasm_listList loaded WASM modules on a node
wasm_uploadUpload a .wasm module to a node
wasm_controlStart/stop/unload a WASM module
Serverstart_serverStart the sensing HTTP/WS server
stop_serverStop the sensing server
server_statusGet current server status
Provisionget_provision_configRead provisioning configuration
save_provision_configSave provisioning configuration

Design System (ADR-053)

The UI follows a dark professional theme with the following design tokens:

TokenValueUsage
--bg-base#0d1117Main background
--bg-surface#161b22Cards, sidebar, panels
--bg-elevated#1c2333Elevated elements
--accent#7c3aedPrimary accent (purple)
--status-online#3fb950Online/success indicators
--status-error#f85149Error/offline indicators
--font-monoJetBrains MonoTechnical data, code
--font-sansInterUI text, labels

UI Features

  • Glassmorphism cards with backdrop-filter: blur(12px)
  • Count-up animations on dashboard stat numbers
  • Page transitions with fade-in + scale on navigation
  • Gradient accents on logo, nav indicator, primary buttons
  • Status dot glows with ambient box-shadow per health state
  • Staggered fade-ins for card grids
  • Force-directed graph for mesh topology (pure Canvas 2D)

Download

Pre-built binaries are available on the Releases page.

PlatformDownloadStatus
Windows x64v0.3.0-alphaDebug build
macOSPlanned
LinuxPlanned

Running the pre-built exe (Windows)

The current release is a debug build that loads the frontend from a local Vite dev server. Follow these steps:

bash
# 1. Clone the repo (or download just the ui/ folder)
git clone https://github.com/ruvnet/RuView.git
cd RuView/rust-port/wifi-densepose-rs/crates/wifi-densepose-desktop/ui

# 2. Install frontend dependencies
npm install

# 3. Start the Vite dev server
npx vite --host

# 4. Download and run the exe from the release page
#    (or run from the repo if you built it locally)
#    The app window will open and connect to localhost:5173

Requirements: Windows 10 (1803+) or Windows 11. WebView2 runtime is required (pre-installed on Windows 10 1803+ and all Windows 11).

Note: Production builds will bundle the frontend assets directly into the exe, removing the need for a dev server.

Build from Source

Prerequisites

  • Rust 1.85+
  • Node.js 20+
  • Tauri v2 CLI
  • Windows: MSVC build tools + MinGW-w64 (for dlltool)
  • macOS: Xcode Command Line Tools
  • Linux: libwebkit2gtk-4.1-dev, libappindicator3-dev, librsvg2-dev

Development mode

bash
# Install frontend dependencies
cd ui && npm install

# Start in dev mode (hot-reload on both Rust and React)
cargo tauri dev

Production build

bash
# Build optimized release with bundled frontend
cargo tauri build

The installer/bundle will be in target/release/bundle/ (.msi on Windows, .dmg on macOS, .deb/.AppImage on Linux).

Domain Types

TypeFieldsDescription
Nodeip, mac, hostname, node_id, firmware_version, chip, mesh_role, health, ...Full node record
HealthStatusonline, offline, degraded, unknownNode health state
FlashSessionport, firmware, chip, baud, progressActive flash operation
OtaResultnode_ip, success, previous_version, new_version, duration_msOTA outcome
WasmModulemodule_id, name, size_bytes, state, node_ipEdge module record
ServerStatusrunning, pid, http_port, ws_portSensing server state
SensingUpdatetimestamp, node_id, subcarrier_count, rssi, activity, confidenceReal-time data

License

MIT — see LICENSE for details.