Linux
Download the latest covelink-linux-amd64 binary from the Releases page, then:
chmod +x covelink-linux-amd64 sudo mv covelink-linux-amd64 /usr/local/bin/covelink covelink
The web UI opens automatically at http://localhost:8486.
To run CoveLink at login as a systemd user service:
mkdir -p ~/.config/systemd/user cp covelink.service ~/.config/systemd/user/ systemctl --user enable --now covelink
macOS
chmod +x covelink-macos sudo mv covelink-macos /usr/local/bin/covelink covelink
When macOS asks to allow incoming connections, click Allow. The web UI opens at http://localhost:8486.
Windows
Download CoveLink-windows-amd64.exe from the Releases page and run it. CoveLink appears in the system tray - right-click the icon to open the web UI or quit.
Windows Firewall will prompt to allow incoming connections - click Allow access. If SmartScreen warns about an unknown publisher, click More info → Run anyway.
Android app
Install CoveLink.apk from the Releases page. When prompted, grant all requested permissions. The most important one is Notification access - without it, notifications will not mirror.
Both devices must be on the same Wi-Fi network. Guest networks, mobile data, and VPNs that isolate devices will not work.
1 Open Settings in the desktop UI
Click Settings in the sidebar. A QR code appears under Pair new phone.
2 Scan on Android
Open the CoveLink Android app, tap Pair desktop, and point the camera at the QR code.
3 Done
Your phone appears in the Phones tab within seconds. The connection is end-to-end encrypted - nothing leaves your local network.
CoveLink needs TCP 52300 (hub) and UDP 44810 (discovery) open on the desktop. It tries to configure this automatically. If it fails, a ⚠ Firewall banner appears at the top of the UI - run the commands for your firewall:
ufw
sudo ufw allow 52300/tcp && sudo ufw allow 44810/udp
firewalld
sudo firewall-cmd --permanent --add-port=52300/tcp --add-port=44810/udp sudo firewall-cmd --reload
nftables
sudo nft insert rule inet filter input tcp dport 52300 accept sudo nft insert rule inet filter input udp dport 44810 accept
To persist across reboots add these rules to /etc/nftables.conf and run sudo systemctl enable --now nftables.
iptables
sudo iptables -I INPUT -p tcp --dport 52300 -j ACCEPT sudo iptables -I INPUT -p udp --dport 44810 -j ACCEPT
iptables-persistent and run sudo netfilter-persistent save to keep them after reboot.Once the ports are open, click I've fixed it in Settings → Firewall to dismiss the warning banner.
Notifications
Every notification from your phone appears in the Notifications tab in real time. From there you can:
- Reply inline - works with any app that exposes a reply action (WhatsApp, Telegram, Signal, Gmail, etc.).
- Trigger action buttons - the same actions available in your phone's notification shade.
- Dismiss - removes the notification from both desktop and phone.
- Snooze - hides the notification for 5 min, 15 min, or 1 hour.
To mute all notifications from a specific phone temporarily, open the Phones tab and use the mute button on that phone's card.
Messages (SMS)
Read and reply to SMS conversations from the Messages tab. Conversations are listed on the left; click one to open the thread on the right.
Use the ⚡ button in the reply box to insert a quick-reply template. Add templates in Settings → Quick Replies.
Phone calls
When your phone rings, a call banner appears at the top of the screen showing the caller's name and number. You can:
- Answer the call from the desktop.
- Decline and send it to voicemail.
- Mute mic or toggle speakerphone during an active call.
Media control
The Media tab shows what is currently playing on your phone. Control playback (play, pause, skip forward/back) and adjust volume without switching windows or picking up your phone.
Clipboard
The Clipboard tab shows the most recent text copied on your phone. Click Copy to desktop to paste it on your computer.
To push text to your phone, type or paste into the Send to phone box and click → Send.
Enable Clipboard History in Settings to keep the last 20 received items - useful if you copy multiple things in quick succession. History is stored locally and opt-in.
Files
Desktop → Phone: drag a file onto the drop zone in the Files tab (max 50 MB). It saves to Downloads on your phone.
Phone → Desktop: share any file to CoveLink from the Android share sheet. It saves to ~/Downloads on your desktop and an Open button appears in the Files tab.
Find Phone
Click 🔔 Find on a phone's card in the Phones tab. The phone rings at full alarm volume, overriding silent mode and Do Not Disturb. Click Stop to cancel the ring remotely.
Multiple phones and desktops
You can pair multiple Android phones to the same desktop. When two or more phones are connected, a phone switcher appears in the sidebar - select a phone to scope the Notifications, Messages, Media, and Clipboard tabs to that device.
For multiple desktops, pair your phone with one primary desktop. Other desktops on the same LAN connect to the primary and receive relayed notifications and messages - no extra battery drain on the phone. The sidebar shows a relay badge: primary desktops show Relaying to N desktops; secondary desktops show Secondary - relayed via N peers.
Use your phone screen as a wireless trackpad and keyboard for your desktop. Your phone must be connected and appear online in the Phones tab.
One-time setup - Linux
Add your user to the input group (needed to write to /dev/uinput), then log out and back in:
sudo usermod -aG input $USER
One-time setup - macOS
Grant Accessibility permission so CoveLink can inject pointer events: System Settings → Privacy & Security → Accessibility → enable CoveLink.
One-time setup - Windows
No extra setup required. SendInput works out of the box.
Using the trackpad
- Click 🕹 Trackpad on the phone card in the Phones tab.
- The CoveLink app on your phone opens the trackpad screen automatically.
- Tap ✕ or press Back to exit trackpad mode.
Gestures
- One-finger drag - move pointer
- Tap - left click
- Two-finger drag - scroll
- Left / Right click buttons (bottom bar) - explicit clicks
Phone can't connect
- Both devices must be on the same Wi-Fi. Guest networks and mobile hotspots isolate devices and will not work.
- Check that firewall ports are open (see Section 3 for Linux; on Windows, ensure CoveLink is allowed through Windows Firewall).
- Some corporate/managed Wi-Fi networks block device-to-device communication.
Notifications not appearing
- Check that Notification access is granted: Settings → Apps → Special app access → Notification access → CoveLink should be on.
- Disable battery optimisation for CoveLink on Android to prevent the OS from killing the connection.
Trackpad not working
- Linux: run
groupsin a terminal and confirminputis listed. If not, runsudo usermod -aG input $USERand log out/in. - macOS: confirm CoveLink has Accessibility permission in System Settings → Privacy & Security → Accessibility.
Connection keeps dropping
- Disable battery optimisation for CoveLink on Android (Settings → Apps → CoveLink → Battery → Unrestricted).
- On Xiaomi/MIUI devices, also disable MIUI optimisations in Developer Options.
Windows - SmartScreen / Firewall
- If SmartScreen blocks the app, click More info → Run anyway.
- When Windows Firewall prompts, click Allow access for both private and public networks.
- If you dismissed the prompt, open Windows Security → Firewall → Allow an app through firewall and add CoveLink for TCP 52300 and UDP 44810.