Expose Local Apps To The Public Internet
Quick Start
Expose service
Run this command
1. Paste what you want to share
A local port such as 3000, a running URL such as http://localhost:3000, or a file path such as file:///Users/me/site/index.html — file paths are served as a static site straight from that folder, so nothing needs to be running locally.
2. Run this command
curl -fsSL https://github.com/gosuda/portal-tunnel/releases/latest/download/install.sh | bash && export PATH="$HOME/.local/bin:$HOME/bin:$PATH"portal expose 3000 --name zesty-beacon-sketch
3. Open the URL printed by Portal
Portal discovers public relays and prints the available URLs in your terminal.
The name above applies when creating a new identity; an existing identity.json keeps its saved name.
Core features
Built for real localhost publishing
Publish through a public ingress while an independent overlay network owns the path
behind it. Try portal expose 3000 --overlay; direct reverse transport
remains the default and fallback. Explore IVNP-backed overlay networking.
IVNP
IVNP-backed overlay networking
Portal selects and authorizes the ingress and gateway. IVNP owns the network path between them, including internal routers and hops.
TLS
Client-side tenant TLS
Uncached HTTPS tunnels terminate TLS locally. Optional static caching explicitly trusts the selected relays.
HTTP
Tunnel-controlled HTTP routing
Mount frontend, API, and other local HTTP services behind one public URL.
Ports
Raw TCP and UDP leases
Expose game servers, custom TCP protocols, and datagram services through relay ports.
Mesh
Relay pools and failover
Use discovered and explicit relays for resilient public connectivity.
Ops
Self-hosted or public relays
Run your own relay, attach explicit relays, or use the public relay registry.
Looking for the complete capability breakdown across CLI, Agent, SDK, and Relay? View the Canonical Feature Inventory →