cat content/blog/2026/08/2026-08-23-tether.md

Tether: Linux + iPhone

// Aug 23, 2026

I didn't miss macOS, but...


When I went to Linux full time I was surprised to not miss much from macOS.


tldr; I made Tether to do all the things I did miss.


tether open showing imessages on linux


No AirPlay kinda sucked, but the one thing I kept wishing I had was what Apple calls "Continuity": the ability to send and receive iMessages and SMS, share files, sync clipboard, and see notifications from my iPhone on my computer.


In particular, that thing where OTP codes sent to Mail or Messages autofill into the login form I'm waiting for on the Mac. It sounds small, but that was the one thing I really missed!


It is impossible to fully implement all of Continuity on Linux, but Tether's goal is to do all of it that is technically possible.


Before you ask, I know KDE Connect exists. It's great! If you're on Android you should definitely use it. The problem is that it didn't do what I wanted and it's roadmap indicated it never would.


Origins


Tether started its life filling the major holes. Clipboard sync was first, I wanted the OTP flow and I knew this was going to be required, and it was also the easiest. This let me copy / paste between macOS and Linux (Wayland) and forced the project to build out all the foundation I knew it would need later.


I knew the App Store was going to be a hurdle so I shipped the iOS app first with only support for clipboard sync. There was a very basic tetherd daemon for the linux side but that was it.


Security was a first class citizen from day one.


I never skipped out on safety. The networking between iOS and Linux has been mTLS from the start, and both sides must agree before anything can communicate. Since then I've done Opus and then Fable bug / security sweeps regularly.


After that, file transfer was the obvious next step and that went in quick and easy.


Wat


As for mail and browser stuff, I'm not very creative. To be honest I've kinda cheated here. I use Zen Browser (Firefox) and Betterbird (Thunderbird) and both support WebExtensions very well. So, I just made a browser and mail extension to deal with OTP stuff.


The mail extension looks for OTP codes and sends them to the browser extension which looks for OTP input elements and autofills OTP codes as they arrive from mail.


It actually works great! The problem is broad support: if you use a different mail client you're kinda out of luck for now. I'd LOVE if someone wants to help with that stuff, but it's so far out of my comfort that I'll stick with the backend side for now.


Bluetooth Breakthrough


My understanding to this point was that there was no interface to iMessage / SMS directly. You could always run a proxy on a Mac and send and receive texts through that, but in my opinion that is not a solution. I tried it. Even with Tailscale it was an unpleasant experience.


Then I ran across ancs4linux and later BlueFerry and I was completely shocked. In particular, erikwb's protocol documentation, which finally gave me enough information to understand what was happening.


There was a licensing issue, these projects are GPL and Tether is and always will be MIT, but I wanted a clean room implementation in C++ anyway. Personally, I think putting an interoperability protocol implementation behind a copyleft license is a little unfortunate! I'd rather see something like this usable by anyone, regardless of the license of the project using it (libtether?).


Anyway, now that the truly hard problem was solved, implementation went about as smooth as you could expect a bluetooth integration would go (it's still a complete shit show in 2026). Problem after problem with no clear explanation, an automatic kicking machine, and a bunch of carefully tracked edge cases compensating for bluetooth's inadequacies.


But we got there.


And Tether now supports: iMessage, SMS, Notifications, Contact sync on Linux. In addition to its previous: File Transfer, Clipboard Sync, OTP handling.


And my damn text OTP codes FINALLY autofill in the web browser!


Why?


While I did scratch my own itch with this project, I genuinely want Tether to be for everyone. I don't get anything out of people using it other than the satisfaction of knowing that something I built is useful.


Contributions are welcome! Bugs, feature requests, translations, documentation, really anything would be wonderful.


If you're on Linux with an iPhone, I really hope you give it a try.

_