frp is a free, open source networking & connectivity project written in Go and released under Apache-2.0. It has 109,502 GitHub stars, 15,213 forks and 48 open issues, and was last pushed 4 days ago. On this registry it ranks #1 of 14 tracked projects in Networking & Connectivity, with 5 head-to-head comparisons available.

What is frp?

frp is a fast reverse proxy written in Go that exposes a local server behind a NAT or firewall to the internet, built for operators and developers who need inbound access to machines they cannot port-forward.

What it is

frp is a reverse proxy that creates a tunnel from a machine on a private network to a host with a public, reachable address. The client runs next to the internal service, the server runs where inbound traffic can arrive, and requests travel through the tunnel to the internal service. It supports TCP and UDP transport as well as the HTTP and HTTPS protocols, which allows requests to be forwarded to internal services by domain name. A P2P connect mode is also available. The project is written in Go and released under Apache-2.0, with 109,502 stars, 15,213 forks and 48 open issues at the time of writing.

The concrete problem it solves is reachability. Internal services behind NAT or a firewall normally require either a router port-forwarding rule, a dedicated public IP, or a VPN before anything outside the network can connect. frp replaces those arrangements with an outbound tunnel: the internal host dials out, and frp fans inbound connections back down that tunnel. That covers cases such as reaching a workstation over SSH, publishing an internal web service on a custom domain, or forwarding DNS queries and Unix domain sockets to services that were never designed to face the internet directly.

Key capabilities

  • Protocol coverage spans TCP, UDP, HTTP and HTTPS, with domain-name forwarding and a P2P connect mode for reaching peers directly.
  • Multiple transports are supported, including KCP, QUIC, TCP stream multiplexing and connection pooling, so the tunnel can trade latency against reliability.
  • Several internal services can share a single exposed port, demonstrated in the README by multiple SSH services sharing the same port, alongside port reuse and load balancing.
  • Authentication supports token authentication and OIDC authentication.
  • Operational surfaces include a server dashboard, a client admin UI, dynamic proxy management (the store), Prometheus monitoring and proxy status retrieval from the client.
  • Configuration supports environment variables and splitting configures into different files, and the frpc configuration can be hot-reloaded without restarting the client.
  • Traffic controls cover per-proxy bandwidth limits, service health checks, an allowlist of permitted ports on the server, HTTP Host header rewriting, X-Forwarded-For and Proxy Protocol real-IP handling, HTTP Basic Auth for web services, plus TLS, encryption and compression.

Who uses it and how

  • Individuals and small teams reaching a computer on a LAN network over SSH, which is the first example usage the README presents.
  • Operators consolidating several SSH endpoints behind one shared port rather than publishing a separate port per machine.
  • Teams publishing internal web services under custom domains without moving those services out of the private network.
  • Administrators forwarding DNS query requests or Unix domain sockets to internal resolvers and services.
  • Anyone needing a temporary public face for a local HTTP file server, or HTTPS termination in front of a local HTTP or HTTPS service.

Getting started

Release binaries are published on GitHub releases; the README documents example usage, configuration files and environment variables for running the server on a reachable host and the frpc client beside the internal service.

How it compares

The facts in this registry name no comparable tunneling or reverse-proxy products, so frp stands alone here. No side-by-side comparison with paid alternatives can be made from the information provided.

When to use it — and when not to

A self-hoster must run the server component on a host with a public address, manage TLS and certificate handling, configure token or OIDC authentication, maintain the firewall's permitted port list, and optionally wire up Prometheus monitoring. Anyone who wants a fully managed tunnel with no server to operate, or who is unwilling to run and patch a public-facing daemon, should look elsewhere. Honest weaknesses: the README is a dense feature inventory rather than a guided introduction, the configuration surface is large enough to overwhelm newcomers, and an "About V2" section signals a next major version under development, so frpc configuration details may shift.

project readme (upstream, from github) — read inline

frp

Build Status GitHub release GitHub Releases Stats

README | 中文文档

Sponsors

frp is an open source project with its ongoing development made possible entirely by the support of our awesome sponsors. If you'd like to join them, please consider sponsoring frp's development.

Gold Sponsors


High-performance residential and ISP proxies for developers

90M+ residential IPs worldwide. Rotating IPs, sticky sessions, and traffic that never expires.
From $0.55/GB. Use RAPID10 for 10% off. Try it for free.


The complete IDE crafted for professional Go developers


The sovereign cloud that puts you in control
An open source, self-hosted alternative to public clouds, built for data ownership and privacy

Recall.ai - API for meeting recordings

If you're looking for a meeting recording API, consider checking out Recall.ai,

an API that records Zoom, Google Meet, Microsoft Teams, in-person meetings, and more.

What is frp?

frp is a fast reverse proxy that allows you to expose a local server located behind a NAT or firewall to the Internet. It currently supports TCP and UDP, as well as HTTP and HTTPS protocols, enabling requests to be forwarded to internal services via domain name.

frp also offers a P2P connect mode.

Table of Contents

Development Status

frp is currently under development. You can try the latest release version in the master branch, or use the dev branch to access the version currently in development.

We are currently working on version 2 and attempting to perform some code refactoring and improvements. However, please note that it will not be compatible with version 1.

We will transition from version 0 to version 1 at the appropriate time and will only accept bug fixes and improvements, rather than big feature requests.

About V2

The complexity and difficulty of the v2 version are much higher than anticipated. I can only work on its development during fragmented time periods, and the constant interruptions disrupt productivity significantly. Given this situation, we will continue to optimize and iterate on the current version until we have more free time to proceed with the major version overhaul.

The concept behind v2 is based on my years of experience and reflection in the cloud-native domain, particularly in K8s and ServiceMesh. Its core is a modernized four-layer and seven-layer proxy, similar to envoy. This proxy itself is highly scalable, not only capable of implementing the functionality of intranet penetration but also applicable to various other domains. Building upon this highly scalable core, we aim to implement all the capabilities of frp v1 while also addressing the functionalities that were previously unachievable or difficult to implement in an elegant manner. Furthermore, we will maintain efficient development and iteration capabilities.

In addition, I envision frp itself becoming a highly extensible system and platform, similar to how we can provide a range of extension capabilities based on K8s. In K8s, we can customize development according to enterprise needs, utilizing features such as CRD, controller mode, webhook, CSI, and CNI. In frp v1, we introduced the concept of server plugins, which implemented some basic extensibility. However, it relies on a simple HTTP protocol and requires users to start independent processes and manage them on their own. This approach is far from flexible and convenient, and real-world demands vary greatly. It is unrealistic to expect a non-profit open-source project maintained by a few individuals to meet everyone's needs.

Finally, we acknowledge that the current design of modules such as configuration management, permission verification, certificate management, and API management is not modern enough. While we may carry out some optimizations in the v1 version, ensuring compatibility remains a challenging issue that requires a considerable amount of effort to address.

We sincerely appreciate your support for frp.

Architecture

Example Usage

To begin, download the latest pr

readme truncated — read the full docs on github

Frequently asked questions

Is frp free to use?

frp is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does frp do?

A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.

What is frp written in?

frp is primarily written in Go. Its source is publicly available at https://github.com/fatedier/frp, and it has 109,502 GitHub stars.