Releases: vercel-labs/portless
Releases · vercel-labs/portless
v0.12.0
New Features
- Tailscale sharing: New
--tailscaleflag shares any portless app over your Tailscale network with zero framework config. Each app is root-mounted on its own Tailscale HTTPS port (443, 8443, 8444, ...) so nobasePathconfiguration is needed. Works as a global flag, per-app flag (portless myapp --tailscale next dev), or env var (PORTLESS_TAILSCALE=1). (#262) - Tailscale Funnel: New
--funnelflag exposes apps to the public internet through Tailscale Funnel. Implies--tailscale. Also configurable viaPORTLESS_FUNNEL=1. (#262) PORTLESS_TAILSCALE_URLenv var: Child processes receivePORTLESS_TAILSCALE_URLcontaining the Tailscale HTTPS URL so apps can reference their public address. (#262)- Tailscale URLs in
portless list: The list command now shows tailnet URLs alongside local URLs when Tailscale sharing is active. (#262)
Improvements
portless prunecleans stale Tailscale registrations: Prune now removes orphanedtailscale serveentries left behind by dead CLI sessions. (#262)portless cleanremoves Tailscale serve state: Clean now tears down any Tailscale serve/funnel registrations alongside the usual CA and hosts file cleanup. (#262)
Contributors
v0.11.1
New Features
portless prunecommand: Safety net to find and kill orphaned dev servers left behind by dead CLI sessions. Reads stale route entries, checks if something is still listening on each port, and terminates the orphan.
Bug Fixes
- Zombie process orphaning on CLI crash: Spawn child processes with
detached:trueon Unix so they get their own process group. Signal handlers now kill the entire group instead of just the immediate child, preventing orphaned dev servers from surviving CLI crashes orkill -9.
Contributors
v0.11.0
New Features
- Zero-arg mode: Run bare
portlessfrom any project directory to auto-discover the dev script frompackage.jsonand start it through the proxy. No arguments, no config required. (#251) - Multi-app orchestration: In monorepos, bare
portlessauto-discovers workspace packages (pnpm, npm, yarn, bun) and starts all dev scripts concurrently through the proxy. Each package gets a subdomain derived from its npm scope (e.g.@acme/docsbecomesdocs.acme.localhost). (#251) - Turborepo integration: When
turbo.jsonis present, portless delegates toturbo run <script>instead of spawning each app individually. Per-appPORT,HOST, andPORTLESS_URLare injected via a lightweight--requireloader so turbo retains dependency ordering and task graph awareness. Setturbo: falsein config to opt out. (#251) portless.jsonconfig file: Configure app name, script, port, and turbo settings without embedding portless inpackage.jsonscripts. Also supports a"portless"key inpackage.jsonas an inline alternative. (#251)--scriptflag: Override the default"dev"script for a single invocation (e.g.portless --script start). (#251)- Rsbuild support: Auto-inject
--portand--hostCLI flags for Rsbuild dev server (#250)
Bug Fixes
- State directory moved to
~/.portless: All proxy state now lives in~/.portlessinstead of/tmp/portless, fixing repeated CA trust prompts on macOS (where/tmpis periodically cleaned) and a symlink local privilege escalation vulnerability (#251) - Duplicate macOS CA certificates: Fix
security delete-certificatefailing with "is ambiguous" when multiple portless CA entries had accumulated in the keychain (#251) - CA trust marker caching: Cache the CA fingerprint after a successful trust so subsequent proxy starts skip the OS security check and avoid re-triggering the macOS authentication dialog (#251)
Improvements
- Auto-trust CA on proxy auto-start: When the proxy is auto-started and the CA is not yet trusted, portless automatically runs trust with proper sudo elevation (#251)
- Package manager delegation: Detects pnpm, yarn, bun, or npm and delegates script execution to the correct package manager (#251)
- Non-server script detection: Build-only tools (tsup, tsc, esbuild, etc.) are auto-detected and run without a proxy route. Use
proxy: falsein config for explicit control. (#251) - Monochrome CLI output: Bold for headers and errors, dim for warnings and muted text, no color codes (#251)
Contributors
v0.10.3
v0.10.2
New Features
- Auto-inject
NODE_EXTRA_CA_CERTS: Child processes spawned byportless runnow automatically receiveNODE_EXTRA_CA_CERTSpointing to the portless CA certificate, so Node.js subprocesses trust the local CA without manual configuration (#220)
Bug Fixes
- Proxy startup on slow macOS
securitycommand: Fix the proxy failing to start when the macOSsecuritycommand takes longer than expected to verify CA trust (#229) - Lock contention with parallel commands: Fix lock contention that could cause failures when multiple
portlesscommands run simultaneously (#230) ERR_HTTP2_PROTOCOL_ERRORduring HMR: Fix HTTP/2 stream reset flood during hot module replacement causing protocol errors (#231)- Proxy auto-start in non-interactive terminals: Fix auto-start failing in non-interactive terminals (e.g. IDE task runners) and when previous proxy config exists (#232)
Contributors
v0.10.1
New Features
portless clean: New command stops the proxy if it is running, removes the local CA from the OS trust store when it was installed by portless, deletes allowlisted files under known state directories, and removes the portless-managed block from the hosts file. Custom--certand--keypaths are never removed. (#213)
Improvements
- Hosts file sync by default: The proxy now keeps the hosts file in sync with active routes automatically (improves Safari and other setups where
.localhostsubdomains do not resolve to loopback). SetPORTLESS_SYNC_HOSTS=0to opt out. The managed block is removed from the hosts file when the proxy exits. (#213)
Contributors
v0.10.0
New Features
- LAN mode: New
--lanflag exposes portless services to phones and other devices on the same network via mDNS.localhostnames. Auto-detects the active LAN IP, follows network changes, and supports--ip/PORTLESS_LAN_IPoverrides for VPN or multi-interface setups. Publishes mDNS records with platform-native tools (dns-sdon macOS,avahi-publish-addresson Linux). Adds*.localto generated certificate SANs so HTTPS works for LAN hostnames. (#168) - VitePlus support: Auto-inject
--portfor VitePlus (vp) dev server (#147)
Contributors
v0.9.6
v0.9.5
Bug Fixes
--forcekills existing process:--forcenow terminates the process that owns the conflicting route before registering a new one, instead of only removing the stale route entry (#204)- CA certificate included in TLS chain: The proxy now sends the CA certificate as part of the TLS chain, fixing
UNABLE_TO_VERIFY_LEAF_SIGNATUREerrors in clients that do not have the portless CA in their trust store (#203)