First public release — born from a Canon imageCLASS MF750 with a dead
touchscreen. Verified against a real MF750 on-device; recorded-device
fixtures (to replace the hand-built mocks) are the next milestone.
Added
- Discovery — finds printers on the LAN via mDNS + SNMP probes; manual
add-by-IP with a reachability pre-check when discovery finds nothing. - Control view — embeds the printer's Remote UI with a status strip,
error recovery (never a raw error page), and an open-in-browser fallback. - Navigation layer — full keyboard control (arrows/Tab, Enter, Esc,
`Ctrl+``) and gamepad control (D-pad/stick, A/B) with press-to-assign
remapping in Settings. - On-screen D-pad — pointer-driven arrows + OK + Back overlay with
hold-to-repeat, for driving menus with a mouse or touchscreen. - On-screen keyboard — appears automatically when a text field is
focused (Wi-Fi passwords, PINs); types via real text insertion; Enter
submits the printer's forms. - Offline recovery guide — when a printer can't be reached, ordered
recovery paths (Ethernet, Direct Connection AP, Canon's USB tool) right
in the error/empty states. - Profiles — multiple printers saved locally; Remote UI PINs stored in
the OS keychain (ElectronsafeStorage), never in plain files. - Adapters — per-model support as data (
adapters/canon-mf750.json
first), with a generic fallback adapter so unknown printers stay usable. - Onboarding — connect-first-printer flow; accessibility pass (screen-
reader labels, aria-live announcements, reduced motion). - Logging — structured local logs with secret redaction; local crash
capture. No remote reporting (seedocs/decisions/no-telemetry.md). - Fixture recorder (
scripts/record-fixtures.mjs) — records Remote UI
pages from a real device so tests never need a physical printer. - CI matrix (Windows + Linux) packaging NSIS + portable and AppImage + deb;
reproducible Linux build via Docker.
Security
- Hardened by default: the embedded page can only navigate within the
printer, all Chromium permissions are denied, crash capture and logs stay
on the device. Audit:docs/security-audit-2026-08-17.md(13 fixed,
4 accepted).