WebHID backend: the OpenLogi device layer in the browser
- Dominant language
- Rust
- Stars
- 21k
- Forks
- 675
- Avg merge
- 2d 5h
- Merged PRs (30d)
- 172
Description
## Summary
Run the HID++ device layer in Chromium via WebHID, so a browser can talk to receivers and devices with nothing installed: battery, firmware info, DPI, SmartShift, pairing. This is a configurator/diagnostic surface, not a web port of the app — without the agent's hook/inject there is no remapping, no per-app profiles, no Actions Ring. That positioning is a product decision and gets a docs/DECISIONS.md entry as part of this epic.
## Why this is within reach
- PR #772 cut the tree at `HidBackend`: `openlogi-device` is protocol + policy handed a backend, and the `wasm (portable crates)` CI job already gates `openlogi-hidpp`, `openlogi-device`, and `openlogi-core` (no `fs`) on `wasm32-unknown-unknown`. A WebHID backend is an added crate, not another split.
- Logitech's own logiwebconnect.com pairs and updates Unifying/Bolt receivers over WebHID, so the vendor collections we need are reachable from Chromium. Chrome blocks protected (keyboard/mouse) top-level collections, but HID++ rides vendor collections (0xFF00/0xFF43).
## What the wasm CI gate does not cover
The CI job is a `cargo check`: it proves the dependency graph, not runtime. Two known runtime landmines are in the tree on purpose: `std::thread::spawn` (hidpp read loop) and `tokio::time` (inventory/write timeouts, panics on wasm32-unknown-unknown). They are the first two sub-issues.
## Non-goals
- Button remapping, per-app profiles, Actions Ring — host-side by nature.
- Non-Chromium browsers: Safari and Firefox have declined WebHID; the web surface must degrade to an explanation (or a mock demo).
## Tasks outside the sub-issues
- [ ] docs/DECISIONS.md: record the "device configurator, not a web Options+" positioning.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the HidBackend boundary and the openlogi-hidpp, openlogi-device, and openlogi-core crates, then inspect the existing wasm (portable crates) CI job. Review the two runtime sub-issues involving std::thread::spawn and tokio::time, and record the configurator—not web Options+—positioning in docs/DECISIONS.md; done means the WebHID backend works for the stated device operations in Chromium.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust, wasm
- Domain
- embedded-iot, web-dev
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100