Early access — Open-source CLI

Instant secure previews
for localhost apps.

Expose your local app with a public HTTPS URL, inspect incoming requests, and debug webhooks without deploying to staging.

No deploy neededHTTPS by defaultWebhook readyOpen-source CLI
Works with
  • Stripe
  • GitHub
  • Shopify
  • Twilio
  • Slack
  • Discord

Integration examples only — not affiliated with or endorsed by these providers.

terminal — portpreview
$npx portpreview 3000
ConnectedURL:https://jjm5s.portpreview.devCopy
ForwardingTarget:http://localhost:3000
Scroll to explore

Local development should not require staging deploys.

Every deploy cycle slows you down. PortPreview eliminates the gap.

Webhooks can't reach localhost

Stripe, GitHub, and other services cannot call 127.0.0.1. You need a public URL to receive callbacks.

Clients can't preview your work

Sharing a localhost URL is useless. Staging adds friction between code and feedback.

Mobile testing is painful

localhost does not work on phones. Every mobile preview requires a deploy or complex VPN setup.

Debugging has no history

When a webhook fails, you have no request log. You are debugging in the dark without inspection.

One tunnel. Full request visibility.

Every feature designed for webhook-heavy development workflows.

Public HTTPS URL for localhost

Get a secure public URL that forwards to your local server. No DNS, no SSL setup, no reverse proxy.

Webhook request inspector

View every incoming request: method, headers, body, timing. Inspect exactly what external services send your app.

Replay captured requests Pro

Resend any captured request to your local server. Test how your app handles the exact same payload repeatedly.

Copy requests as cURL

One-click copy any request as a cURL command. Replay from your terminal, add to tests, or share with your team.

Password-protected previews Planned

Protect your preview URLs with a password. Share only with authorized clients or team members.

Reserved subdomains Pro

Claim a permanent subdomain like <code>myapp.portpreview.dev</code>. Your preview URL stays the same every session.

Team sharing Planned

Share tunnels and request history with your team. Collaborate on webhook debugging in real time.

Outbound WebSocket. Zero config.

No router changes, no firewall rules, no public IP required.

Browser / WebhookExternal caller
PortPreview GatewayCloud edge
WebSocketEncrypted tunnel
PortPreview CLIYour machine
localhost:3000Your app

The CLI opens an outbound WebSocket connection, so no router or firewall configuration is required. Traffic is encrypted end-to-end between the gateway and your local machine.

StripeGitHubTwilioSlackSendGridPipedream

Built for webhook-heavy development.

Works with any service that sends HTTP callbacks.

POST/webhooks/stripe200124msjust now
1.2 KB
Content-Type:application/json
User-Agent:Stripe/1.0 (+https://stripe.com)
Stripe-Signature:t=1625000000,v1=abc123...
Accept:*/*
{
  "id": "evt_3Lm2NnF8Zq",
  "type": "payment_intent.succeeded",
  "data": {
    "object": {
      "id": "pi_3Lm2NnF8Zq",
      "amount": 2999,
      "currency": "usd",
      "status": "succeeded"
    }
  }
}
POST /webhooks/stripe HTTP/1.1
Content-Type: application/json
User-Agent: Stripe/1.0
Stripe-Signature: t=1625000000,v1=abc123...

{"id":"evt_3Lm2NnF8Zq","type":"payment_intent.succeeded"}
"id": "evt_3Lm2NnF8Zq""type": "payment_intent.succeeded""data": {...}

From local to live in one command.

Test Stripe webhooks locally

Point your Stripe webhook endpoint to your PortPreview URL and receive events in real time.

Share localhost with a client

Generate a public URL and send it to your client. They see your work-in-progress instantly.

Open local app on mobile

Visit your public URL on any phone or tablet. Test responsive layouts and mobile interactions.

Debug API callbacks

Inspect every callback your API receives. See headers, payloads, and timing for each request.

Skip temporary staging deploys

Eliminate throwaway deploys for quick reviews. Preview directly from your local environment.

QA local builds before release

Give QA a public URL to test your local build before merging. Catch issues early.

Open-source client. Hosted cloud.

Open-source

  • CLI client
  • Local forwarding agent
  • Protocol types
  • Examples

Hosted cloud

  • Gateway
  • Dashboard
  • Request history
  • Replay
  • Teams
  • Billing
  • Abuse protection

The CLI client is open-source so developers can verify it only proxies the selected local port and does not read files, environment variables, or secrets.

Simple pricing. No surprises.

Free
$0forever
  • 1 active tunnel
  • Random subdomain
  • Last 20 requests
  • 2-hour sessions
  • No login required
Join the waitlist
Team
Free*free for first 6 months

Per user, min 3 seats

  • Everything in Pro, plus:
  • Shared tunnels
  • Team workspace
  • Access control
  • Audit logs
Contact us

Pro and Team are free for your first 6 months of usage. No credit card required. We notify you before billing starts — cancel anytime.

Pricing questions

When does Pro billing start?

After your first 6 months on Pro. We notify you at least 14 days before billing starts, and you can cancel before it does.

What counts as a session?

A session is one CLI run. Closing the CLI ends the session. Free sessions auto-expire after 2 hours; Pro sessions stay open as long as the CLI runs.

Can I switch plans later?

Yes. Upgrades take effect immediately, downgrades at the end of your billing cycle. Your reserved subdomain and request history are preserved across plan changes.

Do you offer refunds?

If you are unhappy in the first 30 days after Pro launches, we refund the full amount. Just email us.

How is this different from ngrok or Cloudflare Tunnel?

We focus on the webhook dev loop: capture, inspect, and replay each request without re-triggering events. See our comparison articles for the full breakdown.

Common questions.

Is the CLI really open source?

Yes. The CLI is Apache-2.0-licensed and the source is on GitHub. You can audit exactly what it does — proxy the selected local port, nothing else. It does not read files, environment variables, or secrets.

How is this different from ngrok?

PortPreview optimizes for webhook debugging: every incoming request is captured with full headers, body, and timing, and you can replay any of them against your local handler in one click. ngrok works, but capture and replay are paid features or require external tools.

Does my tunnel URL stay the same between sessions?

Free tunnels get a random subdomain each session. Pro plans include reserved subdomains, so URLs like myapp.portpreview.dev stay the same forever — useful for webhook configurations you only want to set up once.

What ports and protocols are supported?

Any HTTP/HTTPS port. WebSocket upgrades are forwarded correctly, so realtime apps, HMR, and signed-event services all work without extra config.

Is it safe to expose my localhost to the internet?

The tunnel only forwards traffic to the specific local port you pick. Nothing else on your machine is reachable. Planned Pro features include password protection and access controls for extra peace of mind.

When does PortPreview launch publicly?

We are running an open early-access program now. Join the waitlist for an invite — most signups get access within a few days.

Start with one command.

$npx portpreview 3000

By submitting, you agree to our Privacy Policy and consent to us storing your email for this request.