High-performance remote access
for Windows
Peer-to-peer and end-to-end encrypted. Devices find each other by a short ID, so there are no IP addresses, ports or virtual adapters to set up. Chat, send files and talk, and run your own directory server with one command.
Fast, direct and yours
Built on ARD (Iroh). Every device has a permanent key; its public key is its identity.
High performance
Direct UDP paths between devices, with automatic fallback to a relay when a direct path is not possible. Low-latency desktop streaming through FRD.
Peer-to-peer
Your data goes straight from one device to the other. The directory server only hands out device IDs and coordinates the connection; it is never in the data path.
End-to-end encrypted
Identities are verified before any password is sent, and the server never receives passwords. The host approves each controlling device, and can revoke it at any time.
Self-hostable
Run your own directory server on a Linux machine with a single command, HTTPS included. Everything is open source.
Everything for working on another PC
Connect, control, talk and share, with the host in charge of what is allowed.
Device ID connect
Enter the device ID and a one-time password, compare the device fingerprint, and the host approves. Later connections need no password.
Per-device permissions
Allow FRD, RDP and file access separately for each device (FRD only by default), or accept a connection just once.
Voice callsNEW
Call a connected device over the same encrypted link: Opus, ringing, answer, mute, hang up from the window or the island. A side without a working microphone can still join, and both are told.
Chat and file transfer
Text, images and files up to 2 GB, with speed and progress, cancellable, and chat keeps working during a transfer.
Audit recording
While a device uses the screen, it is recorded locally on the host (10 fps, up to 10 GB, oldest overwritten) with the Windows H.264 encoder.
Microphone diagnosisNEW
Devices, Windows privacy switches, a live level test, record-and-playback and a speaker test, all on this machine.
Network diagnosis
Can two devices connect directly? Your NAT type, exits, UPnP, and a verdict, confirmed with real traffic by the server: it probes the ports you open from the outside.
Floating island
A small draggable pill near the tray: connection state, message bubbles, unread count, file progress and calls. Click to open the chat.
No admin rights
No drivers and no network changes. Your device identity and settings are kept across upgrades.
Up and running in minutes
Install the same app on both computers. Being controlled is off by default, so if you only want to control other machines you can leave it off.
Download and install
Get the latest ArdUi-v6.10_setup.exe from GitHub Releases and run it. It installs to %LOCALAPPDATA%\ArdUi and keeps your identity and settings on upgrades. The .NET 8 desktop runtime is required; FFmpeg is not included (optional extension, see the README).
On the host: allow control
On the computer you want to reach, switch on “Allow control”. You get a device ID, and a first-connection password that shows for 10 seconds when you click it. Give both to the person connecting.
On the controller: connect
Enter the ID and password and press Connect. Compare the full device fingerprint over a separate channel, such as a phone call. The host accepts (or accepts just once) and chooses which features to allow.
Use it
Authorized devices appear in the list: FRD for the desktop, Desktop for RDP, Files for shares, and the chat icon for messages, files and voice calls.
Keep everything in your hands
By default ArdUi uses a public directory service. To run your own, deploy the directory server on a Linux machine with a domain name, or just its public IP address.
# Linux with systemd, root, a domain pointing here, ports 80/443 open curl -fsSL https://raw.githubusercontent.com/KateY07/ArdUi/main/selfhost.sh | sudo bash -s -- --domain ardui.example.com
It installs a Python environment, the directory service and Caddy with automatic HTTPS. No domain? Pass the public IP (--domain 203.0.113.7) for a short-lived Let's Encrypt IP certificate that Caddy renews. Preview first with --dry-run; behind your own proxy use --http-only; remove with --uninstall (data is kept). Read the script.
# %LOCALAPPDATA%\ArdUi\data\config.json { "server": "https://ardui.example.com/" }
The script prints this at the end. Edit the config on every computer and restart ArdUi. Check the server: https://your-domain/api/health should return "ok": true.
--file and --wheels options.| Component | Role | Self-hosting |
|---|---|---|
| Directory service | Device IDs, presence, connection coordination (never receives passwords) | One command |
| Relay directory (M) and relay nodes | Forwarding when no direct path exists; lists available relays | Manual (see guide) |
| ARD | End-to-end encrypted connections and path selection | Ships with the installer |
See it in action
A short animated walkthrough: from entering an ID to host approval, chat and audit.
Watch the demo