Seamless Android RNDIS USB tethering for macOS (Apple Silicon & Intel). No Kernel Extensions. No SIP Changes. No Reboots.
BetterTether 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. It ships with a native macOS desktop app for controlling the daemon, monitoring traffic, and viewing logs from the menu bar.
- Zero System Security Changes: Unlike HoRNDIS, BetterTether runs entirely in userspace. You don't need to disable System Integrity Protection (SIP) or allow reduced security mode.
- Universal macOS Support: Native builds for both Apple Silicon (M1–M5) and Intel Macs.
- All Android Phones: Handles dynamic MAC address randomization across all Android devices, not just Samsung.
- Plug & Play: Automatically detects your phone, performs the handshake, and configures your Mac's routing/DNS instantly.
- Desktop GUI: Native macOS app with power button, traffic stats, log viewer, settings panel (uninstall, clear logs), and system tray menu — quits cleanly without leaving the daemon running.
macOS 15 introduces a strict "System Trust" model for network interfaces. BetterTether operates within these boundaries, leading to a split-networking experience:
Apps that use their own internal network or DNS libraries (DNS-over-HTTPS) bypass the OS "reachability" checks and work at full speed instantly:
- Browsers: Chrome, Firefox, Brave, Microsoft Edge.
- Meetings: Google Meet, Zoom, Slack, Microsoft Teams.
- Streaming: Netflix, YouTube, Spotify, Twitch.
- Developer Tools: Any connection to a raw IP address.
BetterTether properly registers the utun interface as the primary network service in the System Configuration dynamic store. Safari, App Store, and system software updates work without any extra configuration.
If you can ping 8.8.8.8 but websites fail to load, your mobile carrier might be dropping packets that are too large (a common 5G tethering issue). Fix by lowering the interface MTU to 1380:
sudo ifconfig utun6 mtu 1380BetterTether is built on a strict "local-only" and "least-privilege" security model.
- No Data Inspection: BetterTether simply routes encrypted and unencrypted packets between the macOS kernel (
utun) and the Android USB interface (libusb). It does not read, inspect, or modify the contents of your web traffic. - No Analytics: There is absolutely zero telemetry, tracking, or "call-home" functionality.
- Local Logs Only: Operational logs reside strictly on your local machine at
/var/log/bettertether.log.
- Virtual Interface Creation: Creating the
utuninterface requires kernel routing permissions. - Routing Table Modification: Injecting routes to prioritize the Android connection requires root.
- Hardware USB Binding: Opening raw protocol communication via
libusbrequires device-level access.
The core routing logic is written in modern Go and consists of fewer than 2,000 lines of code, making it trivially auditable.
Download the latest BetterTether-*.dmg from the Releases page. Mount it and drag BetterTether.app to your Applications folder.
First launch: Since BetterTether is downloaded from the internet, macOS Gatekeeper will block it the first time you open it. To allow it:
- Try to open BetterTether — you'll see "BetterTether can't be opened".
- Go to System Settings → Privacy & Security.
- Scroll down — you'll see a message about BetterTether being blocked. Click Open Anyway.
- Verify using your biometrics or password.
This only needs to be done once. After that, BetterTether opens normally.
The app will install the background daemon on first launch (requires admin password).
curl -sL https://raw.githubusercontent.com/s4wbvnny/BetterTether/main/install.sh | sudo bashPrerequisites:
brew install libusb pkg-config go nodeBuild the daemon + GUI app:
git clone https://github.com/s4wbvnny/BetterTether
cd BetterTether
make appThe .app bundle will be at build/BetterTether.app. Drag it to Applications.
Or build a DMG installer:
cd gui
npm run build
npx electron-builder --mac dmg --arm64 --x64DMGs will be in gui/dist/. Use the --arm64 flag for Apple Silicon only, or --x64 for Intel only.
- Launch BetterTether.app — it appears in the menu bar and dock.
- Connect your Android phone to your Mac via USB-C.
- Enable USB Tethering on your phone (Settings > Tethering > USB Tethering).
- Click the power button in the app to start the daemon.
The app shows real-time traffic stats (uploaded/downloaded), connection status, and a live log viewer. Use the Settings panel to clear logs or fully uninstall the daemon. Quitting via Cmd+Q or the tray menu stops the daemon cleanly but keeps it installed for next time.
If bettertether-uninstall was installed alongside the daemon:
sudo bettertether-uninstallsudo bash uninstall.shmacOS Gatekeeper blocks apps downloaded from the internet that aren't signed with an Apple Developer ID. BetterTether is ad-hoc signed, so you need to approve it once:
- Go to System Settings → Privacy & Security.
- Scroll down to the Security section.
- Click Open Anyway next the BetterTether message.
- Enter your password.
Alternatively, you can clear the quarantine flag from the terminal:
sudo xattr -rd com.apple.quarantine /Applications/BetterTether.appThen relaunch BetterTether. Either method only needs to be done once after installing from a DMG download.
- Contributing: See CONTRIBUTING.md.
- Security: Report vulnerabilities via our Security Policy.
- License: MIT
| Phone | Android | Mac | macOS |
|---|---|---|---|
| Samsung Galaxy S24 | 16 (One UI 8.0) | MacBook M3 Pro | Tahoe |
| Samsung Galaxy A55 | 16 (One UI 8.0) | MacBook M5 | Tahoe |
| Samsung Galaxy s9 | 15 (DuhanROM 4.3) | MacBook M3 Pro | Tahoe |
Intel Mac Support: The x64 DMG includes a native Intel Go binary and runs natively on Intel Macs.
