High-performance, decentralized peer-to-peer remote desktop application powered by Rust, Tauri, and WebRTC.
LinkUp connects two devices directly without piping screens, mouse coordinates, keyboard inputs, or files through corporate servers. By leveraging direct P2P connections, LinkUp achieves ultra-low latency remote control, secure end-to-end encryption, and smooth 60fps interaction.
- β‘ LinkUp Direct-Sync Handshake (LDSH): A decentralized connection handshake. If devices are on the same local network (or you have direct routing), connect instantly via a direct local HTTP pairing loop on port
8081bypassing signaling servers entirely. - π₯ Dynamic WebRTC Adaption: Real-time bandwidth, framerate, and resolution tracking. The host dynamically adapts video tracks to match network conditions and ping times.
- π P2P File Transfer with Backpressure: Share files directly with a visual progress overlay. The transfer engine manages 64KB chunks using WebRTC data channel flow control (
onbufferedamountlow), preventing memory bottlenecks. - π Native Clipboard Monitoring: Active clipboard changes are watched by a native Rust thread in the background, keeping clipboard sync light and instantaneous.
- π Pointer Lock Capture: Capture mouse inputs professionally inside the client viewport by locking cursor states, translating physical delta changes to absolute coordinates on the host.
- π System Loopback Audio: Stream loopback system audio from the host directly alongside the WebRTC video stream for a fully immersive remote experience.
- πΌοΈ Binary JPEG Compatibility Stream: Automatically falls back to high-frequency raw binary JPEG transport using Tauri IPC and object Blobs if WebRTC video tracks are blocked.
LinkUp uses a dual-mode WebRTC signaling architecture:
sequenceDiagram
autonumber
actor Client as Client Viewer
actor Host as Host Desktop
rect rgb(240, 240, 240)
Note over Client, Host: Mode A: Traditional WebSocket Signaling
Client->>Signaling Server: Register Client Session
Host->>Signaling Server: Register Host Session with 6-Digit Code
Client->>Signaling Server: Send SDP Offer (Targeting Host Code)
Signaling Server->>Host: Deliver SDP Offer
Host->>Client: Send SDP Answer & ICE Candidates
end
rect rgb(230, 245, 230)
Note over Client, Host: Mode B: LinkUp Direct-Sync Handshake (LDSH)
Host->>Host: Listen locally on HTTP 0.0.0.0:8081
Client->>Client: Gather all ICE candidates (Vanilla ICE)
Client->>Host: HTTP POST /pair (SDP Offer + Candidates)
Host->>Client: HTTP 200 OK (SDP Answer + Candidates)
end
Client->>Host: Establish Direct P2P WebRTC Connection
Pre-compiled platform installers are available on the Releases Page and the public landing page:
- macOS (Apple Silicon / Intel): Download and mount the
.dmginstaller. - Windows 10 / 11: Install using the standalone setup
.exe. - Linux: Install the
.debpackage on Ubuntu or Debian-based distributions.
- Node.js: Ensure Node.js v18+ or v20+ is installed.
- Rust & Cargo: Follow the setup at rustup.rs.
- Tauri CLI Dependencies:
- macOS: Native Xcode command line tools.
- Windows: Visual Studio C++ Build Tools.
- Linux: Webkit2GTK, AppIndicator, and development packages:
sudo apt-get install -y libwebkit2gtk-4.1-dev libayatana-appindicator3-dev librsvg2-dev patchelf xdg-utils
-
Clone the repository:
git clone https://github.com/Hootsworth/LinkUp.git cd LinkUp -
Install dependencies:
npm install
-
Run the application in development mode (spawns both the frontend dev server and Rust/Tauri window):
npm run tauri dev
-
Build the production bundle for your platform:
npm run tauri build
We welcome contributions! Please review our Contributing Guide to understand coding styles, commit formats, and our pull request pipeline.
This project is open-source under the terms of the Apache License 2.0. See the LICENSE file for details.