Skip to content

Repository files navigation

SubnetDesk logo

SubnetDesk

A LAN-first remote desktop for fast, private, direct connections.

An independently maintained RustDesk fork built for LANs, routed private networks, and VPNs.

Latest release Total downloads GitHub stars GitHub forks Build status License

Windows macOS Linux Android

English · 简体中文

Why SubnetDesk · Features · Download · Quick start · Build

SubnetDesk device discovery

💡 Why SubnetDesk

SubnetDesk focuses on one clear use case: remote control between devices that can already reach each other. It removes the public device-ID, rendezvous, relay, cloud account, proxy, and automatic public-update paths from RustDesk, replacing them with direct endpoint connections and local device discovery.

That makes it a good fit for home labs, offices, classrooms, on-site support, and private networks connected by WireGuard, Tailscale, OpenVPN, or another VPN.

SubnetDesk Typical RustDesk deployment
Connection Direct IP address or hostname Device ID through rendezvous, with optional relay
Discovery Automatic mDNS discovery on the LAN Device ID or address book
Server dependency No coordination server required Public or self-hosted rendezvous/relay server
Best suited for LANs, routed private networks, and VPNs Internet and cross-NAT access

Important

SubnetDesk does not provide Internet rendezvous or relay services. The two devices must be reachable through the same LAN, a routed private network, or a VPN.

✨ Features

Capability Details
🔎 Local discovery Find nearby devices automatically over mDNS.
Direct connections Connect by IP address or hostname using a configurable TCP port.
🔐 Access protection Authenticate with a username and password; passwords are stored as Argon2id hashes.
🛡️ Device verification Verify and remember endpoint fingerprints before trusting a device.
🌐 Network allowlist Restrict incoming connections to selected CIDR networks.
Fast reconnection Keep recent devices, favorites, and stable device identities.
🖥️ RustDesk experience Retain remote control, clipboard, audio, and file-transfer capabilities without a public coordination server.

📦 Download

Download stable packages from GitHub Releases. For the newest changes, use the nightly release or artifacts from GitHub Actions.

Platform Architectures Packages
Windows x86_64, ARM64 Portable .exe, .msi installer
macOS Intel, Apple Silicon .dmg
Linux x86_64, ARM64 .deb, .rpm, .AppImage, .flatpak; Arch package on x86_64
Android ARM64, ARMv7, x86_64, universal .apk

Note

Nightly packages are development builds. Prefer the latest stable release for daily use.

🚀 Quick start

  1. Install and open SubnetDesk on both devices.
  2. On the controlled device, open LAN settings, set a username and password, and enable LAN discovery. The default port is 21118.
  3. On the controller, select a discovered device or enter hostname:port / IP:port manually.
  4. Verify the device fingerprint on first connection, then connect.

SubnetDesk LAN settings

Network checklist

  • Both devices can route to each other.
  • TCP port 21118 (or your configured port) is allowed by the host firewall.
  • mDNS is available when automatic discovery is needed; direct address entry still works without it.
  • The controlled device's CIDR allowlist includes the controller's network.
  • On Linux, see host readiness notes for SELinux, Wayland, and login-screen guidance.

🔒 Security model

  • Traffic stays on the network path between your devices; SubnetDesk does not require a public coordination service.
  • Passwords are persisted as Argon2id hashes rather than plaintext.
  • Device fingerprints provide trust-on-first-use verification and help detect an unexpected endpoint identity change.
  • CIDR allowlists let the controlled device limit which source networks may connect.

As with any remote-control software, expose the listening port only to trusted networks, use a strong unique password, and verify fingerprints through a separate trusted channel when possible.

🛠️ Build from source

Clone the repository with its submodules, then run the Flutter desktop build:

git clone --recurse-submodules https://github.com/zibo-chen/SubnetDesk.git
cd SubnetDesk
./build.py --flutter --hwcodec

The build requires Rust, Flutter, and platform-specific native dependencies. The native package workflow is the source of truth for pinned tool versions, target architectures, and packaging steps.

🤝 Contributing

Bug reports, feature ideas, and pull requests are welcome. Before opening a change, check the existing issues and keep changes focused on the LAN/VPN-first product scope.

⭐ Star history

SubnetDesk star history chart

🙏 Credits and license

SubnetDesk is based on RustDesk and retains its open-source foundations. SubnetDesk is an independent project and is not an official RustDesk release.

Licensed under the GNU Affero General Public License v3.0. Use remote-control software only on systems you own or are authorized to administer.

About

LAN-only remote desktop based on RustDesk

Resources

Stars

83 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages