Skip to main content

Dev Tunnels: Test Webhooks and Share Local Apps Without a Deploy

Dev Tunnels: Test Webhooks and Share Local Apps Without a Deploy
Table of Contents

If you read the Cloudflare Tunnel post, you know the problem: localhost does not accept webhooks, OAuth providers reject http://localhost as a redirect URI, and showing a client a work-in-progress means a deploy. Cloudflare Tunnel solves it, but it wants a Cloudflare account and domain setup.

Microsoft Dev Tunnels is the zero-setup alternative. It is already installed if you have Visual Studio 2022 17.4+ (including VS 2026) or the Azure CLI. One command, and your localhost has a persistent public URL backed by Azure infrastructure.

When to use which:

  • Cloudflare Tunnel: you own a domain and want a stable named URL (api.yourdomain.com), production-ish setup.
  • Dev Tunnels: you want to be running in 30 seconds, no domain, already have VS or the Azure CLI.

How it works
#

The devtunnel process opens an outbound connection to Azure’s relay. No inbound ports, no firewall changes. Traffic hits the public *.devtunnels.ms URL and forwards to your local port.

graph LR A[Webhook / OAuth Provider\nExternal Client] -->|HTTPS| B[Azure Dev Tunnels\nEdge *.devtunnels.ms] B -->|Persistent connection| C[devtunnel CLI\nor Visual Studio] C -->|localhost| D[Your .NET App\nlocalhost:5217] style A fill:#f4a261,stroke:#e76f51,color:#000 style B fill:#0078d4,stroke:#005a9e,color:#fff style C fill:#0e7490,stroke:#155e75,color:#fff style D fill:#16a34a,stroke:#15803d,color:#fff

Expose localhost in three commands
#

devtunnel user login              # one-time, uses your Azure/Microsoft account
devtunnel host -p 5217            # host a tunnel for localhost:5217
# Connect: https://abc123-5217.devtunnels.ms
# Inspect: https://abc123-5217-inspect.devtunnels.ms

That URL is live immediately.

The main use case: webhooks
#

Your app needs a POST from Stripe, GitHub, or Azure Event Grid, and none of them can reach localhost. Run your API, then host the port with devtunnel host -p 5217 --allow-anonymous and point the provider’s webhook at https://abc123-5217.devtunnels.ms/webhooks/stripe. The --allow-anonymous flag skips the tunnel’s built-in login page, which a webhook sender cannot pass. The -inspect URL gives you a request/response viewer, like ngrok’s dashboard, so you can see the exact payload before your handler runs.

The same tunnel covers the other localhost chores:

  • OAuth redirect URIs: register https://<id>.devtunnels.ms/signin-oidc in your app registration. Azure AD, GitHub, and Google accept it where they reject localhost.
  • Stable URLs: the quick-start URL rotates each session. devtunnel create <name> plus devtunnel port create <name> -p 5217 gives you a named tunnel that keeps the same URL, so you register a callback once.
  • Client demos: devtunnel host -p 4200 and send the link, no deploy. First-time visitors see a confirmation page unless you add --allow-anonymous.
  • Visual Studio: the same thing lives on the debug toolbar (Dev Tunnels, then Create a Tunnel), and the URL is exposed as VS_TUNNEL_URL during the session.

Dev Tunnels vs Cloudflare Tunnel vs ngrok
#

FeatureDev TunnelsCloudflare Tunnelngrok Free
Setup time30 seconds10-15 minutes2 minutes
Custom domainNoYes (own domain)Paid plan
Persistent URLNamed tunnelsYesPaid plan
Auth required on recipientOptionalNoNo
Built into IDEVS 2022+NoNo
Traffic inspectorYesNo (needs dashboard)Yes
Account neededMicrosoft/AzureCloudflarengrok
CostFreeFree (core)Free (limited)

Gotchas
#

  • Session auth page: by default a tunnel visitor sees a Microsoft login prompt. Add --allow-anonymous for webhooks and public demos.
  • Tunnel lifetime: temporary tunnels close with the CLI; named tunnels persist but still need devtunnel host running.
  • Rate limits: Dev Tunnels has usage limits. It is a dev tool, not a way to run production traffic through a tunnel.
  • VS and CLI are separate: a tunnel created in Visual Studio does not show in devtunnel list, and vice versa.
The takeaway: On Windows with Visual Studio, Dev Tunnels is the path of least resistance because it is already there. Reach for Cloudflare Tunnel when you need a stable, domain-backed URL or a cross-platform setup that outlives the debug session.