Skip to content
← Projects

free-remote

A cross-platform remote desktop tool written in Rust, where permission is checked on every single message, not just once at connect time.

Sep 2026 – now · Open source · Rust, Noise Protocol, Linux

Sending only changed 128×128 tiles cut an idle desktop from 31 Mbit/s to 5.9 Mbit/s.

Overview

free-remote shares a machine's screen and lets someone else use its mouse and keyboard, but only with permission that a person explicitly granted, and only as much as was granted.

Permissions are per capability (view screen, mouse, keyboard), nothing is granted by default, and every inbound message is re-checked against the live grant. Revoking access takes effect on the very next event, including events already queued.

Every session runs over a Noise XX handshake (25519, ChaChaPoly, BLAKE2s). It builds on Linux, Windows and macOS with no system libraries and no C toolchain.

The problem

Remote desktop tools usually treat permission as a checkbox at connect time. After that, the remote side can do anything.

What I did

I wrote it from scratch in Rust: the wire protocol, encrypted transport, screen capture and encoding, input injection, and both binaries.

  1. Split the code into small crates for protocol, transport, capture, input, host and viewer.
  2. Enforced the permission model on the host for every message rather than trusting the viewer.
  3. Measured the video path and fixed the real bottleneck with tile diffing and back-off.

The result

A remote desktop tool that a nervous user can trust, with published performance numbers and reproducible benchmarks.

  • Benchmark commands and results are published in the README.
  • Marked clearly as not yet independently audited.

Features

  • Per-capability permissions: watch without touching
  • Encrypted transport with host fingerprints and peer pinning
  • Tile diffing sends only what changed on screen
  • Frames are dropped, not queued, so latency cannot build up
  • Idle capture backs off, taking CPU from about 38% of a core to 6%
  • End-to-end tests that drive the real host binary

Try it

$ cargo build --release

Run inside a clone of the repository.