Skip to content
PortBay

A public URL for your local site, in one click

PortBay bundles cloudflared and drives it for you: click Share publicly and the project gets an https://…trycloudflare.com URL in a few seconds. Click Stop sharing and it is gone.

The short answer

How do I share my localhost with a public URL?

A tunnel client on your Mac opens an outbound connection to a hosted edge; the edge assigns a public hostname and forwards requests back down that connection to your local port, so nothing is opened on the router. cloudflared is the free route: cloudflared tunnel --url http://localhost:5173 returns a random https://….trycloudflare.com address, which you copy out of the log output and set up again tomorrow. PortBay ships cloudflared inside the app as a sidecar binary, so there is nothing to install and no Cloudflare account to create. Click Share publicly and it spawns one cloudflared process for the project, waits a few seconds for the edge to assign a URL, and shows it with a copy button; the upstream comes from the project's registry record, HTTPS included. Stop sharing or quit the app and the URL is gone. Pro adds a stable named tunnel.

Verified against the product, 2026-07-10.

In the app

From .test to the public internet

PortBay — Share
https://acme-shop.testLocal
Create public tunnel

The local site gets a public HTTPS URL through Cloudflare's edge; visitors reach the same running project you see at its .test domain.

How it works

From local to shareable

  1. Open Tunnels and pick the project
  2. Click Share publicly
  3. Copy and send the URL
  4. Point a webhook at it
  5. Stop sharing

Open Tunnels and pick the project

Every registered project is listed with its resolved upstream URL next to it. The project does not have to be running to start a tunnel; visitors see a waking-up page until it is.

Click Share publicly

PortBay spawns a cloudflared child for the project and polls until Cloudflare's edge announces the assigned URL, a few seconds on a normal connection.

cloudflared tunnel --url https://blog.test --no-autoupdate

Copy and send the URL

The https://…trycloudflare.com address appears under the project row with a copy button. Anyone with the link reaches your running local site over HTTPS.

https://sudden-otter-quay.trycloudflare.com

Point a webhook at it

Stripe, GitHub, Twilio: give the provider the public URL and the callbacks land on your local project while you watch them in the HTTP inspector.

Stop sharing

One click kills the cloudflared child and the public URL is immediately unreachable. Quitting PortBay does the same; nothing stays exposed by accident.

Spec

Tunnels, tier by tier

CapabilityCommunityPro
Public quick tunnels (no account)IncludedIncluded
Bundled cloudflared sidecarIncludedIncluded
Stable hostname via your own named tunnelIncluded

Attach a custom Cloudflare tunnel so Share stops rotating random subdomains.

Tunnels per project1 at a time1 at a time
HTTPS upstream supportIncludedIncluded

Local mkcert certificates are accepted on the loopback leg; the public leg is TLS at Cloudflare's edge.

Without PortBay

Showing a client your local build, the hard ways

The alternatives are a VPS you maintain, router surgery, or driving the tunnel CLI by hand for every project.

PortBay runs the same cloudflared underneath, with the spawn, the URL capture and the teardown handled for you.

Questions

Asked before downloading

No. Quick tunnels use Cloudflare's free anonymous trycloudflare.com tier, and cloudflared ships inside PortBay as a sidecar binary. The only account-holding path is optional: Pro users can attach their own named Cloudflare tunnel to get a stable hostname.

Exactly as long as you share. The URL is valid only while the cloudflared process runs; it dies on Stop sharing, on app quit, or if PortBay crashes. Each new start gets a different random subdomain, unless you use a Pro named tunnel with a stable hostname.

Anyone with the link can reach the shared project while the tunnel is up, so treat the URL like a semi-public preview. Only that one project is exposed, TLS terminates at Cloudflare's edge, and teardown is immediate. Stop sharing when the demo ends.

Yes, that is one of the two main uses. Give Stripe, GitHub or Twilio the public URL as the callback endpoint; requests arrive at your local project and show up live in PortBay's HTTP inspector, where you can read method, status, latency and headers.

The tunnel still starts, and visitors see PortBay's waking-up page instead of an error. The Tunnels page warns you when a shared project is stopped. Start the project and the public URL serves it immediately.

PortBay mascot — a friendly blue tugboat

Give your projects and your agents a real local home.

Download for macOS

Free & open source · macOS 11+ on Apple Silicon · Pro from $10/mo