A modern alternative to Windows Remote Desktop — screen + input streamed directly between your devices over WebRTC. Signaling runs on a tiny Node server you host. No third-party relay sees your frames, no vendor stores your session, no account required.
Video, audio, and input travel over DTLS-SRTP WebRTC channels. Keys are negotiated peer-to-peer — the signaling server never sees your frames or keystrokes.
Native mouse + keyboard injection through a small Rust binary (enigo crate). Localhost TCP socket on port 7878 — no kernel driver, no elevated service.
Drop the Node.js signaling server on any VPS, home Pi, or your own LAN. Port 3389 by default. One JSON env file configures allowed origins.
Connect from any device with a browser — no app install on the viewing side. Phones, tablets, old laptops all work. Touch input is mapped to mouse events.
Pick your own 4+ character room ID or let the server generate a UUID slice. Rooms are ephemeral — destroyed the moment the host disconnects.
Frames are transient. Nothing is written to disk, nothing is buffered beyond the WebRTC jitter window. Close the tab and the session is gone.
Amni-Connect splits into three isolated processes. Each can be restarted, replaced, or audited independently.
| COMPONENT | ROLE |
|---|---|
| Electron Host | Screen capture (desktopCapturer), WebRTC peer, UI chrome — runs on the machine being controlled |
| Rust Input Daemon | Tokio-driven TCP service on 127.0.0.1:7878 — receives JSON input events and calls enigo for mouse/keyboard synthesis |
| Signaling Server | Express + Socket.IO on port 3389 — rooms, offers, answers, ICE candidates. Never sees media data. |
| PARAMETER | DETAILS |
|---|---|
| Type | End-to-End Encrypted Remote Desktop |
| Stack | Electron 33 (host) • Rust 2021 / tokio / enigo (input) • Node.js + Socket.IO (signaling) |
| Platforms | Host: Windows, macOS, Linux • Viewer: any modern browser |
| Transport | WebRTC — DTLS-SRTP over UDP (TCP fallback) |
| Signaling | Socket.IO on port 3389 • self-hostable • origin allowlist |
| Input Channel | Localhost TCP • JSON-lines • 127.0.0.1:7878 |
| Media | Screen capture via desktopCapturer • VP8/H.264 (browser-negotiated) |
| Rooms | 4+ char custom ID or UUID slice • ephemeral • destroyed on host disconnect |
| Recording | None — no disk writes, no session logs |
| Account | None — no signup, no password, no email |
| License | CC BY-NC 4.0 (source-available, non-commercial) |
Launch Amni-Connect on the machine you want to control. The Electron app spawns the Rust input daemon and registers a room with your signaling server.
On any other device, open the viewer URL and enter the room code. Socket.IO exchanges the WebRTC offer/answer and ICE candidates in milliseconds.
DTLS-SRTP handshake completes peer-to-peer. Screen frames flow viewer-ward; input events flow host-ward. The signaling server goes silent.
Mouse moves, clicks, and keystrokes from the viewer are JSON-serialized, sent over the WebRTC data channel, and replayed by the Rust daemon.
Host your own signaling, control your own hardware. No SaaS, no relay fees, no rate limits.
Open source under CC BY-NC 4.0 • source available on GitHub • non-commercial use