Skip to main content

Wire VPN - installs Go binary

Project description

wire

PyPI

WireGuard mesh VPN CLI - Go binary installer

pip install meshpop-wire
wire  # Auto-downloads Go binary on first run

This package automatically downloads and installs the native Go binary for your platform. Python License: MIT

Self-hosted WireGuard mesh VPN. Like Tailscale, but you own everything.

pip install meshpop-wire

Pure Python. No external services. No accounts. No cloud dependency.


Why wire?

Manual WireGuard Tailscale / ZeroTier wire
Add new node Edit every peer config One command One command
Coordination You manage Their cloud (required) Your own server
Works if vendor down Yes
Self-hosted Manual config ✗ Enterprise only ✓ Always
IP assignment Manual Auto Auto — deterministic
AI management ✓ via MCP

How it works

wire has three components:

Component Role Where
wire-server Peer registry + STUN One always-on server
wire VPN daemon + CLI Every node
wire-mcp MCP server for AI Machines with Claude
        ┌─────────────────────────────────┐
        │  Coordination Server            │
        │  HTTP :8787 — peer registry     │
        │  UDP  :8788 — STUN              │
        │  Does NOT carry VPN traffic     │
        └──────────┬──────────┬───────────┘
                   │          │
           ┌───────▼──┐   ┌──▼───────┐
           │  Node A  │◄──►│  Node B  │
           │ 10.99.x.x│   │10.99.y.y │
           └──────────┘   └──────────┘
               direct P2P WireGuard tunnel

Deterministic IPs — each node's VPN IP is derived from its hardware identity (SHA-256 of hostname + MAC address). Same machine always gets the same IP. No DHCP, no conflicts.

Auto peer sync — the daemon polls the coordination server every 30 seconds. New nodes are discovered by the whole fleet automatically.

NAT traversal — built-in STUN server lets nodes behind home routers find each other without port forwarding.


Quick Start

Step 1 — Start the coordination server (once)

pip install meshpop-wire
wire-server

As a systemd service:

[Unit]
Description=wire coordination server
After=network.target

[Service]
ExecStart=wire-server
Restart=always

[Install]
WantedBy=multi-user.target
systemctl enable --now wire-server

Step 2 — Join each node

# First time — saves config to /etc/wire/config.json
sudo wire up --server http://YOUR_COORD_SERVER:8787 --name myserver

# After first run:
sudo wire up

Done. Every existing node discovers the new node within 30 seconds.


CLI Reference

wire up [--server URL] [--name NAME]   # Join the mesh
wire down                               # Leave the mesh
wire status                             # View all nodes
wire peers                              # List registered nodes
wire ping web1                          # Ping by name or VPN IP
wire diagnose                           # Full diagnostic check
wire install                            # Check WireGuard installation

Example wire status output:

  4 online / 1 offline / 5 total

  ● web1      10.99.23.187   203.0.113.10    5s ago
  ● web2      10.99.45.22    198.51.100.20   12s ago  (this node)
  ● db1       10.99.87.3     192.0.2.30       8s ago
  ○ backup1   10.99.100.1    198.51.100.30   14m ago  OFFLINE

WireGuard Installation

# Debian / Ubuntu
apt install wireguard wireguard-tools

# RHEL / Fedora
dnf install wireguard-tools

# Alpine
apk add wireguard-tools

# macOS
brew install wireguard-tools wireguard-go

Run wire install to check your platform.


AI Management via MCP

{
  "mcpServers": {
    "wire": { "command": "wire-mcp" }
  }
}

"Which nodes are currently offline?" "Ping all nodes and tell me which have high latency" "Why can't web1 reach db1?"

MCP Tools

Tool Description
wire_status Full mesh view — all nodes, VPN IPs, last seen
wire_up / wire_down Bring VPN up or down
wire_peers List registered peers
wire_ping Ping a peer by name or IP
wire_diagnose Full diagnostic check
wire_watchdog Check handshake ages, stale connections

Configuration

Written automatically by wire up:

{
  "server_url":  "http://COORD_SERVER:8787",
  "node_name":   "web1",
  "vpn_ip":      "10.99.x.x",
  "listen_port": 51820
}
Context Path
Root / system /etc/wire/config.json
User ~/.wire/config.json

Server environment variables

Variable Default Description
WIRE_PORT 8787 HTTP port (UDP STUN = port + 1)
WIRE_VPN_SUBNET 10.99 VPN IP prefix
WIRE_STATE_FILE /etc/wire/state.json Peer state file

MeshPOP Stack

wire is the network layer of the MeshPOP stack:

mpop     Fleet orchestration — monitor, manage, automate
vssh     Authenticated transport — remote exec, file transfer
wire     Encrypted mesh VPN — connects all nodes  ← this

Each layer is independently installable and usable.


License

MIT — MeshPOP

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meshpop_wire-3.1.0.tar.gz (29.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

meshpop_wire-3.1.0-py3-none-any.whl (4.8 kB view details)

Uploaded Python 3

File details

Details for the file meshpop_wire-3.1.0.tar.gz.

File metadata

  • Download URL: meshpop_wire-3.1.0.tar.gz
  • Upload date:
  • Size: 29.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for meshpop_wire-3.1.0.tar.gz
Algorithm Hash digest
SHA256 4dd67ea36961dfec072c32a566e30543f46adf4b48647d9d54896f023901c2f9
MD5 1abe04bd8dfb99765693c8b80b1d4c84
BLAKE2b-256 d2a1e1632d996ce4e24cb6aee1c801e16f7779fed0a2eeea477b014383555ace

See more details on using hashes here.

File details

Details for the file meshpop_wire-3.1.0-py3-none-any.whl.

File metadata

  • Download URL: meshpop_wire-3.1.0-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for meshpop_wire-3.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8f21e816356c0b411dca7734b4175bfc6bba71455a2b61e09027f235d224881b
MD5 69ab37eb9752c1a2c8931cce22048294
BLAKE2b-256 bd328826335885d99ccbd7e41b1c0cd69480313c5407efb4c648a6398fb221a5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page