Your machines,
reachable by name

Invite a machine and it answers as myserver.hop from anywhere, on a private address only your machines can reach. A VPN should be as easy as SSH, so it is.

Your private network: your machines connected peer-to-peer Three machines (a laptop, a server, and a Raspberry Pi) reach each other by name over direct encrypted peer-to-peer links with no central server. The Pi bridges a home LAN (printer and NAS) that cannot run WireHop. Your private network Your machines, reachable by name from anywhere. Peer-to-peer, no central server. 🔒 E2E laptop laptop.hop you · owner myserver myserver.hop always-on host pi pi.hop bridges the LAN ↓ Home LAN · 192.168.1.0/24 devices that can't run WireHop, reached through pi printer .1.50 NAS .1.60 encrypted P2P link LAN bridge

Underneath, this is a peer-to-peer VPN. We call one of these networks a warren, and a machine on it a node.

No port-forwarding

Machines find each other directly through NAT. When a direct path is blocked, a relay forwards encrypted packets it cannot read, and you can run your own with one flag.

No coordination server

Who is on the network is a document your machines replicate between themselves. Nothing of ours has to be up for your machines to find each other.

The role is the access

You never write firewall rules. Invite someone as a developer and the network already knows what a developer can reach. Everything else is default-deny.

Your tools, unchanged

ssh, scp, VNC, a browser, a database client: anything that takes a hostname takes myserver.hop. DNS is set up for you on each machine.

Put a machine on it

The first machine you install with --host creates the network. Every invite after that grows it.

On a machine already on the network

Any member can mint an invite. It is single-use and expires in 15 minutes.

$ hop invite Invite: eyJ0eX...

On the new machine

Install and join in one go. The network interface, the address and the name come up on their own.

$ curl -fsSL https://wirehop.org/install.sh | \ bash -s -- --host --invite eyJ0eX... Joined. You are 100.64.3.12 (laptop.hop)

From anywhere

Every machine on the network answers by name, on any network, with the tools you already use.

$ ssh myserver.hop $ scp report.pdf myserver.hop:~ $ open vnc://myserver.hop

Reach the things that can't run WireHop

A printer, a NAS, a camera, a whole home or office LAN. One machine that is on that LAN carries the rest.

One port, like ssh -L. Works with a plain client install too. The tunnel ends at the machine's own loopback, so it reaches services running on that machine.

# its port 3000, at localhost:3000 $ hop tunnel myserver 3000 # ...or at localhost:8080 instead $ hop tunnel myserver 8080:3000

A whole LAN, through one machine. Put WireHop on any machine that sits on the LAN (a Pi is plenty) and let it advertise the LAN's address range. Every other machine on your network then reaches the printer or the NAS by its ordinary LAN address, from anywhere.

Advertising a route is a one-line setting on the bridging machine. How to set it up, in the docs.