open source · written in Go · MIT license

Expose local services
to the internet, instantly

One command to create a public URL for any HTTP service running on your machine. No accounts, no config files, no nonsense.

$ curl -sSL https://raw.githubusercontent.com/eslusarenko/port-client/master/scripts/install.sh | sh
bash — port expose 8891
tunnel live
$port expose 8891
  → tunnel ready: https://k7qm3pxa.tnls.lt
  → forwarding to http://localhost:8891
GET  / 200 12ms
GET  /favicon.ico 200 3ms
POST /api/submit 201 47ms

How it works

Three components, zero configuration.
STEP 01

Client connects to server

The port expose command opens a persistent WebSocket connection to the public port-server. The server assigns a random subdomain and hands it back.

STEP 02

Server routes public traffic

Incoming HTTPS requests to *.tnls.lt are matched by the Host header and forwarded through the tunnel to your client.

STEP 03

Client proxies to local service

Your machine receives the request, forwards it to localhost:8891, and sends the response back — all over the same WebSocket, with full multiplexing.

Install

Pre-built binaries for macOS and Linux (amd64 / arm64).
bash — install script (recommended)
$curl -sSL https://raw.githubusercontent.com/eslusarenko/port-client/master/scripts/install.sh | sh
Supports macOS and Linux (amd64 / arm64). Prompts for install location and verifies the checksum.
bash — build from source
$git clone https://github.com/eslusarenko/port-client
$cd port-client
$make build # → bin/port
Requires Go 1.24+ and Make.
bash — verify
$port --version
port version 1.0.0
Run port ls to list local TCP ports on your machine.

Usage

Point at any local HTTP service.
Client
bash — expose a service
$port expose 8080
# custom server
$port expose --server wss://myserver.example.com 8891
bash — list local ports
$port ls
IPv4
PROTO  LOCAL ADDR  PORT  PROCESS
tcp4   0.0.0.0     8080  node
tcp4   127.0.0.1   5432  postgres
$port ls --verbose
# adds PID and full command line
bash — environment variables (client)
# same as --server flag
PORT_SERVER=wss://myserver.example.com
PORT_LOG_LEVEL=info
Server
bash — environment variables (server)
PORT_ADDR=:8080
PORT_BASE_DOMAIN=tnls.lt
PORT_TUNNEL_TTL=24h
PORT_LOG_LEVEL=info
PORT_LOG_TYPE=plain
PORT_MAX_BODY_SIZE=10485760
PORT_PING_INTERVAL=30s
PORT_PING_TIMEOUT=1m30s
PORT_TRUST_PROXY_HEADERS=false