Skip to content

feat(desktop): RuView Desktop v0.4.0 - Full ADR-054 Implementation#212

Merged
ruvnet merged 2 commits intomainfrom
release/v0.4.0-desktop
Mar 10, 2026
Merged

feat(desktop): RuView Desktop v0.4.0 - Full ADR-054 Implementation#212
ruvnet merged 2 commits intomainfrom
release/v0.4.0-desktop

Conversation

@ruvnet
Copy link
Owner

@ruvnet ruvnet commented Mar 10, 2026

Summary

This PR completes the full implementation of ADR-054, making RuView Desktop v0.4.0 production-ready for ESP32 node management.

  • Implements all 14 Tauri commands with real functionality
  • Adds 67 edge modules with app-store style library UI
  • Includes security hardening per ADR-054 spec
  • Bumps version from v0.3.0 to v0.4.0

Changes

Backend (Rust)

  • discovery.rs: Real mDNS + UDP broadcast discovery
  • flash.rs: espflash CLI integration with progress events
  • ota.rs: HTTP multipart + HMAC-SHA256 + PSK auth
  • wasm.rs: Full WASM module lifecycle management
  • server.rs: Child process spawn with graceful shutdown
  • provision.rs: NVS binary serial protocol

Frontend (React/TypeScript)

  • EdgeModules.tsx: 67 modules, app-store UI with ratings/downloads
  • NetworkDiscovery.tsx: New discovery page
  • Version bumps in tauri.conf.json, package.json, App.tsx

Documentation

  • ADR-054-desktop-full-implementation.md: Full specification

Build Output

RuView Desktop_0.4.0_aarch64.dmg (3.6 MB)

Test plan

  • cargo test --workspace - 18 tests pass
  • npm run build - TypeScript compiles
  • cargo tauri build --bundles dmg - DMG builds
  • App launches and all pages render
  • Edge Modules library shows 67 modules
  • Hardware E2E with real ESP32 nodes (manual)

Related

🤖 Generated with claude-flow

Reuven and others added 2 commits March 9, 2026 19:04
Fixes #206 - Settings can now be saved and loaded in Desktop v0.3.0

- Add commands/settings.rs with get_settings and save_settings Tauri commands
- Settings persisted to app data directory as settings.json
- Supports all AppSettings fields: ports, bind address, OTA PSK, discovery, theme
- Add unit tests for serialization and defaults

Settings are stored at:
- macOS: ~/Library/Application Support/net.ruv.ruview/settings.json
- Windows: %APPDATA%/net.ruv.ruview/settings.json
- Linux: ~/.config/net.ruv.ruview/settings.json

Co-Authored-By: claude-flow <ruv@ruv.net>
This release completes all 14 Tauri commands specified in ADR-054,
making the desktop app fully production-ready for ESP32 node management.

## New Features

### Discovery Module
- Real mDNS discovery (_ruview._udp.local)
- UDP broadcast probe on port 5006
- Serial port enumeration with ESP32 chip detection

### Flash Module
- Full espflash CLI integration
- Real-time progress streaming via Tauri events
- SHA-256 firmware verification
- Support for ESP32, S2, S3, C3, C6 chips

### OTA Module
- HTTP multipart firmware upload
- HMAC-SHA256 signature with PSK authentication
- Sequential and parallel batch update strategies
- Reboot confirmation polling

### WASM Module
- 67 edge modules across 14 categories
- App-store style module library with ratings/downloads
- Full module lifecycle (upload/start/stop/unload)
- RVF format deployment paths

### Server Module
- Child process spawn with config
- Graceful SIGTERM + SIGKILL fallback
- Memory/CPU monitoring via sysinfo

### Provision Module
- NVS binary serial protocol
- Read/write/erase operations
- Mesh config generation for multi-node setup

## Security
- Input validation (IP, port, path)
- Binary validation (ESP/WASM magic bytes)
- PSK authentication for OTA

## Breaking Changes
None - backwards compatible with v0.3.0

Co-Authored-By: claude-flow <ruv@ruv.net>
@ruvnet ruvnet merged commit 0b98917 into main Mar 10, 2026
@ruvnet ruvnet deleted the release/v0.4.0-desktop branch March 10, 2026 01:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Release: RuView Desktop v0.4.0 - Full ADR-054 Implementation

1 participant