A netcat-like CLI and Go library that connects two machines over Tailscale's WireGuard data plane without needing a Tailscale account or control plane.
fatedier/frp
A fast reverse proxy that exposes local servers behind NAT or firewalls to the internet over TCP, UDP, HTTP and HTTPS.
Open-source alternative to:ngrok
- Stars
- 110,048
- Forks
- 15,248
- Open issues
- 34
- Last commit
- 2 days ago
What is it?
frp is a reverse proxy written in Go that lets you expose a local server sitting behind a NAT or firewall to the public internet. It runs as two programs: frps on a machine with a public IP, and frpc on the machine hosting the service. The client maintains a connection to the server and forwards incoming traffic to the local service.
It supports TCP and UDP forwarding, plus HTTP and HTTPS proxies that route requests by domain name or subdomain, so several internal websites can share one public server. It also offers an STCP mode that requires a preshared key, an XTCP mode for direct peer-to-peer data transfer, and KCP and QUIC as alternative transport protocols.
Operational features include TOML, YAML and JSON configuration, environment variable templating, a server dashboard, a client admin UI with hot reload, Prometheus metrics, token and OIDC authentication, TLS encryption, bandwidth limits, load balancing and health checks.
Key features
- 01Forwards TCP, UDP, HTTP and HTTPS traffic from a public server to a local service.
- 02Routes HTTP and HTTPS requests to internal sites by custom domain or subdomain.
- 03Offers STCP with preshared keys and XTCP for peer-to-peer data transfer.
- 04Supports TCP, KCP and QUIC transports, with optional encryption and compression.
- 05Provides a server dashboard, client admin UI, hot reload and Prometheus metrics.
- 06Includes token and OIDC authentication, bandwidth limits, load balancing and health checks.
Use cases
- Exposing a home or office SSH server or development web app to the internet without a public IP.
- Hosting several internal websites on one public server using custom domains.
- Forwarding a local DNS resolver or other UDP service through a public host.
- Giving a remote collaborator secure access to an internal service via a preshared key.
Quick start
- 1
Download the latest frp program for your OS from the Releases page
- 2
On a server with a public IP, start frps with its config file
./frps -c ./frps.toml - 3
On the machine behind NAT or a firewall, start frpc with its config file
./frpc -c ./frpc.toml
Things to know
- You need your own server with a public IP address to run frps.
- The README says the upcoming v2 will not be compatible with v1.
- Some antivirus programs may falsely flag frpc as malware.
Topics
FAQ
- What is frp?
- A fast reverse proxy that exposes local servers behind NAT or firewalls to the internet over TCP, UDP, HTTP and HTTPS. frp is a reverse proxy written in Go that lets you expose a local server sitting behind a NAT or firewall to the public internet. It runs as two programs: frps on a machine with a public IP, and frpc on the machine hosting the service. The client maintains a connection to the server and forwards incoming traffic to the local service.
- Is frp free to use? What license does it have?
- frp is open source under the Apache-2.0 license. Check the license terms before using it in commercial products.
- Is frp still maintained?
- Actively maintained. The last commit to frp was on Oct 20, 2026.
- What can I use frp for?
- Exposing a home or office SSH server or development web app to the internet without a public IP. Hosting several internal websites on one public server using custom domains. Forwarding a local DNS resolver or other UDP service through a public host. Giving a remote collaborator secure access to an internal service via a preshared key.
- How do I install frp?
- Download the latest frp program for your OS from the Releases page On a server with a public IP, start frps with its config file: ./frps -c ./frps.toml On the machine behind NAT or a firewall, start frpc with its config file: ./frpc -c ./frpc.toml
- Where can I get frp?
- The source code and installation instructions are on GitHub: https://github.com/fatedier/frp
Summary generated by AI from the project's README. GitHub stats refresh daily.
Related projects
A decentralized mesh VPN written in Rust that connects devices into a virtual LAN with NAT traversal and WireGuard support.
A self-hosted tunnel written in Go that exposes localhost services to the internet through your own domain and server.
A Rust library for connecting apps by public key, with QUIC transport, hole-punching and relay fallback.
Open-source ngrok alternative that exposes a local HTTP server at a public HTTPS URL with one command.
A self-hosted web UI for managing Nginx sites, certificates, configs, logs and server stats, written in Go and Vue.