macOS
Apple Silicon and Intel builds.
Release metadata is loading.
Local HTTP. Public HTTPS. No account system.
A small Go binary that exposes local services through public HTTPS URLs you control. Built for previews, webhooks, demos, and coding agents.
$ portlight expose --port 3000 --json
{"status":"ready","url":"https://demo.portlight.616.pub"}
Downloads
Choose your platform build, place it on your PATH, then run
portlight update whenever you need the latest release.
Apple Silicon and Intel builds.
Release metadata is loading.
PowerShell-friendly executable builds.
Release metadata is loading.
Static binary builds for servers and CI.
Release metadata is loading.
portlight update
uses the same release metadata and verifies SHA-256 before replacing the binary.
Agent workflows
Agents often need a browser-visible URL for a local app, callback, or
preview server. portlight skill prints a concise runbook
covering JSON ready output, cleanup, TTL supervision, and name conflicts.
$ portlight skill
$ portlight expose --port 3000 --json
https://portlight.616.pub.timeout, CI job limits, or a watchdog process for TTL.
Core use cases
portlight keeps the operating model small: one binary, one token, wildcard HTTPS at the reverse proxy, and no database.
Share a local web app from the machine where it is already running.
Receive provider callbacks against a local HTTP service during development.
Request a readable name for a temporary demo URL, then release it on exit.
Use --json so CI or agents can parse the ready URL safely.
How it works
Keep the Go server private on localhost. Let Caddy or another reverse proxy handle wildcard DNS, HTTPS, and public routing.
PORTLIGHT_TOKEN=<long-random-token>
portlight server --listen 127.0.0.1:8789 \
--public-base https://portlight.616.pub
portlight expose --port 3000 --json
https://name.portlight.616.pub
routes to http://127.0.0.1:3000
Deploy shape
The public tunnel URLs are anonymous by default, so expose only services
you intend to share. Protect control endpoints with
PORTLIGHT_TOKEN and keep the server behind localhost.
127.0.0.1:8789.PORTLIGHT_TOKEN is long, random, and out of logs.