One entry per git push. Semantic versioning (MAJOR.MINOR.PATCH).
- PATCH: bug fix, refactor, docs
- MINOR: new feature, new package
- MAJOR: breaking API or behavior change (v1+ only)
Pre-release: all versions are v0.x.x until brew install droidtether works end-to-end.
v1.0.0 = MVP complete and working on M1/M2/M3.
- Milestone: Reachability API Bypass & MTU Blackhole Fix
- What works: Documented and identified the macOS 15
NetworkReachabilityAPI bug which marksutuninterfaces as offline causing browsers to hang. Instructed users to keep a dummy Wi-Fi connection active. Also added themtu 1380fix for the MTU black hole problem common on 5G tethering. - Next: Build these fixes directly into the daemon (
daemon.go) or the launchd script.
- Milestone: Total Transparency & Technical Depth (Final Stable)
- What works: Established "Supplemental DNS" model for macOS 15; restored 100% of technical verification commands and security posture sections to README. Documentation now includes a comprehensive guide for bypassing macOS 15 native resolver restrictions.
- Technical Narrative: This version solidifies the project's shift from "Experimental System Hijacking" to "Professional Network Bridging." By accepting the OS-level security boundaries of macOS 15 (Tahoe), we have delivered the most stable packet-relay loop to date while providing users with the exact technical commands needed to audit and verify their own connectivity.
- Next: Homebrew Tap readiness audit and official v1.0 planning.
- Milestone: Multi-Vendor Stability (The "Recovery" Release)
- What works: Successfully unified support for Samsung (One UI 8.0) and Xiaomi (HyperOS 2.0).
- Technical Narrative: After the v0.8.4 regression (see below), we performed a "dirty" manual revert to the stable v0.8.3 baseline (
65aa959) to isolate hardware behavior. We discovered that Samsung devices require a precise 250ms "Stabilization Sleep" afterSET_CONFIGURATIONand proactive claiming of the Data interface before the RNDIS handshake finishes. This version combines the Xiaomi multi-config scanning with these new Samsung-specific stability fixes. - Next: DNS Interception and IPv6 "Fast Fail-over" (ICMPv6 Reject).
- Milestone: Multi-Vendor Compatibility (First Attempt)
- Status: REGRESSION DETECTED.
- Issue: This version successfully added Xiaomi HyperOS support but broke Samsung devices on Apple Silicon. The aggressive configuration switching caused a race condition where Samsung devices reported "Alternate Setting 1 not found" for Interface 1, even though the setting was physically present in the descriptor. The build was abandoned in favor of the more robust v0.8.5.
- Milestone: Transparency & Verification (The "Trust" Release)
- What works: Added
.github/SECURITY.mdfor private vulnerability reports. EnhancedREADME.mdandPRIVACY.mdwith sections on Why sudo is required, Audit Notes (~2k lines of Go), and Local-only connectivity. Verified commit signing via SSH is now active. - Next: Finalize Homebrew Formula logic for
brew installsupport.
- Milestone: One-Line Installer Stability (Production Ready)
- What works:
install.shnow correctly handles macOS "Error 5" launchctl bootstrap failures, initializes log files with correct permissions, and ensuresroot:wheelbinary ownership. FixedethTypedispatch logic inrelay.gousing an idiomatic tagged switch. - Next: Finalize Homebrew Formula logic for
brew installsupport.
- Milestone: Legal & Transparency (The "Professional" Release)
- What works: Added
LICENSE(MIT),PRIVACY.md, andCONTRIBUTING.md. Verified full compatibility with Android 16 (One UI 8.0) on macOS Tahoe 26.3.1(a). The project is now legally documented and ready for public contributions. - Next: Finalize Homebrew Formula logic for
brew installsupport.
- Milestone: One-Line Binary Distribution (Apple Silicon)
- What works: Automated GitHub Release pipeline for
darwin/arm64.install.shanduninstall.shscripts enable one-liner setup viacurl. Standardized system paths used for the background daemon (/usr/local/binand/etc/droidtether). The project is now effectively "Plug & Play" for any M-series Mac user without requiring a local Go compiler.
- Milestone: Release Automation Permissions Fix
- What works: Explicit
contents: writepermissions andpkg-configdependency added to GitHub Actions to allow successful CGO compilation and automated asset uploading.
- Milestone: "One-Touch" Installation Scripts
- What works: Created
install.shat repository root. Added--configflag todroidtetherbinary. Standardized CLI to support global system configurations.
- Milestone: Full network connectivity — DHCP + ARP + Ping working
- What works: Complete 4-step DHCP handshake (Discover→Offer→Request→ACK) with Android's randomized subnet. Dynamic ARP responder answers phone's ARP queries for our assigned IP. Samsung MAC randomization workaround auto-detects the phone's real current MAC from live traffic. Gratuitous ARP pre-populates phone's ARP cache. Bidirectional ICMP ping confirmed at ~5.9ms avg latency with 0% packet loss.
- What's broken: No default route injection yet (internet doesn't flow through phone). IP is hardcoded to DHCP-assigned values.
- Next: Default route injection, DNS forwarding, internet connectivity through phone.
- Milestone: Packet Relay Engine
- What works: Bidirectional shuttle service over USB Bulk Endpoints. Reads IP packets from macOS
utun, synthesizes Ethernet headers, wraps in RNDIS encapsulation, and pushes to Android. Strips RNDIS headers from Android replies and writes toutun. - Next: IP assignment and DHCP handling.
- Milestone: utun interface creation
- What works: Native macOS virtual interface creation (
utun). The daemon now spawns a real network interface on the Mac when the phone connects. - Next: Packet relay engine (Bulk transfer).
- Milestone: RNDIS handshake working (INIT/QUERY/SET)
- What works: Raw USB Control transfers for RNDIS encapsulated commands;
INIThandshake;QUERY MACaddress retrieval;SETpacket filter to enable promiscuous data mode. Confirmed on real device. - What's broken: No actual data transfer (bulk transfer) implemented yet.
- Next:
internal/tun/utun.gocreation and bulk packet relay.
- Milestone: USB device detection + hotplug watcher
- What works:
libusbdevice monitoring, RNDIS hardware identification, and background daemon. Validated on real Samsung Galaxy hardware. - What's broken: Handshake logic (requires
internal/rndis); connection drops immediately after detection (expected). - Next: Build
internal/rndishandshake sequences (INIT/QUERY/SET).
- Milestone: Internal structure + Config loader
- What works: Package layout with READMEs,
config/config.go, Go dependencies ingo.mod. - Next:
internal/usb/vidpid.goandinternal/usb/watcher.go.
- Milestone: Repo restructure + Go scaffold
- What works: documented layout (
docs/,config/,launchd/,Formula/,scripts/,.github/workflows/), minimaldroidtetherbinary (--version),make build/go test ./... - What's broken: daemon behavior (USB/RNDIS/utun/DHCP not implemented)
- Next:
internal/usb,internal/rndis, config loader inconfig/config.go
- Milestone: Repository scaffold
- What works: docs, file structure, Makefile skeleton
- What's broken: everything (no code yet)
- Next: Set up go.mod, implement internal/usb/device.go, internal/usb/vidpid.go
- Author: PrincePal
| Version | Milestone |
|---|---|
| v0.1.0 | Repo scaffold, docs |
| v0.2.0 | USB device detection + hotplug watcher |
| v0.3.0 | RNDIS handshake working (INIT/QUERY/SET) |
| v0.4.0 | utun interface created, packet relay active |
| v0.5.0 | DHCP working, IP assigned |
| v0.6.0 | Default route injected, internet flows |
| v0.7.0 | Daemon (launchd) auto-start working |
| v0.8.0 | Homebrew formula works locally |
| v0.9.0 | Full integration test passes on real Samsung device |
| v1.0.0 | Public release — brew install droidtether works |