Windows 10 / 11
SHA-256: —
Remote control of a computer from a phone or another PC: screen and input, terminal, files, power and sensors.
The desktop arrives as a stream of frames. A tap is a click, a long press the right button, two fingers scroll. From another PC the mouse and keyboard go to the remote machine entirely.
PowerShell or cmd, with administrator rights where they are needed. The session lives on the computer and survives the application being put away.
Browsing the drives, downloading and uploading, renaming and deleting. Text and images open inside the application.
Shut down, restart, sleep, hibernate and lock, at once or after a delay that can be cancelled. A sleeping computer is raised by Wake-on-LAN.
Processor, graphics card, memory, disks and network, refreshed once a second. A threshold rule sends a notification to the phone.
The process list with icons and a search, ending tasks, switching windows, starting installed programs.
App demo
The desktop client's window on sample data: the sections switch the way they do in the app. The phone app on sample data: the computer list, a PC's dashboard and its tools open the way they do in the app.
CPU
loadclock
Memory
18.4GB
of 31.9 GB
Swap · 2.1 GB / 8.0 GB
GPU 0NVIDIA GeForce RTX 4070
VRAM5.2 GB / 12.0 GB
2.35 GHzclock
10.50 GHzmemory
NetworkEthernet
Disks
C:\412 GB / 931 GB
D:\1.62 TB / 1.82 TB
System
uptime3d 4h 12m
logged inabdul
NameCPUGPUMemory
PowerShell 7.4.6PS C:\Users\abdul> Get-Process | Sort CPU -desc | Select -First 3 NPM(K) PM(M) WS(M) CPU(s) Id ProcessName 92 412.18 398.02 812.44 11244 chrome 71 280.33 301.51 402.10 8712 Code 38 118.90 214.07 355.72 1320 dwmPS C:\Users\abdul>
Core (Tctl/Tdie)
AMD Ryzen 9 7950X
min 41° · max 78°
CCD1 (Tdie)
AMD Ryzen 9 7950X
min 38° · max 71°
GPU Core
RTX 4070
min 34° · max 74°
GPU Hot Spot
RTX 4070
min 40° · max 86°
Composite
Samsung SSD 990 PRO
min 33° · max 55°
Motherboard
ProArt X870E-CREATOR
min 31° · max 44°
DIMM #1
Kingston FURY 32 GB
min 36° · max 52°
DIMM #2
Kingston FURY 32 GB
min 35° · max 51°
DrivesFavouritesC:UsersabdulDocuments
Name ↑SizeDateShow hidden
7 items
Drives
Home folderC:\Users\abdul
C:\
D:\
Favourites
DocumentsC:\Users\abdul\Documents
DownloadsC:\Users\abdul\Downloads
NameTypeSizeDate
7 items · 1 selected · 184 MB
Internetonline
DefaultEthernet
Gateway192.168.1.1
External IPNL185.107.56.23
DNS1.1.1.1
8.8.8.8
VPNnot active
Interfaces3
Ethernetup
Realtek Gaming 2.5GbE Family Controller
192.168.1.42
A8:A1:59:3C:0E:712.5 Gbit/s
Wi-Fidown
Intel Wi-Fi 7 BE200 320MHz
—
B4:8C:9D:21:6A:F0—
vEthernet (WSL)up
Hyper-V Virtual Ethernet Adapter
172.24.160.1
00:15:5D:A3:7C:0210 Gbit/s
Operating system10.0.26100.4652
Uptime3d 4h 12m
Agent1.0.5 · Python 3.12.7
Processor
AMD Ryzen 9 7950X 16-Core Processor
16cores
32threads
31.9 GBmemory
Motherboard
MotherboardASUSTeK COMPUTER INC. ProArt X870E-CREATOR WIFI
BIOS2102 · 06.03.2025
Displays2
Graphics
Storage
Network adapters
Realtek Gaming 2.5GbE Family ControllerIntel Wi-Fi 7 BE200 320MHzHyper-V Virtual Ethernet Adapter
When
The installer carries both the client and the agent. Choose “Connect to this PC” and turn the autostart on: Windows asks for administrator rights once.
Email and the code from the letter, or sign-in through Google. The server address is already filled in.
No port forwarding is needed: the agent and the application both connect to the server themselves.
The agent opens an outbound connection to the server itself. On a local network the application connects to the PC directly and checks the SHA-256 fingerprint of its certificate.
Phone to server and PC to server. Unencrypted transport is turned on only by the explicit --insecure flag, for debugging on a local network.
An Ed25519-signed access token lives 15 minutes, a refresh token 90 days and changes on every renewal. A refresh token presented twice revokes its whole family.
Passwords are argon2id; tokens, pairing codes and the codes from letters are SHA-256.
Computers, devices and codes belong to an account. Another account's identifier gets the same answer as one that exists nowhere.
120 requests per 10 seconds per device, dangerous commands 5 a minute, terminal input and the live screen 600 per 10 seconds.
Every command is a log line with the device, the arguments and the result. A device is revoked with one button; the IP addresses of sign-ins and visits are kept for 30 days and seen only by the server's operator.
Frames and files travel through the server, and it sees them as they pass.
The code in the letter confirms a new installation, not every sign-in.
While the session is locked or a UAC prompt is open, remote input is not accepted. Sensors, the terminal and files keep working.
The hub is one process and one SQLite file. There is no ready-made image: it is installed from a working copy of the repository. Pick where it runs.
Ubuntu 22.04 or 24.04 with a public IP, the domain’s A record pointing at it, ports 80 and 443 open.
Copy the code to the server and run the installer:
git archive --format=tar HEAD | gzip -9 > /tmp/remotek-src.tar.gz
scp -P 22 /tmp/remotek-src.tar.gz [email protected]:/tmp/
ssh -p 22 [email protected] 'mkdir -p /opt/remotek/app \
&& tar xzf /tmp/remotek-src.tar.gz -C /opt/remotek/app \
&& bash /opt/remotek/app/deploy/bootstrap-server.sh hub.example.com [email protected] 22'The script installs Docker, a firewall, the hub and Caddy, which gets the certificate for hub.example.com itself.
Create an account in the app: “Other server” → https://hub.example.com. The verification code is in the log:
docker logs remotek-hub-1 2>&1 | grep "verification code"The code arrives by email once the hub has a Resend key (REMOTEK_RESEND_API_KEY) and a sender address (REMOTEK_MAIL_FROM). Without them the code goes to the log.
On the PC, sign in to that account in Remotek for Windows as “Connect to this PC”. Then close registration: /admin → Pairing.
A Pi 5 with 64-bit Raspberry Pi OS, wired to the router, with a fixed DHCP address.
Clone the repository into ~/remotek and install the hub as a service from that folder:
sudo deploy/pi/install.sh --public-url http://192.168.50.2:8080The script fetches Python 3.12 itself and creates the remotek-hub service. --public-url is the Pi’s fixed address.
Create an account in the app: “Other server” → http://192.168.50.2:8080, with “Allow http://” on. The verification code is in the log:
journalctl -u remotek-hub | grep "verification code"The code arrives by email once the hub has a Resend key (REMOTEK_RESEND_API_KEY) and a sender address (REMOTEK_MAIL_FROM). Without them the code goes to the log.
On the PC, sign in to that account in Remotek for Windows the same way, with “Allow http://”, as “Connect to this PC”. Then close registration: /admin → Pairing.
http:// is for home or a VPN only. From outside, use Tailscale Serve: see docs/.
An always-on Mac, wired to the router. The hub runs without Docker: a magic packet does not leave Docker’s network.
Install the hub by sections 4 and 5 of docs/deploy-macos.md and start the service:
sudo launchctl bootstrap system /Library/LaunchDaemons/app.remotek.hub.plistThe code goes in /Users/Shared/remotek, the service runs as _remotek, the hub’s address is in the plist, and the plist in /Library/LaunchDaemons.
Create an account in the app: “Other server” → http://192.168.50.3:8080, with “Allow http://” on. The verification code is in the log:
sudo grep "verification code" /Users/Shared/remotek-data/logs/hub.err.logThe code arrives by email once the hub has a Resend key (REMOTEK_RESEND_API_KEY) and a sender address (REMOTEK_MAIL_FROM). Without them the code goes to the log.
On the PC, sign in to that account in Remotek for Windows the same way, with “Allow http://”, as “Connect to this PC”. Then close registration: /admin → Pairing.
http:// is for home or a VPN only. From outside, use Tailscale Serve: see docs/.
A Windows 10 or 11 (x64) PC that does not sleep, wired to the router. It needs Git, uv and a free port 8080.
Clone the repository, build and install the hub, and start it:
powershell -ExecutionPolicy Bypass -File hub\installer\windows\build.ps1 -SkipSetup
powershell -ExecutionPolicy Bypass -File hub\installer\windows\install.ps1
& "$env:LOCALAPPDATA\Remotek\hub\remotek-hub.exe" --trayThe installer puts the hub in %LOCALAPPDATA%\Remotek\hub and a shortcut in the Start menu, and creates the RemotekHub task: the hub starts at sign-in, with a tray icon.
Create an account in the app: “Other server” → http://192.168.50.4:8080, with “Allow http://” on. The verification code is in the log:
Select-String "verification code" "$env:LOCALAPPDATA\Remotek\hub\data\hub.log"If Windows asks whether remotek-hub.exe may use the network, allow private networks. Codes arrive by email once the hub has a Resend key (REMOTEK_RESEND_API_KEY).
On the PC, sign in to that account in Remotek for Windows the same way, with “Allow http://”, as “Connect to this PC”. Then close registration: /admin → Pairing.
http:// is for home or a VPN only. From outside, use Tailscale Serve: see docs/.
A router with Docker and Docker Compose, OpenWrt for instance: a 64-bit processor, 1 GB of memory or more, a USB drive or an SSD.
Copy the repository onto the router’s drive and create the settings:
cp deploy/.env.pi.example deploy/.env.pi
mkdir -p deploy/dataIn deploy/.env.pi: PUBLIC_URL is the router’s address, HUB_UID and HUB_GID the owner of deploy/data. The image is built for linux/arm64 and linux/amd64; built-in flash is too small for it.
Build and start the hub:
docker compose -f deploy/docker-compose.pi.yml --env-file deploy/.env.pi up -d --buildThe same compose file as on the Pi: the container uses the router’s own network, so a magic packet reaches the LAN, and restarts by itself (restart: unless-stopped).
Create an account in the app: “Other server” → http://192.168.50.1:8080, with “Allow http://” on. The verification code is in the log:
docker compose -f deploy/docker-compose.pi.yml --env-file deploy/.env.pi logs hub | grep "verification code"The code arrives by email once the hub has a Resend key (REMOTEK_RESEND_API_KEY) and a sender address (REMOTEK_MAIL_FROM). Without them the code goes to the log.
On the PC, sign in to that account in Remotek for Windows the same way, with “Allow http://”, as “Connect to this PC”. Then close registration: /admin → Pairing.
http:// is for home or a VPN only. From outside, use Tailscale Serve: see docs/.
If the router cannot run containers, put the hub on a Pi, a Mac or a PC. The router then only needs fixed DHCP addresses for the hub and the PC, and, for a hub outside the home, wakes the PC over SSH with the command set in /admin (on OpenWrt etherwake -D -i br-lan {mac}).
For Remotek to wake a sleeping or switched-off PC, set the PC up once.
UEFI/BIOS: turn on “Wake on LAN”, “Power On By PCI-E” or “Resume By PCI-E Device”; turn off “ErP Ready” and “Deep Sleep”.
Network adapter: Device Manager → the adapter → Power Management: check all three boxes. Advanced: Wake on Magic Packet → Enabled.
Keep “Allow the computer to turn off this device to save power” checked: clearing it greys out the wake boxes. If the PC still does not wake, turn Energy Efficient Ethernet off. To check, the command below should list the adapter.
powercfg /devicequery wake_armedFast Startup: turn it off, since it powers the network adapter down after Shut down. Control Panel → Power Options → Choose what the power buttons do, or:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power" /v HiberbootEnabled /t REG_DWORD /d 0 /fA cable: the PC is wired to the router. Over Wi-Fi a magic packet almost never wakes it.
Who wakes it: a hub on the same network, a second PC running Remotek at home, or the router over SSH when the hub has a VPN into the home network. Chosen in /admin; no port forwarding.
By default the apps connect to https://remotek.io. Your own hub’s address goes in on the sign-in screen: “Other server”.
SHA-256: —
SHA-256: —
Not yet: the APK is downloaded from this site, and its SHA-256 is printed beside the button.
The installer is not signed with a developer certificate yet, so SmartScreen reports an unknown publisher.
Yes, if something on the home network can send the magic packet: a second PC running Remotek, the router over SSH, or a server on that network.
Sensors, the terminal, files and power keep working, while Windows lets no remote input into a locked session.
The owner of the server sees the metadata, and whatever is in flight while it is in flight; other accounts see nothing.
From [email protected] through Resend; on your own server without a key the code is printed to the log.