Simple, fast, open-source mesh VPN
Installation | Quick Start | Features | API | Contributing
- Fast — Built on WireGuard protocol
- Secure — End-to-end encryption, modern cryptography, 2FA support
- Mesh networking — Direct peer-to-peer connections
- NAT traversal — STUN for hole punching, DERP relay fallback
- Simple — One command to join a network
- Real-time — WebSocket for live status updates
- Web UI — Beautiful dashboard for management
- Docker ready — Easy self-hosting
- Open source — Apache 2.0 licensed, free forever
| Feature | Description |
|---|---|
| 2FA/TOTP | Two-factor authentication with authenticator apps |
| API Keys | Secure CLI access with revocable API keys |
| Audit Logging | All security events are logged |
| Rate Limiting | Protection against brute-force attacks |
| Ownership ACL | Users can only access their own networks |
| x25519 Keys | Modern elliptic-curve cryptography |
curl -fsSL https://raw.githubusercontent.com/FrankFMY/burrow/main/scripts/install.sh | bashgit clone https://github.com/FrankFMY/burrow.git
cd burrow
cargo build --releasedocker pull ghcr.io/frankfmy/burrow:latest
docker run -d -p 3000:3000 -v burrow-data:/data ghcr.io/frankfmy/burrowburrow-server
# Server listening on 0.0.0.0:3000burrow register --email [email protected] --name "Your Name"
burrow login --email [email protected]burrow create-network "My Network"
# Network created!
# ID: abc123...burrow invite <network-id>
# Invite code: ABCD1234
# Share: burrow join ABCD1234burrow join ABCD1234 --name "My Laptop"
# Successfully joined!
# Mesh IP: 10.100.0.1burrow up
# Agent started! Connected to network.| Command | Description |
|---|---|
burrow register |
Register a new account |
burrow login |
Login to your account |
burrow logout |
Logout and clear credentials |
burrow create-network <name> |
Create a new network |
burrow invite <network-id> |
Generate invite code |
burrow join <code> [--name NAME] |
Join a network |
burrow up |
Start VPN connection |
burrow down |
Stop VPN connection |
burrow status |
Show connection status |
burrow peers |
List connected peers |
+-------------+ +-------------+ +-------------+
| Node A |---->| Server |<----| Node B |
| (Agent) | |(Coordinator)| | (Agent) |
+-------------+ +-------------+ +-------------+
| | |
| | DERP relay |
| | (fallback) |
+-------------------+-------------------+
WireGuard P2P
| Component | Description |
|---|---|
burrow-server |
Coordination server, DERP relay, WebSocket |
burrow |
CLI tool |
burrow-agent |
WireGuard manager daemon |
web/ |
Admin dashboard (Svelte + Bun) |
| Endpoint | Method | Description |
|---|---|---|
/api/auth/register |
POST | Register new user |
/api/auth/login |
POST | Login, get JWT token |
/api/auth/me |
GET | Get current user info |
/api/auth/totp |
GET | Get 2FA status |
/api/auth/totp/enable |
POST | Enable 2FA, get QR code |
/api/auth/totp/verify |
POST | Verify 2FA setup |
/api/auth/totp/disable |
POST | Disable 2FA |
/api/auth/api-keys |
GET/POST | List/Create API keys |
/api/auth/api-keys/:id |
DELETE | Revoke API key |
| Endpoint | Method | Description |
|---|---|---|
/api/networks |
GET | List user's networks |
/api/networks |
POST | Create new network |
/api/networks/:id |
GET | Get network details |
/api/networks/:id |
DELETE | Delete network |
/api/networks/:id/nodes |
GET | List nodes in network |
/api/networks/:id/invite |
POST | Generate invite code |
| Endpoint | Method | Description |
|---|---|---|
/api/register |
POST | Register node with invite |
/api/nodes/:id/heartbeat |
POST | Node heartbeat |
| Endpoint | Description |
|---|---|
/ws?network_id=ID |
Real-time events stream |
Events: NodeJoined, NodeStatus, NodeLeft, NetworkCreated, NetworkDeleted
| Variable | Default | Description |
|---|---|---|
DATABASE_URL |
sqlite:burrow.db?mode=rwc |
Database connection |
JWT_SECRET |
random | JWT signing secret |
BIND_ADDR |
0.0.0.0:3000 |
Server bind address |
RUST_LOG |
burrow_server=debug,info |
Log level |
CORS_ALLOW_ALL |
false |
Allow all CORS origins |
CORS_ORIGINS |
http://localhost:5173,... |
Allowed CORS origins |
- Rust 1.70+
- Bun 1.0+
- WireGuard tools
# Rust components
cargo build --release
# Web UI
cd web && bun install && bun run buildcargo test --all# Terminal 1: Server
cargo run --bin burrow-server
# Terminal 2: Web UI
cd web && bun run devversion: '3.8'
services:
burrow:
image: ghcr.io/frankfmy/burrow:latest
ports:
- "3000:3000"
environment:
- JWT_SECRET=your-secret-here
- DATABASE_URL=sqlite:/data/burrow.db?mode=rwc
volumes:
- burrow-data:/data
restart: unless-stopped
volumes:
burrow-data:Licensed under the Apache License, Version 2.0. See LICENSE for details.
Pryanishnikov Artem Alekseevich
- Email: [email protected]
- Telegram: @FrankFMY
- GitHub: @FrankFMY
Contributions welcome! Please read our contributing guidelines and submit a pull request.
Made with love by Artem Pryanishnikov