• v0.9.1 4106577a53

    ET Phone Home v0.9.1
    All checks were successful
    Claims ledger / Every README claim has a test (push) Successful in 4s
    Desktop FreeBSD / macOS (Apple Silicon + Intel) and Windows e2e, on the GitHub mirror (push) Successful in 6s
    Rust CI / Format Check (push) Successful in 12s
    Rust CI / Clippy (push) Successful in 50s
    Android CI / Lint (push) Successful in 1m37s
    Rust CI / Security Audit (push) Successful in 2m53s
    Android CI / Unit Tests (push) Successful in 2m38s
    Android CI / Build Debug APK (push) Successful in 2m55s
    Desktop FreeBSD / FreeBSD packages (amd64 + aarch64) (push) Successful in 2m47s
    Rust CI / End-to-end (real client + TUN + phone core, real internet) (push) Successful in 5m16s
    OpenWrt router packages / Build router packages (5 CPU families, ipk + apk) (push) Successful in 5m36s
    Desktop FreeBSD / Real FreeBSD 14 VM against the phone core (push) Successful in 13m8s
    Rust CI / Test (push) Successful in 1m59s
    Rust CI / Build Desktop GUI (push) Successful in 2m25s
    Rust CI / Build Linux (push) Successful in 3m6s
    Rust CI / Build Windows (push) Successful in 1m17s
    Desktop FreeBSD / Real OPNsense + pfSense CE VMs (plugin/package, phone as gateway, WAN failover) (push) Successful in 16m58s
    OpenWrt router packages / Real OpenWrt VMs (24.10 opkg + 25.12 apk) against the phone core (push) Successful in 6m55s
    Release / Build FreeBSD Release (pkg, amd64 + aarch64) (push) Successful in 2m48s
    Release / Build Linux Release (push) Successful in 3m18s
    Release / Build Windows Release (push) Successful in 3m23s
    Release / Build Desktop GUI (Linux) (push) Successful in 3m51s
    Release / Build OpenWrt router packages (push) Successful in 7m22s
    Release / Build Android Release (push) Successful in 3m3s
    Release / Publish Forgejo release (push) Successful in 51s
    Release / Sign the APK with the ETPH release key and attach it (push) Successful in 3s
    Release / Attach the macOS package (built + tested on the GitHub mirror) (push) Successful in 9s
    Release / SHA256SUMS over every release file (push) Successful in 19s
    Release / Verify the published release (push) Successful in 1s
    Publish to Google Play / diagnose (push) Has been skipped
    Publish to Google Play / build-release-aab (push) Successful in 3m23s
    Publish to Google Play / sign-and-publish (push) Successful in 48s
    Stable

    Ghost released this 2026-10-21 01:07:14 -07:00 | 52 commits to main since this release

    Added

    • macOS client: etph-macos-<version>.pkg (Apple Silicon + Intel, macOS 11+): menu-bar app, CLI and a launchd service that owns the tunnel (utun, no kernel extension), DNS for the tunnel through scutil, etph-uninstall. Installed and tested in CI on an Apple Silicon and an Intel Mac (HTTPS, DNS and a 5 MB download through the phone core, the service and ctl, clean uninstall). Not notarized yet: the first open needs Control-click > Open (docs/DESKTOP.md).
    • OPNsense plugin os-etph: Interfaces > Phone uplink (ETPH) (settings, phone status, ETPH Pro, traffic), a configd-driven service, and etph0 offered under Interfaces > Assignments even while the phone is away, so the phone can be a gateway in a gateway group (WAN failover). Tested on a real OPNsense 26.7 VM.
    • pfSense CE package pfSense-pkg-etph: Interfaces > Phone uplink (ETPH) with a Status tab, the ETPH service under Status > Services, etph0 assignable as an interface for gateways and gateway groups. Tested on a real pfSense CE 2.7.2 VM.
    • Both firewall tests run in CI (firewall-vms): a LAN client keeps HTTPS through the phone when the primary WAN goes down, the firewall's own default route follows, the uplink survives the WAN coming back and the phone going away and returning, and the packages uninstall cleanly.
    • FreeBSD packages for FreeBSD 14 and 15 (-freebsd14-, -freebsd15-): pkg(8) refuses a package built for another major version.

    Fixed

    • BSD firewalls: when the firewall reconfigures the assigned phone interface (pfSense "IPv4 Configuration Type: None" strips its addresses), the client puts the link address back within seconds and re-runs the up hook instead of leaving the uplink dead until the next reconnect.
    • OPNsense: after the phone reconnects, its gateway comes back online (the link returns with the same address, and OPNsense's address-change hook skipped it as "no IP change", leaving gateway monitoring on the old device).

    Known limits

    • Firewalls: the phone connects over Wi-Fi (tested); USB to a phone plugged into the firewall is offered but not yet tested there.
    • The macOS package is ad-hoc signed, not notarized (no Apple Developer ID yet).
    Downloads