Safe tunnels, simple pricing
Self-host free forever. Or let us run it — start with a free tunnel, upgrade when you need more.
Free
- 1 active tunnel
- 2 GB/month bandwidth
- 2-hour sessions
- Random tunnel URL
- 1 API key
Dev
- 5 active tunnels
- 50 GB/month bandwidth
- Persistent tunnels
- Claim your subdomain
- Named tunnels under your subdomain
- 5 API keys
- Outgoing webhooks
- Request inspection
Pro
- 20 active tunnels
- 200 GB/month bandwidth
- Persistent tunnels
- Bring your own domain
- Named tunnels under your domain
- 10 API keys
- Signed webhooks (HMAC)
- Audit log
- IP allowlist
Self-Hosted — Free Forever
Run the server on your own infrastructure. Unlimited tunnels, bandwidth, and features. Open source.
Docker sidecar image, MCP agent skill, CLI client, and self-hosting are free and open source on every tier.
FAQ
What's the difference between self-hosted and hosted?
Self-hosted means you run the NullBore server on your own infrastructure. You get all features, no limits, no cost — but you manage the server. Hosted means we run the infrastructure for you. You get a URL, dashboard, and API key instantly.
What kind of URL do I get?
On Free, you get a random URL like a7f3bc.tunnel.nullbore.com that changes each session. On Dev, you claim an account subdomain like yourcompany.nullbore.com and create named tunnels under it — web.yourcompany.nullbore.com, api.yourcompany.nullbore.com, etc. On Pro, you can also bring your own domain.
Can I use NullBore with AI agents and MCP servers?
Yes — it's one of our best use cases. Expose a local MCP server to a cloud-hosted agent, run your workflow, and the tunnel stays up as long as you need it. We have an OpenClaw skill and a Docker sidecar image that make integration seamless.
Can I upgrade or downgrade anytime?
Yes. Changes take effect immediately. Downgrades prorate to the next billing cycle.
What does "persistent" mean?
Persistent tunnels stay alive until you close them — no automatic expiry. Free tunnels expire after 2 hours. On Dev and Pro, the default TTL is persistent, but you can set a shorter TTL per tunnel if you prefer your tunnels to clean themselves up.
What are outgoing webhooks?
NullBore sends HTTP events to your URL when tunnels open, close, or expire — useful for automation, monitoring, and CI/CD integration. On Pro, webhooks include an HMAC signature so you can verify they came from NullBore.
This is different from testing incoming webhooks (e.g., Stripe → your local server), which works on every tier — it's just HTTP traffic through your tunnel.
What counts as bandwidth?
All data relayed through the tunnel — both directions. If you're proxying a 1MB page load, that's ~1MB of bandwidth.
Do you log tunnel traffic?
Not by default. We always track aggregate metadata (byte counts, request counts, timestamps) for billing and rate-limiting. Request inspection is off by default on every tunnel — you turn it on per tunnel from the dashboard when you want to debug. When enabled (Dev plan and up), we record the method, path, redacted headers, and the first 4KB of each request body, visible only to you. Toggle it off anytime; existing logs are kept until you delete the tunnel.
Can I use NullBore for webhook testing?
Absolutely — expose a local endpoint, point Stripe/GitHub/etc at the tunnel URL, test your integration, done. This works on every tier, including Free.
What's the Docker sidecar?
A lightweight container (ghcr.io/nullbore/tunnel:latest) that sits alongside your services in docker-compose and exposes them through tunnels — no published ports needed. See the Docker guide.