• v0.9.0 f7bd9e2b39

    ET Phone Home v0.9.0
    All checks were successful
    Desktop FreeBSD / macOS (Apple Silicon + Intel) and Windows e2e, on the GitHub mirror (push) Successful in 3s
    Claims ledger / Every README claim has a test (push) Successful in 55s
    Desktop FreeBSD / FreeBSD packages (amd64 + aarch64) (push) Successful in 4m31s
    Release / Build Linux Release (push) Successful in 3m1s
    Release / Build Windows Release (push) Successful in 3m2s
    Release / Build FreeBSD Release (pkg, amd64 + aarch64) (push) Successful in 3m8s
    Release / Build Desktop GUI (Linux) (push) Successful in 3m28s
    Release / Build Android Release (push) Successful in 3m22s
    Release / Build OpenWrt router packages (push) Successful in 8m43s
    Desktop FreeBSD / Real FreeBSD 14 VM against the phone core (push) Successful in 10m51s
    Release / Publish Forgejo release (push) Successful in 46s
    Release / Attach the macOS package (built + tested on the GitHub mirror) (push) Has been skipped
    Release / Sign the APK with the ETPH release key and attach it (push) Successful in 4s
    Release / Verify the published release (push) Successful in 0s
    Stable

    Ghost released this 2026-10-20 23:05:42 -07:00 | 62 commits to main since this release

    Added

    • Free and Pro. One app, two tiers. Free: sharing over USB with one computer, no speed cap, no time limit, started and stopped on the phone. ETPH Pro, a one-time in-app purchase in the Google Play app (US$15 or Play's local price; no subscription), adds Wi-Fi and Bluetooth, routers, several computers and routers, auto-start when the computer asks over USB plus waiting for the computer after a disconnect, and a data usage history. "Upgrade to Pro" screen with the feature list and the Play price, Restore purchase; a quiet status line instead of pop-ups. Google Play Billing 9.1: purchases are acknowledged, restored on a reinstall or new phone, pending payments wait for Play, refunds and revocations take Pro away at the next check (every app start, every Start); purchase signatures are checked on the phone; no server (docs/pro.md).
    • The phone enforces the split; computers and routers never need a licence. The handshake now carries who the client is (a random client id and its host name; routers say they are routers) and whether the phone has Pro. A refused client gets "Pro required on the phone: ..." and the desktop/router client prints it with "nothing needs to be bought or licensed on this computer or router", keeps retrying once a minute (so buying Pro on the phone just works), the GUI shows it, and LuCI shows whether the phone has Pro. Older clients still connect over USB as one computer.
    • Paired computers and routers on the phone, each with Forget (Free works with the computer used last; forget it to switch).
    • Auto-start on plug-in (Pro): when the computer finds the phone on USB with nothing listening, it asks the phone to start sharing (adb shell am start ... AutoStartActivity, also through the routers' built-in ADB host), once per plug-in, so a Stop on the phone is respected until the cable is replugged. Switch "Start when the computer asks" on the phone.
    • Data usage (Pro): per computer/router (today, this month, 30 days) and by kind of traffic (web, QUIC, DNS, email, SSH, calls, VPN, NTP, ping), kept on the phone only.
    • Desktop: --router (set by OpenWrt's proto etph), $ETPH_CLIENT_ID/$ETPH_CLIENT_NAME; the status file has phone_pro.
    • USB without Developer options (routers and Linux computers). The client talks to the phone as an Android Open Accessory: plug the phone in, tap OK on "Open ETPH ...?" once, and the link comes up; no USB debugging, no adb. The ADB route stays as a fallback (--usb-link auto|aoa|adb, LuCI "USB link"). The phone coalesces frames into 16 KiB accessory transfers.
    • USB works in every app mode: a phone in Wi-Fi or Bluetooth mode still accepts a computer or router on USB.
    • The phone names what it shares with ("Router: slate (GL.iNet GL-AR750S, OpenWrt)", or the computer's host name).
    • Windows installer: etph-windows-<version>.msi (CLI, tray app, the ETPH tethering service, bundled Wintun) and winget manifests (etph-winget-<version>.zip).
    • ETPH Pro purchases are checked on the phone against the app's Play licence key: an unsigned or wrongly signed purchase never unlocks Pro.
    • FreeBSD 14 packages (amd64, aarch64): pkg add, an rc.d service and etphonehome ctl, tun(4) + resolvconf(8); tested on a real FreeBSD 14.4 VM.

    Known limits

    • macOS, pfSense and OPNsense clients come in a 0.9.x update.
    • Windows USB still needs USB debugging (the accessory link is Linux/router only).

    Changed

    • Free: when the computer disconnects, sharing stops (tap Start again); Pro keeps waiting for it.

    Fixed

    • Desktop/router: a filter rule with an address or port typo (dest_ip = "10.0.0.0/24/8", "010.0.0.1", dest_port = "443-80" or "8o") silently did nothing: the computer never matched it and the phone dropped it, so a BLOCK rule blocked nothing. A profile with such an enabled rule is now refused before connecting, with the rule and field named.
    Downloads