csi-webclient

Desktop client for configuring and controlling csi-webserver remotely.
This project provides a native Rust GUI (egui/eframe) that talks to a running csi-webserver instance over HTTP and WebSocket. It is designed for responsive operation, strict architectural separation, and easy troubleshooting during CSI collection sessions.
Features
- Configure all major webserver/device settings through REST endpoints.
- Control collection sessions (
start,reset) without using raw serial tooling. - Connect to
/api/wsand view incoming CSI frame previews in real time. - Switch runtime output behavior (
stream,dump,both) from the UI. - Works with modern log modes from the reworked webserver API:
textarray-listserialized
Architecture
The codebase intentionally separates responsibilities into three domains:
src/state: source of truth for app data and UI-visible state.src/ui: rendering-only modules (dumb UI, no network/business orchestration).src/core: side effects (HTTP requests, WebSocket loop, async runtime, channels).
Top-level intent orchestration and event application happen in src/app.rs.
Documentation
- Crate-level docs for docs.rs are maintained in
docs/CRATE_DOCS.md(independent from this README). - HTTP/WebSocket API reference is maintained in
docs/HTTP_API.md.
Webserver Compatibility
The client targets csi-webserver APIs described in the reworked README, including:
GET /api/configPOST /api/config/resetPOST /api/config/wifiPOST /api/config/trafficPOST /api/config/csiPOST /api/config/collection-modePOST /api/config/log-modePOST /api/config/output-modePOST /api/control/startPOST /api/control/resetGET /api/ws
Build
Run
When the app starts, set host/port in the top bar to match your webserver (default 127.0.0.1:3000), then use the tabs:
Config: send configuration endpoints.Control: start/reset and connect/disconnect WebSocket.Stream: inspect frame counters and recent payload previews.Dashboard: view status and event history.
Development
cargo test is optional in the current codebase (few/no tests yet), but should be preferred for core/state logic whenever new behavior is added.
License
See LICENSE.