Reverse Tunnel  ·  v1.0 Stable

Expose
Local.
Go Global.

One command. RevNet punches through NAT, firewalls, and routers — giving your localhost a permanent public URL. No accounts. No config. No nonsense.

revnet — bash
rev tunnel http localhost:3000 --name myapp
Protocol HTTP
Target localhost:3000
Public revnet.my.to/myapp
Status ● Connected
────────────────────────────────────
08:14:22 GET / 200 9ms
08:14:25 POST /api/login 201 34ms
08:14:28 GET /dashboard 200 6ms
08:14:31 GET /api/users 200 11ms
08:14:35 DEL /api/users/7 404 3ms
Requests 5   Bytes 48.2KB
HTTP Tunnels
TCP Tunnels
WebSocket Protocol
Live Dashboard
Timed Sessions
Custom Names
Auto-Reconnect
Zero Config
HTTP Tunnels
TCP Tunnels
WebSocket Protocol
Live Dashboard
Timed Sessions
Custom Names
Auto-Reconnect
Zero Config
0ms
Average latency
0+
Supported protocols
0
Config files needed
0s
Setup time
What it does

Every feature you
actually need.

01 ——
Instant public URL

Register a name, get a URL. Your local service is publicly reachable within seconds — no DNS changes, no port forwarding, no router config.

02 ——
HTTP & TCP tunnels

Forward full HTTP traffic with header passthrough, or tunnel raw TCP for databases, SSH, Redis, game servers, and anything that speaks TCP.

03 ——
Live request inspector

Watch every request hit your tunnel in real time. Method, path, status code, latency, and byte counts — all rendered in a rich terminal dashboard.

04 ——
Persistent connection

A long-lived WebSocket with ping/pong keepalive and exponential backoff reconnect logic. Your tunnel stays up even on flaky networks.

05 ——
Timed sessions

Need a tunnel that self-destructs? Pass --time 60 and the server closes it automatically after 60 minutes. Perfect for demos.

06 ——
Custom named tunnels

Pick a name with --name for a predictable, shareable URL — or let RevNet generate a random 8-character slug.

Architecture

Three hops.
Sub-second
latency.

01

Client connects to relay

The rev binary opens a persistent WebSocket to the RevNet relay and registers your tunnel name, protocol, and target.

02

Relay receives inbound request

A visitor hits your public URL. The FastAPI relay serializes the full HTTP request and pushes it down the WebSocket to your waiting client.

03

Client proxies & returns response

The client forwards the request to your local service via loopback, captures the response, and sends it back through the tunnel in milliseconds.

request flow
External browser
TLS:443
HTTPS · TLS 1.3 <5ms
RevNet relay
FastAPI · uvicorn :8000
WSS · persistent <2ms
rev client
asyncio · httpx local
HTTP · loopback <1ms
Your local service
:3000
CLI Reference

One binary.
One syntax.

Everything runs through a single command. No config files, no daemons, no installers — just rev tunnel and a target.

syntax
rev tunnel <protocol> <target> [--name slug] [--time minutes]
TCP
Databases & SSH
rev tunnel tcp localhost:5432 --name db
rev tunnel tcp localhost:22 --name ssh
rev tunnel tcp localhost:6379 --name redis
FLAGS
All options
--name <string> tunnel name slug
--time <minutes> auto-expire session
rev help
install
pip install rev
or grab the binary
protocols
HTTP · TCP · UDP
full header passthrough
reconnect
exponential backoff
auto-retries on drop
dashboard
live rich TUI
requests · latency · bytes
User Guide

How to use
RevNet.

First Run

Download the binary for your platform, put it anywhere, open a terminal, and you're done. No install wizard. No account. No config file.

On macOS you may need to right-click the binary and choose Open the first time to bypass Gatekeeper. On Linux, run chmod +x rev before the first use.
Verify it works
terminal
rev help

If you see the usage output, RevNet is ready. If Windows says it blocked the file, click "More info" then "Run anyway" — the binary is unsigned but safe.

HTTP Tunnel

Use this for anything that runs in a browser — websites, APIs, webhooks, dev servers. RevNet gives it a public URL instantly.

Basic usage
terminal
rev tunnel http localhost:3000

Replace 3000 with whatever port your app is running on. RevNet will print a public URL — share it with anyone and they'll hit your local app.

With a custom name
terminal
rev tunnel http localhost:3000 --name myproject
Public → revnet.my.to/myproject
Your local app must already be running before you open the tunnel. If nothing is listening on that port, visitors will see a 502 error page.

TCP Tunnel

Use this for databases, SSH, or any non-HTTP service. The relay forwards raw data — RevNet doesn't inspect or modify it.

examples
rev tunnel tcp localhost:5432 --name mydb
rev tunnel tcp localhost:22   --name ssh

The other person connects to revnet.my.to on the port assigned by the relay — RevNet will show you that port in the terminal after connecting.

Custom Names

By default RevNet picks a random 8-character slug. Use --name to get a stable, readable URL instead.

CommandResulting URL
rev tunnel http localhost:3000revnet.my.to/x7k2mq9a
rev tunnel http localhost:3000 --name demorevnet.my.to/demo
Names are first-come, first-served on the relay. If someone else is already using a name you want, the connection will be refused. Pick something unique.

Timed Sessions

Pass --time with a number of minutes to automatically kill the tunnel after that duration. Good for demos or sharing something temporarily.

terminal — expires in 30 minutes
rev tunnel http localhost:8080 --name preview --time 30

When the time is up the relay sends an expiry signal and the tunnel closes cleanly. The URL stops working and the terminal exits. You don't need to manually stop it.

Live Dashboard

While a tunnel is open, RevNet shows a live terminal panel with every request that comes through — method, path, status code, latency, and byte count.

ColumnWhat it means
TimeWhen the request arrived (HH:MM:SS)
MethodHTTP method — GET, POST, DELETE, etc.
PathThe URL path the visitor requested
StatusResponse code your app returned — 200 is good, 500 is a crash
DurationHow long your app took to respond
BytesTotal data transferred for that request

Press Ctrl+C at any time to close the tunnel and exit. The public URL stops working immediately.

Error Pages

If someone visits a RevNet URL and something goes wrong, they'll see one of these responses instead of your app.

StatusWhen it showsWhat to do
404 The tunnel name doesn't exist — either it was never opened or it already closed. Make sure RevNet is running and the name in the URL matches what you used with --name.
502 The tunnel is connected but your local app isn't responding on that port. Check that your local server is still running. Restart it if needed — RevNet will auto-reconnect.
503 The relay couldn't reach the rev client — connection dropped mid-request. Usually temporary. RevNet reconnects automatically within a few seconds.

FAQ

Does RevNet need an account?

No. Open the binary and run — nothing to sign up for.

Can two people use the same tunnel name?

No. Names are unique per relay session. If the name is taken, RevNet will refuse the connection and tell you.

What happens if I close the terminal?

The tunnel closes immediately. The public URL stops working. Open RevNet again with the same --name to restore it.

Is traffic encrypted?

Yes. The relay runs over HTTPS and the WebSocket connection uses WSS (TLS). Traffic between the relay and your machine is encrypted in transit.

How do I stop the tunnel?

Press Ctrl+C in the terminal where RevNet is running. It shuts down cleanly.

Get started in 30 seconds

Download
RevNet.

Free, open source, and single binary. Drop it in your PATH and run.