Tunnels
LPM.dev Registry tunnels give a local development server a public HTTPS URL. LPM CLI opens the connection, forwards requests to your local port, and starts a local browser inspector for incoming traffic.
lpm login
lpm dev --tunnel
Use a standalone tunnel when your server is already running:
lpm tunnel 3000
Both workflows require an active LPM.dev Registry login and a Pro or Organization plan.
When you revoke a CLI session in the dashboard, its active tunnels close after the registry processes the revocation. Run lpm login again before restarting the tunnel.
When an account's plan stops including tunnels, such as after a downgrade or when organization billing lapses, the account's open tunnels close, usually within a minute.
Connection credentials expire periodically. LPM CLI renews them on the open connection, so requests and WebSocket connections continue.
Choose a Workflow
| Workflow | Command |
|---|---|
| Start the development server and its tunnel together | lpm dev --tunnel |
Tunnel the only active lpm dev endpoint | lpm tunnel |
| Expose an explicit local port | lpm tunnel 3000 |
| Use a claimed domain | lpm tunnel 3000 acme-api.lpm.llc |
Bare lpm tunnel does not assume port 3000. It uses the only active lpm dev endpoint and asks for an explicit port if it finds none or more than one.
See Getting Started for inspector controls, session names, webhook auto-acknowledgement, and tunnel authentication.
Tunnel URLs
- Pro accounts that do not specify a domain use
<username>.lpm.fyi. - Pro accounts can claim up to three stable domains.
- Organization accounts can claim up to three stable domains shared by their members. Members connect by naming one of these domains, such as
lpm tunnel 3000 staging.lpm.fyi. A personal Pro plan isn't required.
Current claimed-domain bases are lpm.fyi and lpm.llc. See Claimed Tunnel Domains for naming rules, organization roles, and claim management.
Plan Limits
| Capability | Pro | Organization |
|---|---|---|
| Concurrent tunnels | 3 | 3 |
| Included requests | 100,000 per billing period | 100,000 per billed seat and billing period |
| Account request rate | 20,000/min | 20,000/min per billed seat |
| Maximum request body | 11.5 MiB | 11.5 MiB |
| Claimed domains | 3 | 3 |
| Tunnel authentication | Yes | Yes |
| Browser inspector | Yes | Yes |
A request body must arrive within two minutes. A larger body gets 413, and a slower one 408. A body also gets 413 when its headers are too large to relay with it, which only happens near the size limit. If many large uploads are in flight on the relay at once, a new one can get 503 with Retry-After: 5. A public WebSocket message larger than about 12 MiB closes that socket with code 1009.
The included allowance is shared by all tunnels owned by the account. An Organization domain uses the organization account rather than the connecting member's personal allowance.
An organization's allowance counts each paid seat only for the time that it is paid for. If paid seats change during a billing period, the included requests change by 100,000 per seat for the share of the period that is left. The account request rate follows the new seat count at once.
The Organization concurrent-tunnel and domain-claim limits apply across all members and base domains. These limits do not increase with the seat count.
Pro and Organization overage is enabled by default at $1 per 100,000 additional requests. It can be disabled from the tunnels dashboard to stop at the included limit.
Overage pauses during a billing grace period after a failed payment: tunnels stop at the included allowance until payment succeeds. The allowance covers the whole billing period, so requests made before the grace, during it and after the payment all count toward it.
When to Use a Tunnel
- Webhook development. Send Stripe, GitHub, Slack, or other callbacks to a local handler and inspect what arrived.
- Preview sharing. Give a teammate a temporary URL without deploying the application.
- Mobile testing. Reach a local development server from a phone on another network.
- Remote integrations. Connect an external service to an HTTP endpoint running on your machine.
Request Inspector
LPM CLI starts a local inspector alongside the tunnel unless you pass --no-inspect. It shows live requests and responses, searches capture history, exports cURL commands, and replays requests against the local server.
See Request Inspector for the capture database, replay behavior, and current terminal-command limitation.
LPM CLI Reference
These pages describe the hosted tunnel service, account limits, and claimed domains. For the complete command, flag, configuration, and relay reference, use: