explaingit

fatedier/frp

📈 Trending106,277GoAudience · developerComplexity · 3/5ActiveLicenseSetup · easy

TLDR

A reverse proxy tool that exposes local services to the internet by tunneling through a public server, bypassing NAT and firewalls.

Mindmap

mindmap
  root((frp))
    What it does
      Expose local services
      Bypass NAT firewalls
      Route by domain
    How it works
      Client server pair
      Outbound tunnel
      Traffic forwarding
    Protocols supported
      TCP UDP
      HTTP HTTPS
      DNS forwarding
    Features
      Authentication tokens
      TLS encryption
      Load balancing
      Health checks
    Use cases
      Remote SSH access
      Internal web services
      File sharing
      HTTPS wrapping

Things people build with this

USE CASE 1

Access your home or office computer remotely via SSH from anywhere on the internet.

USE CASE 2

Expose an internal web application to the public with a custom domain and HTTPS.

USE CASE 3

Share files or run a simple HTTP server on your local machine accessible to external users.

USE CASE 4

Forward DNS queries or other UDP traffic from the internet to services on your private network.

Tech stack

Go

Getting it running

Difficulty · easy Time to first run · 5min
Use freely for any purpose, including commercial use, as long as you keep the copyright notice.

In plain English

frp is a tool that lets you take a server running on your own computer or local network and make it reachable from the internet, even when that machine sits behind a NAT or firewall that would normally block incoming connections. The README calls it a fast reverse proxy. In plain terms, NAT and firewalls are layers that share one public address across many devices and block uninvited traffic; frp's job is to punch a controlled, authenticated path so public users can reach a service that would otherwise be hidden. It works in a client-and-server pair. You run the frp server on a machine that already has a public address, and you run the frp client next to the local service you want to expose. The client opens a connection out to the server, and the server forwards inbound traffic back to your local service. The README states it supports TCP, UDP, HTTP, and HTTPS, can route HTTP or HTTPS requests to internal services by domain name, and offers a peer-to-peer connect mode. People reach for frp to do things listed in the README, such as accessing a home or office computer over SSH, exposing internal web services via custom domains, forwarding DNS queries, sharing files via a simple HTTP file server, or putting HTTPS in front of a local HTTP service. The README also lists features such as a server dashboard, a client admin UI, token and OIDC authentication, TLS encryption, bandwidth limits, load balancing, and health checks. The project is written in Go. The README notes that a v2 rewrite has been considered but is on hold; the current version is being maintained with bug fixes and improvements. The full README is longer than what was provided.

Copy-paste prompts

Prompt 1
How do I set up frp to expose a local web server running on port 8080 to the internet with a custom domain?
Prompt 2
Show me the configuration files I need to create to run frp client and server, and how to authenticate between them.
Prompt 3
How can I use frp to access my home computer via SSH from outside my network without opening ports on my router?
Prompt 4
What are the steps to enable HTTPS/TLS encryption for traffic between the frp client and server?
Prompt 5
How do I set up load balancing or health checks in frp for multiple backend services?
Open on GitHub → Explain another repo

Generated 2026-05-21 · Model: sonnet-4-6 · Verify against the repo before relying on details.