open source · 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
$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).
$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.
$git clone https://github.com/eslusarenko/port-client
$cd port-client
$make build # → bin/port
Requires Go 1.24+ and Make.
$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
$port expose 8080
# custom server
$port expose --server wss://myserver.example.com 8891
$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
# same as --server flag
PORT_SERVER=wss://myserver.example.com
PORT_LOG_LEVEL=info
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