Relay 2.8.0
🔌 Now it works over the USB cable
Plug the phone into your laptop. Relay notices, and takes you to the one switch you have to flip.
| 🔌 | 👉 | ✔️ |
| Plug in | Tap “Turn on” | Over USB |
| Relay asks “Cable to your PC?” | It opens Android’s tethering switch | Both ends say so |
No Wi-Fi in range. No hotspot draining the battery. Nothing else sharing the airwaves with it.
Relay can’t flip that switch for you — USB tethering is a system setting and Android gives no app the permission — so it does the two things it can: notice the cable, and open the right screen.
What this does not claim: that a cable is faster. That was never measured, and a good 5 GHz link can beat USB 2.0. What is true by construction: nothing else shares the medium, it works with no Wi-Fi at all, and no battery goes on holding an access point up.
Also fixed — a phone on two links at once
A phone with a cable in and Wi-Fi on has two addresses, and the beacon only ever carried one. Every datagram was built from a single chosen address and broadcast on every interface — so the laptop on the cable was handed the phone’s Wi-Fi address, which it has no route to. The phone appeared in the list showing the right code, and connecting timed out for no visible reason.
- Each datagram now carries the address of the interface it leaves by, and names that link. The PC ranks them and takes the cable.
- Two live addresses are no longer read as a phone that moved — which used to make the PC re-point its tunnel back and forth for as long as both links were up.
- One phone on two links is no longer listed as two phones, which reported
ERR_CODE_AMBIGUOUSand asked you to choose between two rows that were the same device. - A phone with the hotspot up and a cable in put its hotspot address in the QR about half the time. The two scored equally and the winner was whichever interface the system listed first.
Verified on real hardware, not only in CI
CI has no cable to test with. On a phone and a laptop with both links live, running 2.7.1 as the PC client: it listed one phone, chose the cable address, and carried 35.5 MB three times — with the tunnel’s packets on the cable and Wi-Fi idle.
Full detail in the changelog.
Share your phone's internet with your PC. Tap Start Sharing on
the phone, click your phone in the list on the PC, tap Allow.
That is the whole setup.
Everything runs between your two devices: no account, no server, no
telemetry. The connection is an encrypted WireGuard tunnel, and
every application on the PC goes through it -- not only the browser.
Download
| Platform | File | Requirements |
|---|---|---|
| Windows | Relay-Setup-x64.exe |
Windows 10/11. Per-user install, no admin prompt. |
| Windows (32-bit) | Relay-Setup-x86.exe |
Only if you know you need it. |
| Android | Relay-android-arm64-v8a.apk |
Android 8.0+, 64-bit ARM — almost every phone since 2017. |
| Android (any device) | Relay-android-universal.apk |
Same app, every CPU type. Larger. Use this if the one above says "app not compatible". |
| Android (stores) | Relay-android.aab |
Not directly installable. |
Install
- Install both apps.
- On the phone, tap Start Sharing. Put both devices on the same
Wi-Fi, turn on the phone's hotspot, or plug in a USB cable -- with a
cable, Relay offers to switch USB tethering on for you. - On the PC, open Relay. Your phone is already in the list. Click it.
- Tap Allow on the phone.
No camera on the laptop? The two-digit code works on its own. Prefer
the QR? It is still there.
Windows SmartScreen warns on first run because the installer is not
code-signed yet: More info -> Run anyway. See docs/release.md.
If Android says "App not installed", that one message covers
several unrelated causes. The two most common: an older copy built
from source is still installed (uninstall it first - a different
signing key blocks the upgrade), or Play Protect blocked the
sideload (Install anyway in its dialog).
docs/install-troubleshooting.md
covers the rest, starting with how to see the platform's real error.
Verify your download
SHA256SUMS.txt is attached.
sha256sum -c SHA256SUMS.txtPrivacy and security
- Nothing leaves your two devices. No accounts, no servers, no
telemetry, no analytics. - The tunnel is WireGuard. Its keys are minted for each pairing and
destroyed when sharing stops. - Keys are never broadcast. The phone announces only enough to be
found; the keys travel over a short exchange that you approve on the
phone, with the requesting computer's address shown. - DNS and IPv6 cannot go around the tunnel. While connected, Relay
blocks name lookups to any resolver but the tunnel's, and refuses
IPv6 outright because the tunnel carries IPv4 only. Without this, a
laptop sharing a Wi-Fi with the phone leaks the local ISP. - Nothing outlives the app. No system-wide setting is changed, and
those filters are destroyed by Windows the moment Relay stops -- even
if it is killed -- so a crash cannot leave you unable to browse.
Anyone on your network can see the phone is sharing and can ask to
pair -- that request is what the Allow prompt is for, so do not
approve one you did not start.
SECURITY.md
has the full threat model.
What changed
The readable version, written for people rather than for git, is in
the changelog.
Every commit in this release
- Tell the laptop which way it reached the phone (#127)
- Give the cover something to say while you look at it (#123)
- Make the walkthrough play by itself (#122)
- Bump actions/setup-java from 5 to 6 in the github-actions group (#120)
- Stop saying the same sentence twice (#121)
- Draw the Persian buttons instead of fetching them (#119)
- Fix the cover, and give Persian equal billing (#118)
- Rebuild the README around restraint (#117)
- Playable walkthrough, a new cover, and the icon where it counts (#116)
- Redesign the README, and fix a banner that showed nothing (#115)
- Tell GitHub what the Android app depends on (#114)
- Bump the android-dependencies group in /android with 2 updates (#93)