ngsrv lets you expose local apps, APIs, webhooks, TCP services, and static files through secure public URLs without deploying, opening ports, or fighting network config.
Test webhooks. Share demos. Preview mobile apps. Use custom domains. Get a public URL for localhost.
$ brew install ngsrv/tap/ngsrv
$ ngsrv token <YOUR_TOKEN>
$ ngsrv http 8080
✓ Public URL ready
https://blue-river.ngsrv.app → http://localhost:8080ngsrv is a secure developer tool for giving local services public URLs. It lets you expose a local server, API, webhook endpoint, TCP service, or static folder to the internet without deploying.
Developers use ngsrv to test webhooks, share local demos, preview applications on mobile devices, connect external services to local environments, and create temporary public access for work that is still running locally.
Receive Stripe, GitHub, WhatsApp, Slack, or custom webhook calls on your local machine.
Share a working local build without deploying a staging environment.
Test a local backend from a real phone using a secure public URL.
Give support or QA temporary access to a feature running locally or in CI.
Use branded URLs for demos, previews, and team workflows.
Expose more than HTTP when your workflow needs it.
Most public links are one-off commands you forget after the demo. ngsrv is built for repeatable development workflows: CLI-first, config-friendly, secure by default, and ready for teams that want their setup to live beside their code.
ngsrv is for developers who want public local access to feel like part of their toolchain, not a random temporary workaround.
When you need category clarity: ngsrv is secure tunneling for local development — a CLI and edge that turn localhost into a public URL you can share, test, and configure.
Three pieces, working as one. Configure your tunnels in YAML, route through a global edge, control everything from a single CLI.
Any local port → an edge-terminated HTTPS URL. HTTP/2 by default. Custom domain BYOD. Reserved subdomains. Static serve. TCP tunnels.
Policies declared in YAML, enforced at the edge before traffic ever reaches your process. Free tier ships with the full set.
A single binary that lives wherever your app does — Docker Compose, a Kubernetes sidecar, a CI step. Structured logs and Prometheus metrics included.
Define your tunnels in a single file alongside your service. Bring them up together, take them down together, ship them the same way you ship the rest of your code.
# ngsrv.yml — declarative, multi-tunnel, GitOps-ready
tunnels:
- name: api
port: 8080
subdomain: api
security_policies:
- ngsrv_ips_office
- ngsrv_rate_api
- name: webhooks
port: 9000
subdomain: hooks
- name: docs
port: 3000
domain: docs.example.comHow it runs in your pod
Attach a policy to a tunnel and it's enforced at the edge — before traffic ever touches your process. Every plan ships with the full set, free included.
# Policy IDs from Dashboard → Security (create once, reuse by ID)
security_policies:
- ngsrv_ips_office
- ngsrv_rate_standard
- ngsrv_time_business
- ngsrv_hdr_internalNo new pipeline, no proxy to maintain. Just a binary that fits beside whatever you already ship.
Free ships with everything that matters. Paid plans add scale, not gates.
Custom domains, WAF, more tunnels, longer logs. Best for solo devs and small teams.
See planStart with a single command, then grow into custom domains, config files, and repeatable team workflows when you need them.