English · Tiếng Việt · 中文 · 日本語
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.
Install · Build from source · Spec · Architecture · Security
Contents:
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-cliOn 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-cliThe 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, withdeskhub-cliinside - macOS —
deskhub-v*-macos.dmg, withdeskhub-cliinside the app - Ubuntu / Debian / Mint without the repository —
deskhub-v*-amd64.deb - Fedora / openSUSE —
deskhub-v*-x86_64.rpm, installed withdnforzypper - Other Linux distributions — build from source, see BUILD.md
- Android — Google Play
- iOS — TestFlight
Details and permissions per platform: INSTALL.md.
A macOS host, one tick away from sharing: pick what leaves this machine — any display, the shell, or both — then press Start sharing.
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.
Android — the same four pages in Material dress. Hosting is a view-only screen share on Android 10+.
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.
- 💻 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.
| 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 |
- 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
inputgroup — see Install). - One shared core — protocol, FEC, and bitrate control live in
core/, compiled into every client. - Command-line tools —
deskhub-clican 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.
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.
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.










