Control your devices from anywhere.
β Features β’ π‘ Self Hosting β’ π Using Agent
Warning
Note about macOS support
This project was built mainly for my own use and has only been tested on Windows and Linux.
I do not have access to a macOS device, so the Electron app and the app itself have not been tested there. Things may not work as expected on macOS.
If you run into issues, feel free to open an issue. PRs are also welcome if you want to help improve macOS support.
- Power actions for Windows, Linux, and macOS
- Wake-on-LAN support
- See which devices are online or offline in real time
- Clean and simple UI
- Lightweight Electron app for your devices
- Export or Import your data as a single Relay backup file
- And much more...!
First, download Relay and enter the project folder:
git clone https://github.com/QuintixLabs/Relay.git
cd RelayUse one of these:
npm installDevelopment (auto-reload) :
npm run devProduction:
npm startBy default, the command runs at: http://127.0.0.1:3010. You can change this by setting the PORT value in .env.
Run Relay via Docker:
Create the config folder first:
mkdir -p ./configThen run:
docker run -d \
--name relay \
--network host \
-v $(pwd)/config:/app/config \
ghcr.io/quintixlabs/relay:latestOr use our docker-compose.yml, which is simpler.
Run these in the same folder as your docker-compose.yml file:
mkdir -p ./config
docker compose up -dAfter you host Relay on your machine, the next step is allowing the ports Relay needs so the Hub is reachable and Wake-on-LAN works properly.
-
3010/tcpis used for the Relay Hub -
9/udpis used for Wake-on-LAN
If you are hosting Relay on Linux, install firewalld on your distro first.
On Arch Linux:
sudo pacman -S firewalld
sudo systemctl enable --now firewalldThen allow the Relay ports:
sudo firewall-cmd --permanent --add-port=3010/tcp
sudo firewall-cmd --permanent --add-port=9/udp
sudo firewall-cmd --reloadβ Remove the ports on Linux
If you want to remove them later, run:
sudo firewall-cmd --permanent --remove-port=3010/tcp
sudo firewall-cmd --permanent --remove-port=9/udp
sudo firewall-cmd --reloadIf you are hosting Relay on Windows, open PowerShell as Administrator and run:
New-NetFirewallRule -DisplayName "Relay Hub TCP 3010" -Direction Inbound -Protocol TCP -LocalPort 3010 -Action Allow
New-NetFirewallRule -DisplayName "Relay Wake UDP 9" -Direction Inbound -Protocol UDP -LocalPort 9 -Action Allowβ Remove the ports on Windows
If you want to remove them later, run:
Remove-NetFirewallRule -DisplayName "Relay Hub TCP 3010"
Remove-NetFirewallRule -DisplayName "Relay Wake UDP 9"Important
Before setting up Relay Agent, make sure the device you want to control can actually reach your Relay Hub.
If that device cannot open your Hub URL, pairing will fail
β Recommended: Reach Relay Hub over Tailscale
This is the easiest and safest setup for most people.
- Install Tailscale on the machine running Relay Hub
- On the machine running Relay Hub, open Tailscale and copy its Tailscale IP
- Now check that the Hub opens on that address, for example
http://YOUR_HUB_TAILSCALE_IP:3010 - If it opens, use that address in Relay Agent as your Hub URL and move to the next step
β οΈ Not Recommended: Expose Relay Hub publicly
You can also expose the Hub publicly with a domain, but we do not recommend this unless you know exactly what you are doing.
- Expose Relay Hub with a reverse proxy, tunnel, or public HTTPS domain
- Now, check that the Hub opens on that public address, for example
https://relay.example.com - If it opens, use that address in Relay Agent as your Hub URL and move to the next step
After your Hub is running, the next step is to install Relay Agent on the device you want to control.
Download the Electron app for your OS below:
| OS | Download |
|---|---|
| πͺ Windows | Download |
| π macOS | Download |
| π§ Linux | Download |
Important
Relay Agent listens on its local port (0.0.0.0) and can be reached through any valid network address on that machine.
That means the Hub needs a real reachable address for that device.
You have 2 main ways to do this:
β Recommended: Tailscale
This is the easiest and safest setup for most people.
How it works:
- Install Tailscale on the machine running Relay Agent
- On the device Relay will control, open Tailscale and copy its Tailscale IP
- Open Relay Agent on that same device, then check
http://YOUR_TAILSCALE_IP:3020/health - If it responds, you'll use that IP in Relay Hub as the device Tailscale IP / Host when adding your first device
- Now move on to the next step, which is adding your first device in the Hub.
β οΈ Not Recommended: Expose the device online
You can also expose the device publicly with a domain or public IP, but we do not recommend this unless you know exactly what you are doing.
How it works:
- Open Relay Agent on the device you want to control, then check http://127.0.0.1:3020/health
- Expose http://127.0.0.1:3020 through a tunnel, reverse proxy, or forwarded public endpoint
- If it responds, keep the public domain or public IP from that setup ready. You'll use it in Relay Hub as the device Tailscale IP / Host.
- Now move on to the next step, which is adding your first device in the Hub.
If you do this:
- Use HTTPS
- Secure the endpoint properly
- Understand that public exposure is riskier than Tailscale
Open Relay Hub in your browser and then click on the + in the top right to Add a device.
You will mainly fill in:
- Name = Choose any name you want for that device
- Space = Choose the space you want it to belong to, mainly for organizing devices
- Tailscale IP / Host = Use the reachable address you chose earlier, such as a Tailscale IP or public domain
- Agent token = Agent Token is like a password so put a password for your device
- MAC address = Optional, only needed if you want to wake that device from Relay
π§ How to find your MAC address
Open Command Prompt or PowerShell and run:
getmac /vLook for the active adapter and copy its Physical Address.
Open Terminal and run:
ifconfigLook for the active network interface and copy the ether value.
Open Terminal and run:
ip linkLook for the active network interface and copy the link/ether value.
Relay Agent will sync the real OS and live port on its own after it connects.
After the device exists in Relay Hub, finish pairing inside Relay Agent.
You have 2 setup options:
βοΈ Set up manually
Use this if you want to type everything yourself.
Fill in:
- Hub URL = your Relay Hub address
- Agent token = the token from the device you added in Relay Hub
- Port = the local Relay Agent port, usually
3020
π Import config
Use this if you want a faster setup.
In Relay Hub, click the download button on that device row to download its config file, then import it in Relay Agent.
This fills the pairing details for you automatically.
After pairing:
- Relay Agent connects to your Hub
- the Hub should show the device
$\color{Green}{\textsf{Online}}$ - you can now control that device from Relay
That is the full setup ;]
Relay is Free Software: You can use, study, share and modify it at your will. The app can be redistributed and/or modified under the terms of the GNU General Public License version 3 published by the Free Software Foundation.

