Repository navigation
Releases: AA-EION/TetherKitNext
Release list
TetherKitNext v1.2.0
Install
- Download TetherKitNext-1.2.0.dmg, open it, and drag TetherKitNext to Applications.
- Open TetherKitNext from Applications and click Enable Background Component; allow it once in System Settings › General › Login Items & Extensions.
- Plug in your Android phone, turn on USB tethering, and click Connect.
Optional: Settings › Command-line tool › Install Command links tetherkitnext-cli into /usr/local/bin.
Universal build (Apple Silicon + Intel), macOS 14 Sonoma or later (bundled CLI supports macOS 13.3+).
Signed with Developer ID and notarized by Apple.
Coming from TetherKit 0.2.0 (beta 1–3) or upstream TetherKit?
TetherKitNext installs alongside the old TetherKit app instead of replacing it. Remove the old app and its background helper first so both do not compete for your USB device: see the upgrade steps.
What's Changed
• Multi-Language Localization (Spanish, Japanese, German, Korean) (LocalizedStrings.swift, Localization.swift, LocalizationTests.swift):
• Added complete translations for Spanish (es), Japanese (ja), German (de), and Korean (ko) across the entire user interface, status notices, menu items, and background helper messages.
• Expanded language selection in Settings › General › Language to support all six languages alongside English and Simplified Chinese, with automatic resolution from macOS preferred languages.
• Updated LocalizationTests with 100% placeholder, index, and parameter type coverage across all supported locales.
• In-App Licenses Viewer (LicensesSheet.swift, SettingsPage.swift):
• Added a dedicated licenses viewer sheet directly inside the app under Settings › About › View Licenses.
• Displays licenses for TetherKitNext (MIT), bundled libusb (LGPL 2.1), and third-party notices, with offline embedded fallbacks.
• Added a button to reveal the licenses folder directly in Finder.
• Support & Donations (SettingsPage.swift):
• Added a Support & Donations section in the Settings page with a direct PayPal donation link and a one-click button to copy the donation email.
• Graceful Disconnect & Session Teardown (HelperService.swift):
• Cleaned up background session teardown when a device is unplugged or enters a failed/stopped state: drains pending session notices, resets helper state, and stops the dead session asynchronously on a background queue without stalling XPC status queries.
• Kept connection failure notices visible in the UI instead of prematurely resetting the interface to idle.
Full Changelog: v1.1.1...v1.2.0
Checksum (SHA-256)
4fdac814ed1aea8906c2ee9917de27a926fa761f51d9694ab7ebbc380b2e5c2c TetherKitNext-1.2.0.dmg
TetherKitNext v1.1.1
Install
- Download TetherKitNext-1.1.1.dmg, open it, and drag TetherKitNext to Applications.
- Open TetherKitNext from Applications and click Enable Background Component; allow it once in System Settings › General › Login Items & Extensions.
- Plug in your Android phone, turn on USB tethering, and click Connect.
Optional: Settings › Command-line tool › Install Command links tetherkitnext-cli into /usr/local/bin.
Universal build (Apple Silicon + Intel), macOS 14 Sonoma or later (bundled CLI supports macOS 13.3+).
Signed with Developer ID and notarized by Apple.
Coming from TetherKit 0.2.0 (beta 1–3) or upstream TetherKit?
TetherKitNext installs alongside the old TetherKit app instead of replacing it. Remove the old app and its background helper first so both do not compete for your USB device: see the upgrade steps.
What's Changed
- Reliable Background Component Restart (
HelperInstaller.swift,AppModel.swift,OnboardingView.swift):- Fixed
HelperInstaller.reregister()failing on the first click (Operation not permitted) becauseSMAppService.unregister()returns beforelaunchdremoves the job.reregister()now waits for the status to leave.enabledand retriesregister()with backoff (~14 s total). AppModel.refresh()now preserves the current UI state during an active restart instead of briefly switching to the setup steps while the daemon restarts, and extends the launch wait timeout to 10 s.- Simplified the XPC protocol mismatch card to "Restart the background component to finish updating" without showing internal protocol revision numbers.
- Fixed
- Mounted DMG Disk Icon Fix (
scripts/make-dmg.sh):- Re-copies
.VolumeIcon.icnsand re-applies thekHasCustomIcon(0x0400)FinderInfoflag after Finder's AppleScript layout pass (which removed.VolumeIcon.icns), and verifies.VolumeIcon.icnsis present in the converted UDZO image.
- Re-copies
Full Changelog: v1.1.0...v1.1.1
Checksum (SHA-256)
b74a77f31c94ce75bd7a2af455fb352e5f068c2c1c5e54504eacce164016e006 TetherKitNext-1.1.1.dmg
TetherKitNext v1.1.0
Install
- Download TetherKitNext-1.1.0.dmg, open it, and drag TetherKitNext to Applications.
- Open TetherKitNext from Applications and click Enable Background Component; allow it once in System Settings › General › Login Items & Extensions.
- Plug in your Android phone, turn on USB tethering, and click Connect.
Optional: Settings › Command-line tool › Install Command links tetherkitnext-cli into /usr/local/bin.
Universal build (Apple Silicon + Intel), macOS 14 Sonoma or later (bundled CLI supports macOS 13.3+).
Signed with Developer ID and notarized by Apple.
Coming from TetherKit 0.2.0 (beta 1–3) or upstream TetherKit?
TetherKitNext installs alongside the old TetherKit app instead of replacing it. Remove the old app and its background helper first so both do not compete for your USB device: see the upgrade steps.
What's Changed
- Touch ID Confirmation for Privileged Actions (
UserPresence.swift,HelperService.swift):- Connect, Disconnect, network configuration, and CLI installation now confirm user presence with Touch ID (or Apple Watch / login password fallback via
LAContext.evaluatePolicy(.deviceOwnerAuthentication)) instead of the macOS administrator password dialog (AuthorizationCopyRights). - One confirmation covers 5 minutes, so Connect plus automatic DHCP configuration only prompts once.
- The privileged daemon (
com.tetherkitnext.helperd) accepts empty authorization tokens only when the XPC connection is pinned tocom.tetherkitnext.appsigned by the same Developer ID Team ID and the caller's UID belongs to the localadmingroup (falling back to the administrator dialog otherwise). - XPC protocol revision bumped (
4 → 5); after updatingTetherKitNext.appin/Applications, click Restart Background Component in Settings once when prompted.
- Connect, Disconnect, network configuration, and CLI installation now confirm user presence with Touch ID (or Apple Watch / login password fallback via
- Finder-Written DMG Window Layout & Custom Volume Icon (
scripts/make-dmg.sh):- The disk image installer window is now laid out directly by Finder via AppleScript on a read-write image before converting to UDZO, ensuring the Retina background image (
.background:background.tiff) and custom volume icon (0x0400FinderInfo flag) render reliably on clean macOS 15 and macOS 26 systems.
- The disk image installer window is now laid out directly by Finder via AppleScript on a read-write image before converting to UDZO, ensuring the Retina background image (
Full Changelog: v1.0.0...v1.1.0
Checksum (SHA-256)
b2a0af044a6e43a622a27be165ff52cf7b7895d11241234e3c20e218e318d011 TetherKitNext-1.1.0.dmg
TetherKitNext v1.0.0
TetherKitNext 1.0.0 is the first stable release of TetherKitNext: Android USB tethering on the Mac, as a normal app. There's no kernel extension, SIP stays on, and there's nothing to compile or install with Homebrew. It is signed with Developer ID and notarized by Apple, so it opens without security warnings.
Made by Issen Software Group. Based on TetherKit by XiaoMiku01 (forked from v0.1.5).
Highlights
- Download, drag, connect. One signed and notarized disk image for Apple Silicon and Intel Macs.
- No security trade-offs. No kext, no SIP changes, no Terminal commands, no Homebrew.
- Internet works right after you click Connect. DHCP is set up automatically.
- "Route all traffic" really does. The phone becomes your Mac's main connection, for both routing and DNS, even when you are also plugged into a network without internet.
- Works with VPNs. The phone connection is registered as a real macOS network service, so VPN apps (for example FortiClient) can use it.
- Uses almost no CPU when idle. Before, it kept one core at 100%.
- Redesigned app with a guided first-run setup, a menu bar mode, and English and Chinese interfaces.
Install
- Download TetherKitNext-1.0.0.dmg, open it, and drag TetherKitNext into Applications.
- Open TetherKitNext and click Enable Background Component. macOS asks you to allow it once in System Settings › General › Login Items & Extensions.
- Plug in your Android phone, turn on USB tethering, and click Connect.
Optional: Settings › Command-line tool › Install Command makes tetherkitnext-cli available in Terminal.
Requires macOS 14 Sonoma or later (the bundled command-line tool also runs on macOS 13.3+). Universal build (Apple Silicon + Intel).
Upgrading from TetherKit (0.2.0 betas or upstream 0.1.x)
TetherKitNext has a new app identity, so it installs next to the old TetherKit app rather than replacing it. Remove the old one first so the two don't compete for your phone. Follow the upgrade steps.
Taken care of automatically:
- the upstream
com.tetherkit.helperbackground helper and its files in/Library/PrivilegedHelperTools; - leftover TetherKit (feth…) entries in System Settings › Network.
Settings from the old app are not carried over, so choose your language, network mode and "Route all traffic" again.
What's new
Installing and updating
- Signed and notarized DMG. The app and the disk image are both notarized and stapled, so the first launch works even offline.
- Install window. Opening the DMG shows the app, an arrow and the Applications folder, with instructions in English and Chinese.
- Everything is inside the app. The interface, the background component, the command-line tool, and bundled copies of
libusband the driver library. Nothing is copied into/Library, and deleting the app removes all of it. - Universal binary. Native on Apple Silicon and Intel, including
libusb, which is built from a pinned, hash-verified source release. Homebrew is no longer needed (upstream #2). - Modern background component. It uses Apple's
SMAppService: you approve it once, and it appears under Login Items & Extensions. You can restart or disable it from Settings. - Outdated background component detection. The app notices when the background component is still running an older build, even one with the same version number, and offers a one-click restart.
- Command-line tool on your PATH. One click in Settings links
tetherkitnext-cliinto/usr/local/bin, and one click removes it. It never overwrites a file it didn't create. - Update check. An optional daily check against this project's GitHub releases. It only tells you about new versions and never downloads or installs anything.
Connecting and networking
- Automatic network setup on Connect. The mode chosen on the Network page (DHCP by default) is applied as soon as the phone connects. It reuses the password from Connect, so there's no second prompt. You can turn this off in Settings.
- "Route all traffic through this interface" now moves TetherKitNext to the top of the macOS service order, like Set Service Order in System Settings. Internet traffic and DNS both go through the phone, and macOS keeps it that way through later network changes.
- Real network service. DHCP mode registers a proper macOS network service instead of a temporary one. VPN providers and anything else that looks up the system's network services now see the phone connection (upstream #3, from upstream PR #4).
- Network settings are remembered across restarts.
App and interface
- Redesigned interface. A sidebar with Overview, Device, Network, Activity and Settings, and a single Connect/Disconnect button in the toolbar (⌘↩) and in the menu bar. It uses Liquid Glass on macOS 26, with matching materials on macOS 14 and 15.
- Step-by-step first-run setup: move the app to Applications, enable the background component, approve it in Login Items.
- New Settings page: background component status, restart and disable; command-line tool; language; menu bar speed; launch at login; update checks; About and licenses.
- Menu bar mode. Closing the window leaves TetherKitNext in the menu bar and hides the Dock icon, while the connection keeps running. The live speed shown in the menu bar is optional.
- English and Chinese, switchable from the app menu without restarting.
- New app icon, and an About window that credits Issen Software Group and the original TetherKit.
Bug fixes
- An idle connection kept one CPU core at 100%. The receive thread now sleeps when there is no traffic, and idle CPU drops to about 0.03% (upstream #5).
- Web pages wouldn't load while the Mac was also on a network without internet access (for example Ethernet to a closed LAN). "Route all traffic" changed only the route, so DNS still used the other network, and macOS reverted the route at the next network change. Fixed by the service-order change above.
- VPN apps reported "No network route to host" over the phone connection, because the connection wasn't a real network service (upstream #3).
- A route pointing at a dead gateway after connecting. Android first hands out a temporary 464XLAT address (192.0.0.x) before the real one. Routes are now installed only once the gateway has been stable for 2 seconds, and any stale route is replaced.
- DHCP connections were shown as "Manual" in the network status.
- After an update, the background component could keep running the previous build without the app noticing, so fixes didn't take effect until a reboot.
- The Dock icon stayed visible after closing the window.
- The speed in the menu bar changed width as the numbers changed, making nearby menu bar icons jump (upstream #1).
- Cleaning up after a crash could disconnect another running session, for example the old and new helper during an upgrade. Cleanup now leaves interfaces alone while the process that owns them is still running.
- The background component hung forever when started by hand. It now exits immediately with a clear message.
- Network settings weren't remembered between launches.
Security
A full audit of the code is published in docs/SECURITY-AUDIT.md. No backdoor or malicious code was found. These issues were fixed:
- (High) Any local program could connect to the root background component. The app and the background component now verify each other's code signature (same Developer ID team, exact bundle identifier). Every privileged action still requires administrator approval as a second layer.
- (High) Deprecated installer. The
AuthorizationExecuteWithPrivileges+setuid+ shell-script installer is replaced by Apple'sSMAppService. Nothing is copied into system folders anymore, so the installed files can't be swapped between approval and installation. - (Medium) A private macOS function was linked directly. A future macOS that removes it would have stopped the app from launching. It is now looked up at runtime, with a fallback.
- (Medium) Network settings were written without Apple's required lock, so they could clash with System Settings writing at the same time.
- (Medium) The update check could open any URL returned by the network. Only
https://github.comlinks are accepted now. - (Low) Helper tools started as root now get a clean, fixed environment.
Known limitations
- With static IP, DNS isn't verified yet. Only DHCP mode has been tested end to end.
- Heavy traffic in both directions at once increases latency (about 0.4 ms → 16 ms), though throughput holds up.
- Upload speed settles at either about 240 or about 300 Mbps. Both are stable and the cause isn't known yet. Download is about 325 Mbps on USB 2.0.
Found a problem? Please open an issue and attach the log from the Activity page.
Credits
Thanks to XiaoMiku01 for the original TetherKit driver, and to LefterisEvan for upstream PR #4. TetherKitNext is MIT-licensed; it bundles [libusb](https://libus...
TetherKitNext v1.0.0-beta.4 (test build)
Warning
Test build: not signed with a Developer ID and not notarized by Apple.
macOS will block it the first time. After copying TetherKitNext to Applications,
open System Settings › Privacy & Security and click Open Anyway, or run:
xattr -dr com.apple.quarantine /Applications/TetherKitNext.app
Because it is not signed with a real certificate, macOS may refuse to enable the
background component. sudo /Applications/TetherKitNext.app/Contents/MacOS/tetherkitnext-cli
works regardless.
Install
- Download TetherKitNext-1.0.0.dmg, open it and drag TetherKitNext to Applications.
- Open TetherKitNext and click Enable Background Component; allow it once in
System Settings › General › Login Items & Extensions. - Plug in your phone, turn on USB tethering, click Connect.
Coming from TetherKit 0.2.0 (beta 1–3)?
TetherKitNext is installed next to the old TetherKit app, not over it. Remove the old
one first so the two do not fight over the phone:
upgrade steps.
Universal build (Apple Silicon + Intel), macOS 14 or later.
SHA-256: a9375de360c373c614e1990a36e24ba9a4e4d2f6a2ca1f1011f04a9128a26bbd
Full Changelog: v0.2.0-beta.3...v1.0.0-beta.4
TetherKit v0.2.0-beta.3 (test build)
Warning
Test build: not signed with a Developer ID and not notarized by Apple.
macOS will block it the first time. After copying TetherKit to Applications,
open System Settings › Privacy & Security and click Open Anyway, or run:
xattr -dr com.apple.quarantine /Applications/TetherKit.app
Because it is not signed with a real certificate, macOS may refuse to enable the
background component. sudo /Applications/TetherKit.app/Contents/MacOS/tetherkit-cli
works regardless.
Install
- Download TetherKit-0.2.0.dmg, open it and drag TetherKit to Applications.
- Open TetherKit and click Enable Background Component; allow it once in
System Settings › General › Login Items & Extensions. - Plug in your phone, turn on USB tethering, click Connect.
Universal build (Apple Silicon + Intel), macOS 14 or later.
SHA-256: 44d04a4f00fd70c7119eb3cb639dd490ef6cea93eb506da4846087d4119bf9e4
Full Changelog: v0.2.0-beta.2...v0.2.0-beta.3
TetherKit v0.2.0-beta.2 (test build)
Warning
Test build: not signed with a Developer ID and not notarized by Apple.
macOS will block it the first time. After copying TetherKit to Applications,
open System Settings › Privacy & Security and click Open Anyway, or run:
xattr -dr com.apple.quarantine /Applications/TetherKit.app
Because it is not signed with a real certificate, macOS may refuse to enable the
background component. sudo /Applications/TetherKit.app/Contents/MacOS/tetherkit-cli
works regardless.
Install
- Download TetherKit-0.2.0.dmg, open it and drag TetherKit to Applications.
- Open TetherKit and click Enable Background Component; allow it once in
System Settings › General › Login Items & Extensions. - Plug in your phone, turn on USB tethering, click Connect.
Universal build (Apple Silicon + Intel), macOS 14 or later.
SHA-256: 465fa96f2d4c2a88e413e762c6c730cbbae3d81bdd061293c5b0fa78b2fcf35c
What's Changed
- TetherKitNext 0.2.0: signed universal DMG, SMAppService daemon, security fixes, Liquid Glass UI by @AA-EION in #1
New Contributors
Full Changelog: v0.2.0-beta.1...v0.2.0-beta.2
TetherKit v0.2.0-beta.1 (test build)
Warning
Test build: not signed with a Developer ID and not notarized by Apple.
macOS will block it the first time. After copying TetherKit to Applications,
open System Settings › Privacy & Security and click Open Anyway, or run:
xattr -dr com.apple.quarantine /Applications/TetherKit.app
Because it is not signed with a real certificate, macOS may refuse to enable the
background component. sudo /Applications/TetherKit.app/Contents/MacOS/tetherkit-cli
works regardless.
Install
- Download TetherKit-0.2.0.dmg, open it and drag TetherKit to Applications.
- Open TetherKit and click Enable Background Component; allow it once in
System Settings › General › Login Items & Extensions. - Plug in your phone, turn on USB tethering, click Connect.
Universal build (Apple Silicon + Intel), macOS 14 or later.
SHA-256: 8e7113db8e1d5a1895af7420fad1dc12e2c466f15377f493f33e5d600fd5074e
Full Changelog: https://github.com/AA-EION/TetherKitNext/commits/v0.2.0-beta.1