Seamless Android RNDIS USB tethering for Apple Silicon Macs. No Kernel Extensions. No SIP Changes. No Reboots. π
DroidTether is a lightweight userspace daemon that brings high-performance USB tethering to macOS by implementing the RNDIS protocol via libusb and routing traffic through the native utun interface.
- π Zero System Security Changes: Unlike HoRNDIS, DroidTether runs entirely in userspace. You don't need to disable System Integrity Protection (SIP) or allow reduced security mode.
- β‘ Apple Silicon Native: Built from the ground up for M1, M2, M3, and M4 Macs.
- π€ Samsung Friendly: Includes a specialized workaround for Samsung's dynamic MAC address randomization on tethering interfaces.
- π Plug & Play: Automatically detects your phone, performs the handshake, and configures your Mac's routing/DNS instantly.
DroidTether is built on a "local-only" model.
- π 100% Open Source: Every line of code is available for audit in this repository.
- π« No Telemetry: No tracking, no analytics, and no "call-home" features.
- π Local Connectivity: All networking happens strictly between your Mac and your Android device. No external servers are involved in the packet relay process.
- π΅οΈ Log Privacy: Logs reside only on your local machine at
/var/log/droidtether.logfor debugging purposes.
π Audit Note: The entire core logic of DroidTether is contained in less than 2,000 lines of Go code, making it exceptionally easy to audit for security and transparency. We believe in simplicity and clear source code as the ultimate form of trust.
| Phone Name | Android Version | Host Name | OS Version | Results |
|---|---|---|---|---|
| Samsung Galaxy S24 | 16 (One UI 8.0) | MacBook Air M4 | macOS Tahoe | 290 Mbps π |
| Samsung Galaxy A55 | 16 (One UI 8.0) | MacBook Air M4 | macOS Tahoe | Stable β |
Verified with full bidirectional traffic and global DNS resolution.
Open your terminal and paste this one-liner to install DroidTether and start the background service:
curl -sL https://raw.githubusercontent.com/HelloPrincePal/DroidTether/main/install.sh | bashTo completely remove DroidTether, its configuration, and the background service:
curl -sL https://raw.githubusercontent.com/HelloPrincePal/DroidTether/main/uninstall.sh | bashIf you prefer to build from source:
Ensure you have the following installed:
- Go (1.21+)
libusbandpkg-config(Install viabrew install libusb pkg-config)
git clone https://github.com/HelloPrincePal/DroidTether
cd DroidTether
make buildsudo ./build/droidtetherBecause DroidTether operates at the system network level, it requires elevated privileges for specific operations:
- Network Interface Management: Creating and configuring the virtual
utuninterface on macOS is a kernel-restricted task. - Routing Table Injection: Updating your Mac's routing table to prioritize the phone's internet connection requires superuser permissions.
- Log Management: Writing operational logs to
/var/log/droidtether.logfor system-wide transparency.
DroidTether performs these tasks purely in userspaceβno persistent kernel extensions are installed.
- Connect your Android phone to your Mac via a USB-C cable.
- Enable Tethering on your phone:
- Go to Settings βοΈ
- Search for Tethering
- Toggle USB Tethering to ON β
- Enjoy! DroidTether will log
β¨ Network auto-configured!. Your Mac is now using your phone's internet.
Once DroidTether is installed and your phone is connected, you can run these commands to verify the bridge is active:
sudo launchctl list | grep princePal
# Expected: A process ID (number) should appear, e.g., "67337 0 com.princePal.droidtether"ifconfig | grep -A 5 utun
# Expected: You should see a 'utun' interface with an 'inet' address (e.g., 10.x.x.x)route -n get google.com | grep interface
# Expected: interface: utunX (where X is your DroidTether interface number)tail -f /var/log/droidtether.log
# Expected: "π Traffic Monitor" logs showing received/sent data totals.ping -c 10 8.8.8.8
# Expected: 0% packet loss and stable round-trip times.
# Note: If latency is high, try switching your phone from 5G to 4G/LTE for better stability.If you want to stop the service momentarily without uninstalling:
sudo launchctl bootout system /Library/LaunchDaemons/com.princePal.droidtether.plistTo completely remove DroidTether, its configuration, and the background service:
curl -sL https://raw.githubusercontent.com/HelloPrincePal/DroidTether/main/uninstall.sh | bashIf you try to run the networkQuality command while using DroidTether, you may encounter an "offline" error. This is a known macOS behavior where high-level system utilities sometimes only bind to physical hardware services (WiFi/Ethernet).
Don't worry! Real-world high-performance tasks like Gaming, 4K Streaming, and Video Calling use the underlying data plane and are completely unaffected. For accurate benchmarks, we recommend using ping 8.8.8.8 or fast.com in your browser.
Feel free to reach out or follow the projectβs journey! π
π LinkedIn: Prince Pal
MIT β Β© PrincePal
Found a bug? Have a feature request for v1.0? Please open an issue or submit a PR!