Skip to content
manhpham90vnPublic

About

Open-source remote desktop for Windows, macOS, Linux, Android and iOS. Share your screen and control your computer over your own network or VPN.

Topics

Resources

Security policy

Stars

134 stars

Watchers

6 watching

Forks

Latest commit

 

History

779 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

English · Tiếng Việt · 中文 · 日本語

🖥️ Deskhub

Your computer, wherever you need it.

Deskhub lets you view and control your computer from another device. It is open source, runs natively across five platforms, and is built for responsive work and play.

Release License: MIT C++20 Platforms

ci lint codeql nightly

Install · Build from source · Spec · Architecture · Security

Contents:

📦 Install

Install through a package manager on macOS, Ubuntu, Debian or Mint; on Windows, download the setup file from Releases:

brew install --cask manhpham90vn/tap/deskhub     # macOS · app + deskhub-cli

On Ubuntu / Debian / Mint, add the apt repository once, then install the one package, which carries the app and deskhub-cli:

sudo install -d /etc/apt/keyrings
curl -fsSL https://manhpham90vn.github.io/Deskhub/apt/deskhub.gpg | sudo tee /etc/apt/keyrings/deskhub.gpg >/dev/null
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/deskhub.gpg] https://manhpham90vn.github.io/Deskhub/apt stable main" \
  | sudo tee /etc/apt/sources.list.d/deskhub.list
sudo apt update
sudo apt install deskhub       # desktop app + deskhub-cli

The package adds Deskhub to the application menu and installs deskhub and deskhub-cli in /usr/bin. Windows setup adds Start Menu and Desktop shortcuts and puts its folder, deskhub-cli.exe included, on the machine PATH. The Homebrew cask links the macOS deskhub-cli into PATH; from the dmg it sits inside the app, at Deskhub.app/Contents/MacOS/deskhub-cli.

Everything else is on Releases:

  • Windows — deskhub-v*-windows-setup.exe, the only form the app comes in, with deskhub-cli inside
  • macOS — deskhub-v*-macos.dmg, with deskhub-cli inside the app
  • Ubuntu / Debian / Mint without the repository — deskhub-v*-amd64.deb
  • Fedora / openSUSE — deskhub-v*-x86_64.rpm, installed with dnf or zypper
  • Other Linux distributions — build from source, see BUILD.md
  • Android — Google Play
  • iOS — TestFlight

Details and permissions per platform: INSTALL.md.

👀 Demo

Deskhub Host page on macOS: a Share on network picker, the Wi-Fi and Tailscale addresses others connect to, a Not sharing banner on UDP port 47777, and the source list with Terminal ticked above a Start sharing button

A macOS host, one tick away from sharing: pick what leaves this machine — any display, the shell, or both — then press Start sharing.

Deskhub Client page on macOS: host address and UDP port fields, tickboxes to pick remote desktop, control and terminal, a Connect button, and a list of recent addresses with the time each was last connected
Client — type an address, paste a host's QR link, or pick a recent or trusted host, and choose what to open: the screen, control of it, a shell, or any mix.
Deskhub Devices page on macOS: one area for this machine as the host, with its SHA256 key fingerprint, a Copy public key button and the client keys allowed to connect, and one area for this machine as the client, with the trusted hosts
Devices — as the host: this machine's key and the devices allowed in — approved, scanned or pasted — each removable. As the client: the hosts you trust, by key.
Deskhub Settings page on macOS: device name, fps, bitrate and quality, UDP port, a switch for whether viewers can control this machine, clipboard and stay-awake toggles, the live state of the Screen Recording and Accessibility permissions, and a start-at-login switch
Settings — device name, fps, bitrate, quality, port, whether viewers may control this machine, and the live state of the macOS permissions.

Deskhub iOS Client page: address and port fields, Connect and Terminal buttons, a switch for controlling the remote machine, and a list of recent addresses Deskhub iOS Host page: Share on network, Start sharing, and the IP addresses others use to connect Deskhub iOS Devices page: this device's SHA256 key, the client keys allowed to connect and the trusted hosts Deskhub iOS Connection settings page: the UDP port, plus clipboard sync and keep-awake switches

iPhone — the same four pages. Scan a host's QR code to connect, drive it with the video as a trackpad; or host the phone's own screen, view-only.

Deskhub Android Client page: address and port fields, Connect and Terminal buttons, a control tickbox, and a list of recent addresses Deskhub Android Host page: Share on network, Start sharing, and the IP addresses others use to connect Deskhub Android Devices page: this device's SHA256 key, the client keys allowed to connect and the trusted hosts Deskhub Android Connection settings page: the UDP port, plus clipboard sync and keep-awake tickboxes

Android — the same four pages in Material dress. Hosting is a view-only screen share on Android 10+.

📖 About

Share a screen on one device, then connect from another using its IP address. The same four pages — Host, Client, Devices and Settings — appear on every platform, so the controls stay familiar as you move between a Mac, PC, phone or tablet. A shared C++20 core handles the protocol across all five platforms.

