Test your app on a real device
Building a mobile or web app and want to try a real build on your phone before publishing it — without an Apple/Google developer account yet, over cellular, or just without reconfiguring the app's API URL every time your wifi changes? Point it at a Pipehero tunnel instead of your Mac's LAN IP: you get HTTPS for free (iOS blocks plain HTTP by default), a stable URL, and it works from anywhere, not just your home network.
Plain REST calls already work through any tunnel, unmodified — no special setup. This page is about the one thing that doesn't: your app's own WebSocket connection (chat, live updates). That needs a Realtime tunnel:
pipehero start myapp --port 3000 --realtime # → https://myapp.t.pipehero.app forwards HTTP *and* WebSocket traffic to localhost:3000
Or toggle Realtime from the dashboard when creating the tunnel. Either way it's per-tunnel — set once, remembered for every future pipehero start. Point your app's base URL (build config / .env / Xcode scheme) at the resulting https:// and wss:// URLs instead of localhost.
What kind of tunnel do I need?
The three tunnel kinds in the dashboard are about what's on the other end of localhost, not about behavior — Webhook and MCP server are purely descriptive labels for the dashboard's icons/badges. Realtime is the one that actually changes what the tunnel does: it's the only one that opts into WebSocket relay.
- Webhook — receiving events from a provider (Stripe, GitHub…). Plain HTTP request/response.
- MCP server — exposing your own Streamable HTTP MCP server to a cloud client. Also plain HTTP request/response; see Expose your MCP server.
- Realtime — this page. Adds WebSocket passthrough on top of the same tunnel, for your own app's realtime traffic.
Under the hood, WebSocket passthrough is its own flag, independent of the descriptive kind — the dashboard's three buttons are just presets. If you need a webhook receiver that also relays a companion WebSocket feed, use set_ws_passthrough (CLI MCP tool or the /mcp/tunnels/{subdomain}/ws-passthrough endpoint) to turn it on independently of the dashboard's kind toggle.