Named, persistent tunnel URLs defined in code, so webhooks survive restarts and your team shares one config, not a Slack thread of changing URLs.
Quick install
macOS and Linux. Windows? Use Scoop.
The problem
Random tunnel URLs mean reconfiguring webhooks, resending links to teammates, and losing the session state you had in your browser tab.
ngrok / random tunnels
New URL on every restart
Your payment webhook points to abc-xyz.trycloudflare.com. It changes. You update it. It changes again tomorrow. Persistent URLs on ngrok start at $8-20/month per user - 10-20x the cost of a domain.
raw cloudflared
Right infrastructure, rough setup
7 manual steps, credentials files that can't be committed, no process management, and each teammate configures their own setup from scratch.
With burrow
One committed file, same URLs for everyone
Define tunnels in .burrow.yaml and commit it. DNS is created automatically. Every credentialed teammate runs burrow up and gets the exact same domains, every time. ~$10/yr for a domain, shared across the whole team - no per-seat fees.
Features
Tunnels
Persistent named URLs
Domains defined in .burrow.yaml stay the same across restarts. Commit the file, share with the team.
Multi-tunnel
Frontend, API, docs: start all of them in parallel with a single burrow up. Each gets its own URL.
No account needed
Quick tunnels via trycloudflare.com work instantly. No signup, no config. Just run burrow share 3000.
Security & access
Automatic HTTPS
Every tunnel URL is HTTPS. Trusted certificates, green lock, no warnings - for both quick tunnels and named domains.
Password protection
Lock a shared URL behind a password with --password. Basic auth, no extra setup required.
Auto-expiry
Set a TTL on any share tunnel. It shuts itself down after the duration with no dangling processes.
Developer tools
WebSocket and HMR
Vite, Next.js, webpack-dev-server all work without extra config. cloudflared proxies WebSocket connections natively.
Diagnostics
Warns before starting if nothing is listening on the target port. Tail live request logs with burrow logs -f, or run burrow doctor to check your setup.
QR code & clipboard
The tunnel URL is copied to your clipboard automatically on start. Add --qr to also print a QR code for testing on a real device.
Reference
Everything burrow can do. First time? See the Cloudflare setup.
Start all tunnels defined in .burrow.yaml. Tunnels with a domain get persistent URLs; tunnels without one get a free temporary trycloudflare.com URL.
Share a local port instantly with a public URL. No account or config needed. Runs in the foreground; press Ctrl+C to stop.
Stop all running tunnels, or a single one by name.
Show the name, PID, and URL of every tunnel currently running.
Show tunnel request logs. Only available for named tunnels with a domain in .burrow.yaml.
Store Cloudflare API credentials. Only needed once, and only if you want persistent named URLs on your own domain.
Diagnose setup issues - checks that cloudflared is installed, credentials are present, and config is valid.
Remove burrow's config directory, credentials, and PID files from your system.
Install
cloudflared downloads automatically on first use. No manual setup needed for quick tunnels.
macOS and Linux. Windows? Use Scoop.
Other options