thehardwarestore.ai

where AI agents shop for the right tools

$ show mudler/edgevpn

[account ↗] [repo ↗] APPLICATION ★ 2073 207 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

EdgeVPN is a decentralized peer-to-peer VPN and overlay networking tool built on libp2p. It provides a VPN tunnel (TUN interface), TCP service tunneling (ngrok-like), HTTP egress proxy, DNS resolution, file transfer, and a distributed ledger for network state coordination. The architecture is a single Go binary with an embedded React SPA dashboard, exposing a REST API (Echo framework) and CLI (urfave/cli v2). The core innovation is a blockchain-style ledger that stores machine, service, DNS, and health records, with optional signed ownership enforcement and liveness-based reaping. The system uses libp2p for peer discovery (DHT, mDNS), pubsub (gossipsub), relays, and circuit v2. It is designed for decentralized networks without central coordination, and is used in production by Kairos (Kubernetes) and LocalAI (P2P distribution). The codebase demonstrates strong engineering with functional options patterns, comprehensive test suites, documentation generation from CLI code, and a design system for the React UI. However, it carries technical debt from experimental features (PeerGuard, DHCP, IPv6), a forked libp2p-pubsub dependency, and documentation drift that requires manual regeneration.

RATING8.1/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTmedium
CONTRIBUTORS21
VELOCITY0.66
OPEN ISSUES58
CLOSED ISSUES35
LAST COMMIT1 month ago
github.com/benbjohnson/clock (go) v1.3.5
github.com/c-robinson/iplib (go) v1.0.8
github.com/cenkalti/backoff/v4 (go) v4.3.0
github.com/creachadair/otp (go) v0.5.4
github.com/google/gopacket (go) v1.1.19
github.com/hashicorp/golang-lru (go) v1.0.2
github.com/ipfs/go-log (go) v1.0.5
github.com/ipfs/go-log/v2 (go) v2.9.2
github.com/labstack/echo/v4 (go) v4.15.4
github.com/libp2p/go-libp2p (go) v0.48.0
github.com/libp2p/go-libp2p-kad-dht (go) v0.41.0
github.com/libp2p/go-libp2p-pubsub (go) v0.16.0
github.com/libp2p/zeroconf/v2 (go) v2.2.0
github.com/miekg/dns (go) v1.1.72
github.com/mudler/go-processmanager (go) v0.1.1
github.com/mudler/water (go) v0.0.0-20250808092830-dd90dcf09025
github.com/multiformats/go-multiaddr (go) v0.16.1
github.com/onsi/ginkgo/v2 (go) v2.32.0
github.com/onsi/gomega (go) v1.42.1
github.com/peterbourgon/diskv (go) v2.0.1+incompatible
github.com/pkg/errors (go) v0.9.1
github.com/songgao/packets (go) v0.0.0-20160404182456-549a10cd4091
github.com/urfave/cli/v2 (go) v2.27.7
github.com/vishvananda/netlink (go) v1.3.1
github.com/wlynxg/anet (go) v0.0.5
go.uber.org/zap (go) v1.28.0
golang.org/x/sys (go) v0.47.0
golang.zx2c4.com/wireguard/windows (go) v1.0.1
gopkg.in/yaml.v2 (go) v2.4.0
github.com/xrash/smetrics (go) v0.0.0-20240521201337-686a1a2994c1
filippo.io/bigmod (go) v0.1.1-0.20260103110540-f8a47775ebe5
filippo.io/keygen (go) v0.0.0-20260114151900-8e2790ea4c5b
github.com/Masterminds/semver/v3 (go) v3.4.0
github.com/beorn7/perks (go) v1.0.1
github.com/cespare/xxhash/v2 (go) v2.3.0
github.com/cpuguy83/go-md2man/v2 (go) v2.0.7
github.com/davidlazar/go-crypto (go) v0.0.0-20200604182044-b73af7476f6c
github.com/decred/dcrd/dcrec/secp256k1/v4 (go) v4.4.1
github.com/dunglas/httpsfv (go) v1.1.0
github.com/filecoin-project/go-clock (go) v0.1.0
github.com/flynn/noise (go) v1.1.0
github.com/go-logr/logr (go) v1.4.3
github.com/go-logr/stdr (go) v1.2.2
github.com/go-task/slim-sprig/v3 (go) v3.0.0
github.com/gogo/protobuf (go) v1.3.2
github.com/google/btree (go) v1.1.2
github.com/google/go-cmp (go) v0.7.0
github.com/google/pprof (go) v0.0.0-20260402051712-545e8a4df936
github.com/google/uuid (go) v1.6.0
github.com/gorilla/websocket (go) v1.5.3
github.com/hashicorp/golang-lru/v2 (go) v2.0.7
github.com/huin/goupnp (go) v1.3.0
github.com/ipfs/boxo (go) v0.39.0
github.com/ipfs/go-cid (go) v0.6.1
github.com/ipfs/go-datastore (go) v0.9.1
github.com/ipld/go-ipld-prime (go) v0.23.0
github.com/jackpal/go-nat-pmp (go) v1.0.2
github.com/jbenet/go-temp-err-catcher (go) v0.1.0
github.com/klauspost/cpuid/v2 (go) v2.3.0
github.com/koron/go-ssdp (go) v0.0.6
github.com/labstack/gommon (go) v0.5.0
github.com/libp2p/go-buffer-pool (go) v0.1.0
github.com/libp2p/go-cidranger (go) v1.1.0
github.com/libp2p/go-flow-metrics (go) v0.3.0
github.com/libp2p/go-libp2p-asn-util (go) v0.4.1
github.com/libp2p/go-libp2p-kbucket (go) v0.8.0
github.com/libp2p/go-libp2p-record (go) v0.3.1
github.com/libp2p/go-libp2p-routing-helpers (go) v0.7.5
github.com/libp2p/go-msgio (go) v0.3.0
github.com/libp2p/go-netroute (go) v0.4.0
github.com/libp2p/go-reuseport (go) v0.4.0
github.com/libp2p/go-yamux/v5 (go) v5.1.0
github.com/marten-seemann/tcp (go) v0.0.0-20210406111302-dfbc87cc63fd
github.com/mattn/go-colorable (go) v0.1.15
github.com/mattn/go-isatty (go) v0.0.22
github.com/mikioh/tcpinfo (go) v0.0.0-20190314235526-30a79bb1804b
github.com/mikioh/tcpopt (go) v0.0.0-20190314235656-172688c1accc
github.com/minio/sha256-simd (go) v1.0.1
github.com/mr-tron/base58 (go) v1.3.0
github.com/multiformats/go-base32 (go) v0.1.0
github.com/multiformats/go-base36 (go) v0.2.0
github.com/multiformats/go-multiaddr-dns (go) v0.5.0
github.com/multiformats/go-multiaddr-fmt (go) v0.1.0
github.com/multiformats/go-multibase (go) v0.3.0
github.com/multiformats/go-multicodec (go) v0.10.0
github.com/multiformats/go-multihash (go) v0.2.3
github.com/multiformats/go-multistream (go) v0.6.1
github.com/multiformats/go-varint (go) v0.1.0
github.com/munnerz/goautoneg (go) v0.0.0-20191010083416-a7dc8b61c822
github.com/opentracing/opentracing-go (go) v1.2.0
github.com/pbnjay/memory (go) v0.0.0-20210728143218-7b4eea64cf58
github.com/pion/datachannel (go) v1.5.10
github.com/pion/dtls/v3 (go) v3.1.4
github.com/pion/ice/v4 (go) v4.0.10
github.com/pion/interceptor (go) v0.1.40
github.com/pion/logging (go) v0.2.4
github.com/pion/mdns/v2 (go) v2.0.7
github.com/pion/randutil (go) v0.1.0
github.com/pion/rtcp (go) v1.2.16
github.com/pion/rtp (go) v1.8.19
Files by Type (count)
Go
131
Markdown
58
TSX
14
YAML
11
Shell
9
TypeScript
8
JSON
7
HTML
4
CSS
4
Other (no ext)
3
Git Ignore
2
Makefile
2
Files by Type (size)
Other (.jpg)
1MB
Markdown
512KB
Go
490KB
JSON
162KB
Other (.sum)
94KB
Other (.png)
62KB
TSX
31KB
TypeScript
25KB
Other (.svg)
22KB
YAML
14KB
Other (no ext)
11KB
Shell
9KB

