meshvpn

Open-source mesh VPN · Rust · Apache-2.0

Your machines, one network. No server in between.

meshvpn connects laptops, servers, Raspberry Pis, containers and GPU boxes into one private network. There is no control plane to run or rent, no account and no cloud: the machines find each other, punch through NAT and firewalls, and relay for each other where they must.

install (Linux, macOS)
$ curl -fsSL https://github.com/PlugOvr-ai/meshvpn/releases/latest/download/install.sh | sudo sh

pre-1.0 Early software, developing quickly: provided as is, use at your own risk. Details

public DHTencrypted hints only desktophome routerno port forward laptop5G hotspotchanging address direct, punched IPv6, encrypted
$ meshvpn status
● desktop  100.91.20.7  (network "home")

NAME     IP              STATUS   RTT   PATH
laptop   100.122.64.143  online   31ms  direct [2a02:…]:7870
pi       100.94.140.208  online    2ms  direct LAN
$ ssh laptop.mesh
0servers to run. Not for coordination, not for finding each other.
1static binary. Linux, macOS, Windows; x86, ARM, Raspberry Pi.
<name>.mesha stable address and name for every machine, wherever it is.
Apache-2.0all of it. Signed releases, SBOM, public security policy.

Why another VPN

Most mesh VPNs still need a server. meshvpn doesn't.

Tailscale needs its coordination service (or a self-hosted Headscale), NetBird a management and signal server, Nebula its lighthouses, ZeroTier its root servers. Those servers are convenient, but they are one more thing to run, trust, pay for, or lose. In meshvpn every node is equal, and the network is just its machines.

Finds each other again

Home routers change their address every day, phones move between networks. With the DHT switched on, nodes leave an encrypted, signed note in the public BitTorrent DHT that only members can find and read. No DynDNS, no anchor server.

Through routers and 5G

UDP hole punching through NAT, hole punching over IPv6 (TCP and UDP) through the firewalls of home routers and mobile networks, automatic port forwarding (UPnP, NAT-PMP, PCP), STUN. Relays over other nodes when nothing else works.

Through corporate firewalls

A machine that may only open SSH joins over a supervised reverse tunnel. Networks that may only reach out connect to a node outside with meshvpn connect.

Remote desktop

Like RustDesk, without the relay. In your browser.

One command opens the desktop of any Linux machine in your mesh, in a browser tab: a GPU server, a lab PC, even a container that has no display at all. No app to install on your side, no ID server, no port to open. It goes through the mesh and SSH, with the machine's own accounts.

A desktop for everyone, also headless

Each user gets their own Xfce, MATE or Cinnamon session, at the same time, on servers without a monitor and in containers without X. meshvpn brings its own small X server.

Fast on the GPU

3D programs render on the machine's GPU (VirtualGL), and the GPU encodes the picture as H.264 (NVENC, VA-API). CAD, simulation and visualisation feel local.

The real screen, too

--screen shows what is on the machine's monitor, monitor by monitor. Or log in at the desk to the same desktop you use in the browser.

Files, clipboard, sessions that stay

Browse, upload and download files in the bar, copy and paste both ways, close the tab and come back later to where you were.

from your laptop, anywhere
$ meshvpn desktop gpu1
Desktop of alice@gpu1: http://127.0.0.1:7880/#t=…
# the machine's own screen instead:
$ meshvpn desktop lab-pc --screen
# set up a full desktop with GPU acceleration on the node:
$ sudo meshvpn desktop setup --desktop mate --gpu

Linux machines; the browser can be on any system. Not yet: sound. Compared with RustDesk, TeamViewer and Guacamole →

For AI agents

Give your agent a fleet of machines, not a shell on one.

Claude Code, Codex or your own agent can find the GPUs in your mesh, reserve them, start distributed training across nodes, move data and diagnose the network: through an MCP server, or the same commands with JSON output. Everything runs on your machines; nothing goes through a vendor's cloud.

connect an agent
$ claude mcp add meshvpn -- meshvpn mcp
# or as a skill with instructions for the network as it is now:
$ meshvpn guide --skill > ~/.claude/skills/meshvpn/SKILL.md
what the agent then does
$ meshvpn nodes tag:gpu --free-gpus 4 --json
$ meshvpn gpu reserve tag:gpu -n 4 --for 2h
$ meshvpn launch --gpus 4 tag:gpu --detach -- torchrun train.py
job 7f3a started on gpu1, gpu2 (master gpu1)
$ meshvpn jobs logs 7f3a

19 MCP tools

Nodes and their hardware, exec on many nodes, copy to and from them, launch and stop jobs, GPU reservations, peer-to-peer data sharing, the network matrix, doctor.

Made to be parsed

--json on every command, errors included, and stable exit codes: 0 ok, 1 error, 2 usage, 3 not running, 4 needs root, 5 not found.

Rules agents follow

meshvpn guide tells the agent what to ask a human first, and to clean up its reservations and jobs. Reservations expire on their own, and a crashed job is stopped on every node.

Training across nodes, done right

Every node gets MASTER_ADDR, ranks and the right interface for NCCL; LAN paths where all nodes share one, the encrypted mesh otherwise. net check tests every pair before the run.

More than a tunnel

Everything you do between your machines, built in.

Password-less SSH

Decide per machine who may log in as whom, in one grid. Keys are bound to the node's mesh address. A built-in SSH server for containers without sshd.

A desktop in the browser

meshvpn desktop gpu1 opens a remote Xfce, MATE or Cinnamon desktop in your browser, over SSH, with 3D and H.264 on the GPU.

Multi-node AI work

Launch distributed training across nodes, reserve GPUs, share datasets and checkpoints peer to peer, and check the network before a run.

Made for AI agents

--json everywhere, clear exit codes, meshvpn guide and an MCP server, so an agent can run commands and move files across your machines.

Exit nodes

Send a machine's internet traffic through another node, to appear with your home or office address. Nothing leaks while the exit is down.

Admins and invites

Single-use, expiring invites; admins; bans that rotate the network key; members for a limited time; several networks on one machine.

Get started

Two commands per machine.

first machine
$ sudo meshvpn init --network home
Invite code: mesh1-eyJuZXR3b3Jr...
$ sudo meshvpn install
every other machine
$ sudo meshvpn join mesh1-eyJuZXR3b3Jr...
$ sudo meshvpn install
$ ssh desktop.mesh

Windows, packages and builds from source: Download. A step-by-step walk-through, also for a home router and a laptop on 5G: Get started.