AprilNEA / AprilNEA/OpenLogi

WebHID backend: the OpenLogi device layer in the browser

Open
#825 0 comments 0 reactions 0 assignees View on GitHub
area: hid area: web type: feature
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.