frp — Overview#
Identity#
- Module path: github.com/fatedier/frp
- Go version: 1.25.0
- License: Apache 2.0
- Repository: https://github.com/fatedier/frp
Purpose#
frp is a fast reverse proxy designed to expose local servers behind NAT or firewalls to the public Internet. It targets developers and operators who need intranet penetration — accessing home servers, IoT devices, internal services, and development environments from outside their network without VPN infrastructure. It supports TCP, UDP, HTTP, and HTTPS forwarding with optional P2P (hole-punching) mode for direct client-to-client connections.
Significance#
frp is one of the most widely deployed intranet-penetration tools in the Go ecosystem, accumulating well over 80,000 GitHub stars. It is especially dominant in the Chinese developer community but has significant global adoption for self-hosting, homelab, and small-business scenarios. The project has influenced the design of similar tools and its author (fatedier) is actively designing a v2 that takes inspiration from Envoy and Kubernetes extensibility models (CRD, controller pattern, webhooks), signaling aspirations toward a general-purpose, cloud-native proxy platform.
Key metrics#
- Go files: 292
- Top-level directories: assets, client, cmd, conf, doc, dockerfiles, hack, pkg, server, test, web
- Direct dependencies: 32
- Indirect dependencies: ~45 (from go.mod indirect block)
Notable characteristics#
- Dual-binary client/server split:
frpc(client, runs on the LAN machine) andfrps(server, runs on the public-IP machine) are separate binaries with a persistent control channel between them — a clean separation of concerns mirrored in separateclient/andserver/package trees. - Multi-protocol transport layer: Supports TCP, KCP (xtaci/kcp-go), QUIC (quic-go), and WebSocket as the underlying frpc↔frps tunnel transport, giving users latency/reliability trade-offs without changing application protocol handling.
- P2P NAT hole-punching via STUN: Uses
pion/stunto negotiate direct peer-to-peer connections, bypassing the server for data-plane traffic once the control-plane session is established — an architecturally distinct mode from the regular reverse-proxy path. - Virtual Network (VirtualNet) via WireGuard: A newer feature that provides L3 virtual networking using the
wireguard-goandnetlinklibraries, enabling VPN-like connectivity rather than single-port forwarding — moving frp toward full network-layer tunneling. - Rich extensibility surface: Both client-side plugins (local traffic interceptors such as SOCKS5, HTTP proxy, HTTPS-to-HTTP) and server-side manage plugins (HTTP webhook callbacks for auth, registration events) allow third-party extension without forking; SSH tunnel gateway mode adds another integration point.
- Active v2 redesign: The author is openly planning a ground-up rewrite modeled on Envoy’s extensible four/seven-layer proxy and Kubernetes’ CRD/controller/webhook patterns — unusual transparency about architectural evolution and a signal that the current codebase is considered a learning artifact as much as a production product.