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
One-line install (Linux/macOS)
curl -fsSL https://raw.githubusercontent.com/FrankFMY/burrow/main/scripts/install.sh | bash
git clone https://github.com/FrankFMY/burrow.git
cd burrow
cargo build --release
docker pull ghcr.io/frankfmy/burrow:latest
docker run -d -p 3000:3000 -v burrow-data:/data ghcr.io/frankfmy/burrow
burrow-server
# Server listening on 0.0.0.0:3000
burrow register --email you@example.com --name " Your Name"
burrow login --email you@example.com
burrow create-network " My Network"
# Network created!
# ID: abc123...
burrow invite < network-id>
# Invite code: ABCD1234
# Share: burrow join ABCD1234
burrow join ABCD1234 --name " My Laptop"
# Successfully joined!
# Mesh IP: 10.100.0.1
burrow 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 build
# Terminal 1: Server
cargo run --bin burrow-server
# Terminal 2: Web UI
cd web && bun run dev
version : ' 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
Contributions welcome! Please read our contributing guidelines and submit a pull request.