v0.1.0

Expose your localhost
to the internet. Instantly.

Open-source ngrok alternative. One command gives your local server a public HTTPS URL. No signup. No config. Just works.

$ curl -fsSL https://wormhole.bar/install.sh | sh click to copy
$ wormhole http 3000
Status connected Forwarding https://k7x9m2.wormhole.bar → localhost:3000 Inspector http://localhost:4040
Requests
GET / 200 12ms
POST /webhooks/stripe 200 8ms
GET /api/users 200 34ms
GET /api/missing 404 2ms

Everything you need to tunnel

Built for developers who need a public URL fast. No signup walls, no credit cards, no complex setup.

One Command

wormhole http 3000 and you're live. That's it.

🔒

HTTPS by Default

TLS handled automatically by Cloudflare's edge. Always secure.

🌐

Custom Subdomains

Free custom subdomains with GitHub login. myapp.wormhole.bar

🔍

Traffic Inspector

Built-in dashboard at localhost:4040 with live request stream.

🔁

Request Replay

Re-send any captured request to your local server with one click.

📦

HAR Export

Export captured traffic in standard HAR format for analysis.

🎨

Color-Coded TUI

Beautiful terminal UI with live request log, method and status colors.

🔃

Auto-Reconnect

Exponential backoff with seamless recovery. Set it and forget it.

🔌

WebSocket Support

Full WebSocket passthrough. Real-time apps work out of the box.

Get started in seconds

Choose your preferred method. Works on macOS and Linux. Windows coming soon.

Quick install (macOS / Linux)
curl -fsSL https://wormhole.bar/install.sh | sh
Homebrew (macOS)
brew install MuhammadHananAsghar/tap/wormhole
Go install
go install github.com/MuhammadHananAsghar/wormhole/cmd/wormhole@latest
Build from source
git clone https://github.com/MuhammadHananAsghar/wormhole.git && cd wormhole && go build -o wormhole ./cmd/wormhole

CLI Reference

All the commands you need.

wormhole http <port> Expose local HTTP server
wormhole http <port> --subdomain NAME Custom subdomain
wormhole http <port> --headless No TUI, plain log output
wormhole http <port> --inspect ADDR Custom inspector address
wormhole http <port> --no-inspect Disable traffic inspector
wormhole login Authenticate via GitHub
wormhole logout Remove stored credentials
wormhole status Show auth status
wormhole uninstall Remove wormhole from system
wormhole version Print version

How it works

Your traffic flows through Cloudflare's global edge network, with a Durable Object holding your tunnel session.

Your Laptop
wormhole client
localhost:3000
←→ WebSocket (encrypted)
Cloudflare Edge
Worker (router)
Durable Object (tunnel)
*.wormhole.bar
300+ cities worldwide

The flow

  1. Client opens WebSocket to nearest Cloudflare edge
  2. Durable Object assigns a unique subdomain
  3. HTTP requests to *.wormhole.bar hit the Worker
  4. Worker routes to the correct Durable Object
  5. DO serializes the request over WebSocket to your client
  6. Client forwards to localhost:3000
  7. Response flows back the same path

How Wormhole stacks up

Feature ngrok (free) Cloudflare Tunnel Wormhole
One-command setup Needs signup Needs CF account Just works
Custom subdomains Paid ($8/mo) Yes (complex) Free
HTTPS
Traffic inspector Basic Full (replay, HAR)
WebSocket support
Open source Client only Fully open source
Cost $0-120/yr $0 (complex) $0

What's coming next