{"id":49486595,"url":"https://github.com/zackb/tether","last_synced_at":"2026-06-28T07:01:16.293Z","repository":{"id":350792157,"uuid":"1208291223","full_name":"zackb/tether","owner":"zackb","description":"Linux + iPhone Continuity","archived":false,"fork":false,"pushed_at":"2026-06-27T05:11:35.000Z","size":4107,"stargazers_count":5,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-27T05:14:26.428Z","etag":null,"topics":["iphone","linux","wayland"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zackb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-12T04:31:45.000Z","updated_at":"2026-06-27T05:11:40.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/zackb/tether","commit_stats":null,"previous_names":["zackb/tether"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/zackb/tether","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zackb%2Ftether","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zackb%2Ftether/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zackb%2Ftether/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zackb%2Ftether/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zackb","download_url":"https://codeload.github.com/zackb/tether/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zackb%2Ftether/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34880189,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-28T02:00:05.809Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["iphone","linux","wayland"],"created_at":"2026-05-01T02:03:39.953Z","updated_at":"2026-06-28T07:01:16.288Z","avatar_url":"https://github.com/zackb.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"![tether](docs/img/tether_header.png)\n\n# Tether\n\n\u003e Bridge your iPhone to the Linux Wayland desktop\n\n**Tether** aims to support all of the [Apple Continuity](https://www.apple.com/macos/continuity/) features on Linux that are technically possible. If you've migrated away from macOS but still carry an iPhone, Tether provides the missing ecosystem integration.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\n[![Platform: Linux](https://img.shields.io/badge/Platform-Linux%20Wayland-blue.svg)](https://wayland.freedesktop.org/)\n\n[![Get the Firefox Add-on](https://img.shields.io/badge/Firefox-Add--on-orange.svg)](https://addons.mozilla.org/en-US/firefox/addon/tether-browser-extension/)\n\n[![Get the Thunderbird / Betterbird Add-on](https://img.shields.io/badge/Thunderbird-Add--on-orange.svg)](https://addons.thunderbird.net/en-US/thunderbird/addon/tether-mail-extension/)\n\n[![iOS: 16+](https://img.shields.io/badge/iOS-16%2B-purple.svg)](https://apps.apple.com/us/app/tether-linux-companion/id6762097135)\n\n[![Download on the App Store](https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg)](https://apps.apple.com/us/app/tether-linux-companion/id6762097135)\n\n## Features\n\n| Feature | Status |\n|---------|--------|\n| **Clipboard Sync** | ✅ Stable |\n| **File Transfer** | ✅ Stable |\n| **iOS App** | ✅ Stable |\n| **Browser Extension** | ✅ Stable |\n| **Mail Extension** | ✅ Stable |\n| **TOTP/OTP Vault** | 🗓️ Planning |\n\n### Clipboard Sync\nSeamlessly share your Wayland compositor (`wlr-data-control`) clipboard over the Tether network. Text copied on your Linux desktop appears instantly on your iPhone, and vice versa.\n\n### File Transfer\nDrag and drop files from Linux directly into the iPhone app, or receive files automatically deposited to your `$XDG_DOWNLOAD_DIR`.\n\n### Device Pairing\nSecurely pair devices using **Mutually Authenticated TLS (mTLS)**, restricting TCP traffic securely using X.509 RSA certificates.\n\n### OTP Handling\nStreamline two-factor authentication across your devices:\n- iOS Share Extension: Send OTP codes from your iPhone to your Linux clipboard.\n- Thunderbird Addon: Automatically parse OTP codes from incoming email messages.\n- Browser Extension: Autofill OTP codes into login forms from the iOS app or the mail extension.\n\n### Browser \u0026 Mail Extensions\nA unified WebExtension that works across Thunderbird/Betterbird and Firefox/Chromium browsers:\n\n- **Thunderbird/Betterbird:** Detects OTP codes in incoming emails (verification codes, 2FA messages) and copies them to the clipboard or sends them to the Tether daemon for vault storage\n- **Firefox/Chromium:** Autofills OTP codes into login forms by retrieving secrets from the Tether vault, with one-click verification for sites using TOTP-based 2FA\n\nThe extension communicates with `tetherd` via native messaging. This allows users to autofill OTP codes into websites when the email arrives. \n\n## Architecture\n\nTether uses a multi-component architecture:\n\n1. **`tetherd` (Linux Daemon)** — A background C++ process built on `epoll` and Wayland protocols via `hyprwayland-scanner`. Anchors the Linux clipboard and broadcasts events over UNIX Domain Sockets (`$XDG_RUNTIME_DIR/tether/tetherd.sock`). Network traffic securely traverses local TCP via OpenSSL.\n\n2. **`tether` (CLI)** — A lightweight C++ CLI program to communicate with the daemon. This also allows the WebExtension to interface with the daemon via native messaging.\n\n3. **`tether-gtk` (GTK App)** — A native GTK4 application for Linux that provides a graphical interface to manage devices, send files, trigger clipboard sync, and monitor connection status.\n\n4. **iPhone App** — Native SwiftUI iOS 16+ app that discovers the daemon via Bonjour/mDNS, utilizing Apple's `Network.framework` for secure TLS negotiation.\n\n5. **Browser/Mail Extension** — WebExtension that interfaces with the daemon via native messaging. Use with Thunderbird/Betterbird and Firefox or Chromium-based browsers.\n\n## Requirements\n\n### Linux\n- **Wayland compositor** with `wlr-data-control` protocol (Hyprland, Sway, etc.)\n- **Linux 5.15+** with glibc\n- **Build tools:** CMake, Ninja, pkg-config\n\n### Dependencies\n- `wayland-client`\n- `openssl`\n- `pkg-config`\n- `ninja`\n- `gtk4` (for `tether-gtk`)\n- `nlohmann-json`\n- `glib2`\n\n### iOS\n- iOS 16+\n- Get the app: [Tether - Linux Companion](https://apps.apple.com/us/app/tether-linux-companion/id6762097135)\n\n### Browser Extension\n- Firefox: [Tether Browser Extension](https://addons.mozilla.org/en-US/firefox/addon/tether-browser-extension/)\n\n## Installation\n\n### Arch Linux\n\n```bash\nyay -S tether\n```\n\n### Build from Source\n\n```bash\n# Clone the repository\ngit clone https://github.com/yourusername/tether.git\ncd tether\n\n# Build with CMake presets\nmake debug\n\n# Run the daemon\nmake run-daemon\n```\n\nThe daemon uses an advisory lock (`$XDG_RUNTIME_DIR/tether/tetherd.lock`) ensuring only one instance controls the Wayland connection at a time.\n\n## Quick Start\n\n1. **Build the project:**\n   ```bash\n   make debug\n   ```\n\n2. **Start the daemon:** (optional, the GTK app will auto-launch it if not running)\n   ```bash\n   make run-daemon\n   ```\n\n3. **Launch the GTK app** (optional, for GUI-based device management):\n   ```bash\n   make run-gtk\n   ```\n\n4. **Pair your devices** (select the auto-discovered iPhone from the GTK app or CLI):\n   ```bash\n   ./build/debug/tether pair\n   ```\n\n5. **Start syncing** clipboard and transferring files\n\n## Roadmap\n\n- [x] Complete iOS app development\n- [x] Add end-to-end encryption for file transfers\n- [x] Release browser extension for Firefox\n- [x] Release mail extension for Thunderbird\n- [ ] Implement TOTP/OTP vault with Safari autofill\n- [ ] Explore macOS support\n\n## Contributing\n\nContributions are welcome! Please read our contributing guidelines before submitting PRs.\n\n## License\n\nTether is licensed under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzackb%2Ftether","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzackb%2Ftether","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzackb%2Ftether/lists"}