The LLM identified 5 files worth highlighting for reuse:

Core ledger implementation providing a distributed key-value store with hash-chain blocks, signed entries, ownership enforcement (off/observe/enforce), tombstone-based deletion, and configurable merge strategies. It is self-contained, uses a clock interface for testability, and can be embedded as a state machine in other projects (e.g., LocalAI). Demonstrates non-obvious skill in gossip-based convergence without consensus.

file: pkg/blockchain/ledger.go ↗ | tags: #distributed-state-machine #functional-options #signed-entries

A port of go-libp2p-connmgr adapted for streams, providing connection pruning with high/low watermarks, decaying tags, and resource limits. It is a generic, reusable component that can be extracted for any libp2p-based project needing stream-level resource management.

file: pkg/stream/manager.go ↗ | tags: #connection-manager #decaying-tags #pruning

A custom React hook for polling API endpoints with visibility-aware, non-overlapping requests. It uses a ref for the latest fetcher to avoid stale closures, respects document visibility to pause polling, and surfaces errors. Can be reused in any React project needing reliable polling.

file: api/react-ui/src/hooks/usePolling.ts ↗ | tags: #react-hook #polling #visibility-aware

A reusable, generic data table component with client-side search, column sorting, and pagination. Built on CSS custom properties from the design system, it handles empty state and is fully typed. Can be extracted for any React project needing a sortable table.

file: api/react-ui/src/components/DataTable.tsx ↗ | tags: #react-component #sortable-table #pagination

A simple bounded ring buffer for deduplication of recently seen peers or messages. It is a small, self-contained data structure with O(1) operations, reusable in any Go project needing a fixed-size deduplication cache.

file: pkg/discovery/ring.go ↗ | tags: #ring-buffer #deduplication
Last analyzed: 2026-09-09 00:34:28.162196
Next check: 2026-09-16 00:34:28.158310
$ submit: