goport.uz / ngrok-alternative

GoPort: Open-Source ngrok Alternative You Can Self-Host

GoPort gives an app on your machine a public HTTPS URL with one command. It is MIT licensed, has a local request inspector with replay, and runs on goport.uz or on your own server.

tunnel trace
$ goport http 8080

Route active

https://abc123.goport.uz → localhost:8080

What GoPort is

A localhost tunnel with nothing hidden.

Run goport http 8080 and the app on port 8080 becomes reachable at a link like https://abc123.goport.uz. You need no public IP, port forwarding or router settings, because the CLI makes the connection outward.

The CLI opens one TCP connection to the GoPort server on port 7000 and keeps it open. When a request arrives for your subdomain, the server opens a new yamux stream on that connection. The CLI passes it to your local port and sends the response back the same way. The original Host header is kept.

The code is released under the MIT license, and the hosted service runs the same server code you can deploy yourself.

License
MIT. Source for the CLI, the tunnel server and this website is public on GitHub.
Hosted or self-hosted
Use goport.uz on the Free or Pro plan, or run the same server code on your own machine.
Public URL
HTTPS on a subdomain such as abc123.goport.uz. TLS is handled on the server, so you need no certificate locally.
Protocols
HTTP and WebSocket. Raw TCP and UDP tunnels are not supported.
Request inspector
A local web UI at 127.0.0.1:4040 that shows each request and response, replays a request, and copies it as cURL.
Subdomains
Random by default and reused when you restart. Custom names such as myapp.goport.uz are a Pro feature.
Reconnects
Since 0.1.8 the CLI reconnects by itself after Wi-Fi drops or sleep and keeps the same URL.
Platforms
Windows x64, macOS (Intel and Apple Silicon) and Linux x64. Other targets can build from source.

Comparison

GoPort, ngrok, frp, LocalTunnel, zrok and Cloudflare Tunnel.

Facts only, checked on 20 October 2026 against each project's official documentation, pricing page or source code. Products change, so follow the sources before you decide.

Feature comparison of GoPort and other tunneling tools
FeatureGoPortngrokfrpLocalTunnelzrokCloudflare Tunnel
Source licenseMITClosed-source agent. The old v1 was Apache-2.0 and is archived.Apache-2.0MIT (client and server)Apache-2.0cloudflared is Apache-2.0. The network side is Cloudflare's.
Run the server yourselfYes, with Docker ComposeNoYes (frps). This is the only way to use it.Yes (localtunnel/server)Yes, a Docker Compose stack built on OpenZitiNo
Hosted servicegoport.uz, Free and Pro plansYes, including a free plan with limitsNo official serviceFree public server (loca.lt)zrok.io free plan, run by NetFoundryYes, on all Cloudflare plans
Account for the hosted serviceYes (CLI token)Yes (authtoken)Not applicableNoYesQuick Tunnels: no. Named tunnels: yes.
HTTPS without your own certificateHosted: yes. Self-hosted: you supply a wildcard certificate.YesNo. Bring certificates or use the https2http plugin.Hosted: yes. Self-hosted: put a TLS proxy in front.Self-hosted: optional Caddy TLS setupYes
WebSocketYesYesYes, through HTTP or TCP proxiesYesYesYes
Request inspector with replayYes, local at 127.0.0.1:4040Yes, local at localhost:4040, with edit before replayNo. The dashboard shows per-proxy statistics.NoNone documentedNone documented
Raw TCP or UDPNo. HTTP and WebSocket only.TCP and TLS endpoints (TCP on Free needs a verified card). No UDP endpoint is documented.TCP and UDPNoPrivate shares only, not publicTCP with cloudflared on the client side too. UDP through WARP private networking.
Your own name or domainCustom goport.uz subdomain on Pro. Any domain when self-hosted.One assigned dev domain on Free. Your own domain from the Pay-as-you-go plan.Any domain, on your server and DNSYou can request a subdomain, but it is not reservedReserved shares with a custom nameYour domain, managed in Cloudflare

When GoPort is a good choice

  • You want to read, audit or fork both the client and the tunnel server, under the MIT license.
  • You test webhooks locally and want to see and replay each delivery on your own machine.
  • Your dev server uses WebSockets. Next.js hot reload works through the tunnel.
  • You want the same URL after a restart or a dropped connection, without paying for a reserved domain.
  • You want a low-cost hosted plan (Pro is $2.99 a month) or would rather run the server yourself.

When it may not be the best choice

  • You need raw TCP or UDP, for example SSH, a database or a game server. GoPort forwards HTTP and WebSocket only.
  • Your tunneled traffic is sensitive. The link between the GoPort server and the CLI is plain TCP today, not TLS, so anyone on that network path can read tunneled requests and your token.
  • You or your visitors are far from Europe. The hosted service runs in one region, in France, and every request goes there and back to your machine.
  • You need SSO, IP allow-lists or an authentication layer in front of the tunnel. GoPort has none of these.
  • You need Linux on ARM, such as a Raspberry Pi. Releases cover Linux x64 only, so you would build from source.
  • You need an uptime SLA. GoPort is a young project; its first release was in June 2026.

Read the security model for what each hop protects and what the server can see.

Install

Install the CLI, then open a tunnel.

Pick the line for your system. The Windows installer from the latest release also works and adds goport to your PATH.

macOS (Homebrew)

Run this in your terminal

brew install muhammad-deve/goport/goport

Windows (Chocolatey)

Run this in your terminal

choco install goport

Windows (Scoop)

Run this in your terminal

scoop bucket add goport https://github.com/muhammad-deve/scoop-goportscoop install goport

Linux x64

Run this in your terminal

sudo curl -fsSL -o /usr/local/bin/goport https://github.com/muhammad-deve/GoPort/releases/latest/download/goport-linux-amd64sudo chmod +x /usr/local/bin/goport

Connect your account and start a tunnel

Copy a token from the Tokens page of your dashboard. The token is saved on your machine, so you do this once. Then pass the port your app listens on.

Run this in your terminal

goport auth <token>goport http 8080

Example

Test a webhook against local code.

Payment providers, GitHub and Telegram deliver events to a public URL, and most require HTTPS. Give them your GoPort URL while the handler still runs on your machine.

  1. 1. Start your app and the tunnel

    With your handler listening on port 3000, start a tunnel to that port.

    Run this in your terminal

    goport http 3000
  2. 2. Register the public URL with the provider

    Use the printed link plus your route as the webhook endpoint, for example https://abc123.goport.uz/webhooks/payments. You can send a test delivery yourself first:

    Run this in your terminal

    curl -X POST https://abc123.goport.uz/webhooks/payments -H "Content-Type: application/json" -d '{"event":"ping"}'
  3. 3. Inspect and replay

    Open http://127.0.0.1:4040to see the headers and body of each delivery and your app's response. After you fix the handler, replay the delivery instead of triggering a new event. A replay goes straight to your local app, not through the public URL, and uses the stored body, which is cut off at 256 KiB.

Self-hosting

Run the tunnel server on your own domain.

The server is a Go application built on PocketBase. It listens on TCP 7000 for CLI connections and serves the API and the tunneled requests over HTTP behind a reverse proxy such as nginx, which holds your wildcard certificate. Docker Compose starts the server and the dashboard.

  • A server with a public IP
  • A domain with a wildcard DNS record, such as *.example.com
  • A wildcard TLS certificate (certbot with a DNS-01 challenge)
  • Docker Compose and a reverse proxy in front of the server
  • A Resend API key for sign-up emails, or accounts created in the PocketBase admin UI

The server code applies the Free and Pro plan limits to every account, including on your own server. Change them in backend/app/internal/model/billing.go before you build. Until the CLI link supports TLS, allow port 7000 only from networks you trust, or reach it over a VPN.

Then point the CLI at your server. Only these environment variables change, so the commands stay the same.

Run this in your terminal

export GOPORT_SERVER_ADDR=tunnel.example.com:7000export GOPORT_DOMAIN=example.comexport GOPORT_API_URL=https://back.example.com

FAQ

Questions about switching from ngrok.

Is GoPort a free ngrok alternative?
The hosted Free plan costs nothing and needs no card: 1 active tunnel, 5 GB of traffic a month and a random goport.uz subdomain. Pro costs $2.99 a month or $19.99 a year. The software is MIT licensed, so running your own server costs only the server.
Is GoPort open source?
Yes. The project is released under the MIT license, and the CLI, the tunnel server and the website are public repositories on GitHub.
Can I self-host GoPort?
Yes. You need a server with a public IP, a domain with a wildcard DNS record, a wildcard TLS certificate and Docker Compose. Point the CLI at it with GOPORT_SERVER_ADDR, GOPORT_DOMAIN and GOPORT_API_URL. The server code applies the Free and Pro plan limits to every account, including on your own server, and you can change them in the backend source before you build.
Does GoPort support WebSockets?
Yes. Upgrade requests pass through the tunnel, so WebSocket apps and Next.js hot reload work.
Can GoPort tunnel TCP or UDP?
No. GoPort forwards HTTP and WebSocket traffic only. For SSH, databases or UDP services, use a tool with TCP or UDP tunnels such as frp.
Can I inspect and replay webhook requests?
Yes. While a tunnel runs, open http://127.0.0.1:4040 to see each request and response, replay a request against your local app, or copy it as a cURL command. The inspector keeps the last 500 requests in memory on your machine and stores bodies up to 256 KiB each.
Is traffic encrypted end to end?
No. Visitors connect to the GoPort server over HTTPS, and TLS ends there. The connection between the server and your CLI is currently plain TCP, so the server can read tunneled traffic, and so can anyone on the network path between the server and your machine.
Which operating systems are supported?
Release builds exist for Windows x64, macOS on Intel and Apple Silicon, and Linux x64. You can install with Homebrew, Chocolatey, Scoop, the Windows installer or a direct download.
Do I need an account?
Yes. The CLI needs a token, which you create in the dashboard and save once with goport auth <token>. A self-hosted server works the same way, with accounts on your own server.

Read next