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.
$ curl -fsSL https://github.com/PlugOvr-ai/meshvpn/releases/latest/download/install.sh | sudo shpre-1.0 Early software, developing quickly: provided as is, use at your own risk. Details
$ 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
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.
$ 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.
$ 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
$ 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.
$ sudo meshvpn init --network home Invite code: mesh1-eyJuZXR3b3Jr... $ sudo meshvpn install
$ 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.