Browser one-shot installer
What this installer does, and what it refuses to do.
This page is the operator's reference for the browser installer preview. It is published both as part of the development site (dev.libreecho.org/install/) and on its own hostname (install.dev.libreecho.org); every path in the app is relative, so both serve the same files.
The install route
The browser installer implements the same no-short route as the host installer, with the browser as the USB host:
| Stage | What happens | What it checks |
|---|---|---|
| Release | The published release inventory is read. | SHA256SUMS is fetched or supplied, and the required assets are present. |
| Bundle | Payload bytes are selected locally. | Each file is hashed in the browser and compared with the release digest before it is used. |
| Device | WebUSB permission prompt, then a fastboot session. | product, unlock_status, the LK build description and the download size limit are read from the device. |
| Unlock | The per-LK-build payload is submitted to the brick target. | The payload is only eligible if the detected build has a declared entry; the name is reported and the outcome is explicit. |
| Recovery | ADB connects to TWRP. | Recovery is confirmed before any write. |
| Stage | The verified files are pushed to /cache/libreecho-bundle. | Every pushed file is re-hashed with the device's own sha256sum. |
| Prepare / Install | The recovery installer zip is run over ADB, twice if a reboot is required. | The installer's own receipt at /cache/libreecho-install-receipt is read back after each run. |
| Verify | The device is rebooted. | A successful receipt is required; nothing is claimed about runtime behaviour. |
Why the payloads come from your own download
Measured from a GitHub Pages origin (the development site), a browser can read api.github.com and raw.githubusercontent.com, but it cannot read github.com/<owner>/<repo>/releases/download/…: the redirect response carries no Access-Control-Allow-Origin header, so the fetch fails before any bytes are readable. The network path itself works — the response simply cannot be read by a page.
Two honest consequences:
- Default: download the release assets with your browser from the release page, then select them (or the whole folder) in the installer. Verification against the release's own
SHA256SUMSstill happens in the browser, so the integrity gate is unchanged. - Release download mirror: by default the installer reads release files from
https://dl.libreecho.org, a read-only CORS pass-through to the GitHub release download URLs. It is untrusted transport: every file is still checked against the release'sSHA256SUMS.?mirror=https://…points at a different mirror and?mirror=(empty) turns it off. The maintained installer, with automatic download of the whole bundle, is published at install.dev.libreecho.org.
Browser requirements
- Desktop Chromium-family browser (Chrome, Edge, Brave, Opera). Firefox and Safari do not expose WebUSB.
- HTTPS (or
localhost): WebUSB requires a secure context. GitHub Pages is HTTPS. - Direct device connection: a data-capable cable, and no hub in between if the device is fussy about enumeration.
USB identities the installer expects
The device chooser is filtered with the identities an Echo presents in each mode. The page needs no filter entry for a mode it does not use, but a missing entry means an empty chooser, so the unfiltered Show all USB devices… button exists as the escape hatch.
| Mode | USB identity | How it presents |
|---|---|---|
| Fastboot (stock or unlocked) | 0bb4:0c01 (measured), 18d1:4ee0–18d1:4ee7, 18d1:d00d, 0e8d:201c, 0e8d:2001 | Vendor-specific interface with a bulk in/out pair; getvar product answers. 0bb4 is HTC's vendor id and is what this platform has been seen to present in fastboot. |
| ADB — installed LibreEcho image | 18d1:d001 (measured) | Interface at class 0xFF subclass 0x42 protocol 0x01; product string MT8163-ARM32-ADB. |
| ADB — TWRP recovery | 18d1:4ee0–18d1:4ee7, 18d1:d00d | Same ADB interface triple; TWRP answers without an authentication token. |
| Preloader USB download | 0e8d:2000 (measured) | CDC-ACM pair, device class 2, product string like Failed to load LK. This is a download-mode state awaiting a host tool, not fastboot, and it resets on a timer if nothing connects. |
| Boot ROM (BROM) | 0e8d:0003 | Reached with the eMMC short or a cleared preloader header. |
These devices report device class 0 with per-interface classes, so a WebUSB classCode filter never matches them: an identity has to be named, or the chooser left unfiltered.
What the installer will not do
- It never downloads or guesses an unlock payload. Payload selection is bound to the device's own LK build description, and the file must come from the operator.
- It never retries an unlock submission after an unknown outcome. A timeout during
flash brickis reported as unknown and the run stops. - It never writes to
expdb,lk_a,lk_b,tee1,tee2,preloader, the GPT,persist,recovery,system_aorsystem_b. The recovery installer enforces that list; this page cannot widen it. - It never trusts a transfer result: pushed files are re-hashed on the device, and the install result comes from the installer's receipt.
- It never publishes a device identifier. Serials are masked in the UI and are not written to the log.
- It does not format or reshape partitions from the browser. That work exists in recovery (
sgdisk,mke2fs) and is done there, by the installer zip, on the device.
Status
This is a preview. The protocol layers (fastboot and ADB over WebUSB) are implemented and unit-tested against scripted devices; the browser UI, release verification and stage orchestration are implemented and exercised in the browser. No stage has been run against Echo hardware from a browser yet — that validation is the next gate, and until it is done the supported install route remains the published release and its guide.
Reporting
Use the installer's Save log button and attach the log with the exact release tag, the device mode you started from (stock fastboot or recovery), and the first message that did not match this page. Do not paste device serials, MAC addresses, Wi-Fi credentials or provider tokens.
← Back to the installer