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
Basic
- 1 persistent tunnel per slot
- 50 GB/month bandwidth per slot
- Claim your subdomain
- Request inspection + webhooks
- IP allowlist
Plus
- 5 persistent tunnels (add more at $1 each)
- 250 GB/month bandwidth
- Bring your own custom domain
- Everything in Basic
- Custom domains
- Monthly billing option
Pro
- 20 persistent tunnels (add more at $1 each)
- 1 TB/month bandwidth
- Custom domains
- Everything in Plus
- Audit log
- Priority support
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. With a paid slot, you claim an account subdomain like yourcompany.nullbore.com and create named tunnels under it — web.yourcompany.nullbore.com, api.yourcompany.nullbore.com, etc. (Bringing your own custom domain is available as a higher option.)
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. With a paid slot, 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. Available with any paid slot.
This is different from testing incoming webhooks (e.g., Stripe → your local server), which works on every plan — 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 (any paid slot), 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.