Integrations
Ways to use viaduct
Reach for viaduct from the terminal, from your own code, from your tests, or from Node. Four ways to give a local port a public URL.
Command line
Share a running app
Point viaduct at any local port and hand the URL to a client, a teammate, or your phone. Automatic HTTPS, no accounts, nothing to deploy.
$ viaduct http 8080 ✓ tunnel live https://funny-otter.viaduct.sh → http://localhost:8080 press q to stop
Python
Open a tunnel from your code
pip install viaduct-sh and open a tunnel with a context
manager, no CLI. Async, with a sync version for scripts and notebooks.
import viaduct async with viaduct.tunnel(8080) as t: print(t.url) # https://funny-otter.viaduct.sh
pytest
A public URL in your tests
The viaduct_tunnel fixture gives a test a real public URL, and
tears it down after. Ideal for exercising inbound webhooks (Stripe, GitHub)
in CI.
def test_stripe(viaduct_tunnel): url = viaduct_tunnel(8000) stripe.WebhookEndpoint.create(url=url + "/hook") # ... assert your handler ran; tunnel closed automatically
Node.js
Native in Node
npm install viaduct-sh (or npx viaduct-sh 3000) and
open a tunnel with an import. Zero dependencies, built on net/tls.
import { tunnel } from "viaduct-sh"; const t = await tunnel(3000); console.log(t.url); // https://funny-otter.viaduct.sh
Got a workflow you'd want viaduct to slot into? Open an issue.
