News

Welcome to viaduct.sh

Simple, open-source tunneling: one command gives a service on your machine a public HTTPS URL.

viaduct.sh is a free, open-source reverse tunnel. Run one command and a service on your laptop gets a public HTTPS URL, with no inbound ports, no port forwarding, and no NAT configuration to wrestle with.

$ pipx install viaduct-sh
$ viaduct http 8080
  Forwarding  https://sunny-otter.viaduct.sh  →  http://127.0.0.1:8080

That prints a fresh URL and forwards traffic straight to your local port until you stop it. It is handy for sharing work in progress, testing a webhook, or showing something on a phone without deploying anything first.

Free to use, and yours to run

The hosted viaduct.sh service is free, with no accounts and no signup. It is also completely open source, so if you want full control you can spin up your own in a few minutes on one small VPS. The client points at the hosted server by default; a single flag points it at your own.

Small on purpose

viaduct is a deliberately small alternative to ngrok and frp: standard library Python with only typer and rich as runtime dependencies, no database, and no dashboards. The whole client and server are plain asyncio you can read in an afternoon, so if it ever does something surprising, you can go find out exactly why.

Pick a region

The hosted service runs nodes in five regions (London, New York, Singapore, Sydney, and Bangalore). Add --region to run your tunnel through the one nearest your traffic:

$ viaduct http 8080 --region nyc

Stable URLs and your own domain

Need the same URL every time, for a webhook or a long-lived demo? Add --pin and the subdomain sticks across reconnects. Want your own domain? Point a CNAME at your pinned tunnel and viaduct serves it with an automatic certificate.

Coming from localtunnel?

localtunnel is a lovely, dead-simple way to grab a quick public URL, and viaduct owes a lot to that idea. viaduct aims a bit higher on features while staying just as quick to start:

  • Self-host the whole thing. Run your own server on your own domain, or use the free hosted service. The code is the same either way, and open source.
  • Stable URLs. --pin keeps the same subdomain across reconnects, and you can point your own custom domain at it.
  • Pick a region. The hosted service runs nodes in five regions, so you can route through the one nearest your traffic.
  • Built to stay up. Automatic HTTPS, WebSocket support, a graceful drain on server restart, and automatic client reconnect with backoff.
  • Read the whole thing. A couple thousand lines of standard-library Python, on PyPI as viaduct-sh, with no database or dashboards.

Try it

Install it, expose something, and send someone the link:

$ pipx install viaduct-sh
$ python3 -m http.server 8080
$ viaduct http 8080

It is on PyPI as viaduct-sh, and the source is on GitHub. Read it, fork it, or run your own. Full setup is in the docs.

← All news