portpreview
v0.1.1
Published
Expose a local port through a public HTTPS URL — webhook debugging, OAuth callbacks, and dev previews.
Maintainers
Readme
PortPreview
Expose a local port through a public HTTPS URL.
npx portpreview 3000Connects to the PortPreview gateway and forwards public traffic to http://127.0.0.1:3000.
Install
npm install -g portpreview
portpreview 3000Pin a version:
npx [email protected] 3000Options
| Flag | Description |
|------|-------------|
| --host <addr> | Local address to forward to (default 127.0.0.1) |
| --subdomain <name> | Use a name you reserved in your dashboard (e.g. my-project → my-project.portpreview.dev) |
| --token <token> | Authenticate with a CLI token from the dashboard |
| -q, --quiet | Print only the public URL |
| -h, --help | Show help |
| -v, --version | Show version |
Environment
| Variable | Description |
|----------|-------------|
| PORTPREVIEW_TOKEN | CLI token used for reserved subdomains |
| PORTPREVIEW_CONFIG | Override local config file path |
Persistent token (recommended)
Save your CLI token once, like ngrok's config add-authtoken:
npx portpreview config set-token pp_live_...
npx portpreview 3000Default config locations:
| OS | Path |
|----|------|
| Linux | ~/.config/portpreview/config.json |
| macOS | ~/Library/Application Support/portpreview/config.json |
| Windows | %LOCALAPPDATA%\\portpreview\\config.json |
Check where your config is stored:
npx portpreview config checkRemove the saved token:
npx portpreview config unset-tokenReserved subdomains
Create a free account at portpreview.com/register, reserve a subdomain in the dashboard, and save your default CLI token. Then either pass the token directly:
npx portpreview 3000 --subdomain my-project --token pp_live_...Or save it once with config:
npx portpreview config set-token pp_live_...
npx portpreview 3000 --subdomain my-projectOr keep it in the current shell only:
export PORTPREVIEW_TOKEN=pp_live_...
npx portpreview 3000 --subdomain my-projectCommands without --subdomain continue to work anonymously with a random URL.
Programmatic API
import { openTunnel } from 'portpreview'
const tunnel = await openTunnel({ port: 3000, quiet: true })
console.log(tunnel.url)
await tunnel.close()Development
For local gateway development only (not needed for normal use):
| Flag / variable | Default | Purpose |
|-----------------|---------|---------|
| --gateway <url> | wss://gateway.portpreview.dev/tunnel | Point the CLI at another gateway |
| --domain <domain> | portpreview.dev | Base hostname used in public URLs |
| PORTPREVIEW_GATEWAY_URL | same as above | Env override for --gateway |
| PORTPREVIEW_TUNNEL_DOMAIN | portpreview.dev | Env override for --domain |
git clone https://github.com/elemops/portpreview.git
cd portpreview
npm install
npm test
node bin/portpreview.mjs 3000License
Apache-2.0