⚡ Fast 📦 Easy install 🎛️ Simple
Streams at 60 fps by default, up to 240 fps on supported hardware. The video path uses GPU memory where available. Install with a package manager or download a release. No account is required. Share a display or Connect to an IP. Desktops can also share a shell, and every host — phones included — can receive files. Phones share their screens in view-only mode.

Sessions are encrypted end to end over QUIC/TLS, and access works like SSH: every machine has one key, and a client gets in only if the host's owner has let that key in — by approving its connection request, by showing it a QR code while sharing, or by pasting its public key. The client pins the host's key and checks it before sending anything; trust follows the key, so a host keeps it when its address changes. No passcode, no discovery, no switch that lets strangers in. Use a network you trust or a VPN, and never port-forward UDP 47777. Full threat model in SECURITY.md.

💡 Why

  • 💻 Work — run Claude Code, VS Code, or builds on your home PC from a weak laptop or an iPad at a café.
  • 🌐 Desktop apps — use Chrome, Office, or software that only runs on your computer from another device.
  • 🎮 Games — up to 240 fps and DirectInput scancodes.
  • 🖥️ Multi-monitor — share one or several displays, each as its own session.

🚦 Platforms

Platform Host Client Status
Windows ✅ ✅ Reference implementation — daily use over LAN + Tailscale (Internet/NAT)
macOS ✅ ✅ Both roles working (ScreenCaptureKit + VideoToolbox + CGEvent)
Android ✅ ✅ Client: video + input (trackpad, keyboard). Host: view-only screen share (MediaProjection + MediaCodec), Android 10+ — on Google Play
iOS ✅ ✅ Client: video + input (trackpad, keyboard). Host: view-only screen share via a Broadcast Upload Extension (ReplayKit + VideoToolbox) — testing via TestFlight
Linux ✅ ✅ Both roles working (PipeWire + VA-API/NVENC + uinput + GTK3) — Ubuntu, Debian, Mint, Fedora, openSUSE, Arch via deb / rpm / portable binary; verified between two machines over LAN

✨ What's inside

  • GPU video path — capture, encode, decode and render use platform hardware where available; the Windows NVENC path avoids copying frames through the CPU, and a Linux host encodes through VA-API or, on NVIDIA GPUs, NVENC.
  • Purpose-built protocol over QUIC — infinite GOP + on-demand IDR, XOR FEC plus retransmission of lost packets, adaptive bitrate, all multiplexed on one encrypted connection.
  • Sound comes with the screen — the machine's own audio mix, Opus at 64 kbps, one 20 ms frame per datagram; a single lost packet is usually rebuilt from the next one through Opus's in-band FEC, a longer gap costs a fraction of a second, and neither ever disturbs the picture. Never a microphone.
  • More than a screen — a remote shell, files sent to any host, plain-text clipboard sync in both directions, and keep-awake while a session is open.
  • Real input — scancodes for DirectInput games; host's own mouse/keyboard always wins (on Linux, once the user is in the input group — see Install).
  • One shared core — protocol, FEC, and bitrate control live in core/, compiled into every client.
  • Command-line tools — deskhub-cli can share a screen, open a remote shell, send files, and manage keys, allowed devices, trusted hosts and settings, from a script or over SSH; listings take --json. On Windows and Linux, it can also open a remote-screen window. See Build.
  • Tested across the core — offline unit tests, sanitizer runs in CI and nine libFuzzer targets — 30 seconds each on every pull request, 15 minutes each nightly — cover the wire format, H.264 parsing, reassembly, terminal bytes, UI text, key and invite parsing, QR encoding and session state machines. Crashes found by fuzzing become regression tests.

📚 Docs

Every document is published in English with translations beside it — Vietnamese as *.vi.md, Chinese as *.zh.md, Japanese as *.ja.md. The English text is the authoritative one.

Document Covers
Install (vi · zh · ja) Getting Deskhub onto each of the five platforms
Build (vi · zh · ja) Compiling from source, tests, packaging, releasing
Specification (vi · zh · ja) What Deskhub does, with no implementation detail
Architecture (vi · zh · ja) Layers, threads, wire protocol, decisions
SECURITY.md (vi · zh · ja) Threat model and how to report a vulnerability
PRIVACY.md (vi · zh · ja) Privacy policy
THIRD_PARTY_NOTICES.md (vi · zh · ja) Third-party components and licences

Bugs and feedback: issues — include your device model.

📄 License

MIT — see LICENSE. Third-party components and their notices (including the statically linked LGPL build of FFmpeg in the Linux app and CLI) are listed in THIRD_PARTY_NOTICES.md.

About

Open-source remote desktop for Windows, macOS, Linux, Android and iOS. Share your screen and control your computer over your own network or VPN.

Topics

Resources

Security policy

Stars

134 stars

Watchers

6 watching

Forks

Releases

Sponsor this project

Used by

Contributors

Languages