Portless
Stable local DNS for dev servers - replaces port numbers with human-readable hostnames. Built by Chris Tate (@ctatedev) at Vercel Labs.
Portless eliminates the :3000 / :3001 / :8080 problem in local development. Instead of remembering port numbers, dev servers get stable hostnames like myapp.localhost. This is especially valuable for multi-agent workflows where multiple worktrees run in parallel - each gets its own stable address without port conflicts. Source: X/@ctatedev, 2026-04-27
Key features (verified against vercel-labs/portless - Apache-2.0, npm 0.15.1, tag v0.15.1 = HEAD 5940d3cb889f06e9b12b6ca17333232f084ef8d4; the reviewed doctor screenshot showed v0.15.0): Source: npm registry packument and git ls-remote, 2026-07-02
- Stable local hostnames (
myapp.localhostinstead oflocalhost:3000). Bareportlessruns thepackage.json"dev"script and infers the app name from the package name, git root, or directory. - HTTPS with HTTP/2 on by default: first run generates a local CA, trusts it, and binds port 443 (auto-elevates with sudo on macOS/Linux);
--no-tlsfor plain HTTP. Source: GitHub vercel-labs/portless, https://github.com/vercel-labs/portless, 2026-06-13 - Parallel worktree support - agents run multiple dev servers without port conflicts. The proxy auto-starts and assigns a random
PORT(4000-4999) via env; for frameworks that ignorePORT(Vite, Astro, Angular, React Router, Expo, React Native) it injects the right--port/--hostflags. Source: GitHub vercel-labs/portless, https://github.com/vercel-labs/portless, 2026-06-13 - Tailscale sharing -
portless --tailscaleexposes a local dev server to the private tailnet, whileportless --funnelexposes it to the public internet through Tailscale Funnel. The reviewed artifact shows the local.localhostURL staying stable while Portless prints the tailnet/public URL. Source: X/@ctatedev and local image artifact, 2026-04-29 - Restart-safe and CI-aware: reuses the last proxy's config on restart (no silent revert to defaults); in non-interactive/CI environments exits with a descriptive error instead of prompting. Source: GitHub vercel-labs/portless, https://github.com/vercel-labs/portless, 2026-06-13
portless doctorchecks proxy status, HTTPS CA trust, route and DNS state, hostname resolution, Node/platform/state-dir details, and LAN setup issues. This turns Portless from "nice local URL wrapper" into a diagnosable agent-friendly local networking primitive. Source: X/@ctatedev, 2026-06-24- Agent-native install:
npx skills add vercel-labs/portless(humans:npm install -g portless). The upstreamskills/portless/SKILL.mdis now imported locally asskills/engineering/portless/SKILL.md, so Kevin's runtime brain can load the full operational playbook directly.
Relevance to Kevin's workflow: Critical for the worktree-first development model (see config/dedalus/agents/rules/worktree-first). When agents spawn parallel worktrees for atomic branch operations, each worktree's dev server needs a unique, stable address. Portless + Tailscale sharing replaces the ngrok tunnel recipe for exposing local services. HTTPS-by-default also means Browser Testing Skills checks hit secure local origins — closer to prod, so secure-cookie and HTTP/2 behaviors are testable without a tunnel. Caveat: portless is pre-1.0 and now requires Node.js 24+, so the state-directory format and local CA trust path can change between releases; contributors on different versions may need to re-run portless trust. Source: GitHub vercel-labs/portless, https://github.com/vercel-labs/portless, 2026-06-30
Version Snapshot
Checked 2026-07-03:
| Surface | Current |
|---|---|
| npm package | portless@0.15.1, published 2026-06-30 |
| GitHub | vercel-labs/portless, Apache-2.0, 10,033 stars / 323 forks at review |
| Source revision | main HEAD 5940d3cb889f06e9b12b6ca17333232f084ef8d4, same as tag v0.15.1 |
| Agent skill | upstream skills/portless/SKILL.md, imported to skills/engineering/portless/SKILL.md |
Use the local portless skill for setup, portless doctor triage, Tailscale/Funnel sharing, service install, and Safari/DNS/certificate fixes. Source: npm registry packument, git ls-remote, GitHub API, 2026-07-03
v0.11 Launch Artifact
The v0.11 launch image shows the feature in the most agent-relevant form: admin, docs, and web map to stable HTTPS .localhost names instead of remembered ports. The self-thread also separates human install (npm install -g portless) from agent install (npx skills add vercel-labs/portless). Current implementation authority remains portless@0.15.1; the v0.11 bookmark is preserved as the adoption artifact for the zero-config hostname idea. Source: X/@ctatedev and local image review, 2026-07-02
Tailscale/Funnel Sharing Artifact
The Tailscale sharing artifact makes the mode split concrete. portless --tailscale shares a local server inside the tailnet; portless --funnel promotes the same local service to a public Tailscale Funnel URL. The valuable invariant is that the app's canonical local URL (https://myapp.localhost) stays stable while Portless emits a share URL for collaborators or public review. Current source authority is unchanged: portless@0.15.1, Node >=24, Apache-2.0, and v0.15.1 equals main HEAD 5940d3cb889f06e9b12b6ca17333232f084ef8d4. Source: X/@ctatedev, local image review, npm, GitHub API, and git ls-remote, 2026-07-03
Timeline
- 2026-07-03 | Added the reviewed Tailscale/Funnel sharing artifact:
portless --tailscalefor private tailnet sharing andportless --funnelfor public sharing, while preserving the stable local.localhostaddress. Current source authority remainsportless@0.15.1, Node>=24, Apache-2.0, HEAD/tag5940d3c. Source: X/@ctatedev, 2026-04-29; Source: npm/GitHub, 2026-07-03 - 2026-07-02 | Added the reviewed v0.11 launch artifact: stable
.localhostnames for parallel apps/worktrees, human install through npm, and agent install throughskills add. Current source authority remainsportless@0.15.1, Node>=24, Apache-2.0, HEAD/tag5940d3c. Source: X/@ctatedev, 2026-04-27; Source: npm/GitHub, 2026-07-02 - 2026-07-01 | Refreshed package/source snapshot:
portless@0.15.1, tagv0.15.1, and current HEAD all resolve to5940d3cb889f06e9b12b6ca17333232f084ef8d4; package still requires Node>=24. Source: npm registry packument;git ls-remote, 2026-07-01 - 2026-06-30 | Deep review verified
portless@0.15.0,v0.15.0=mainHEAD8404575c301b6b845a868d76609f79a0077cbe59, and imported upstreamskills/portless/SKILL.mdas the local executableportlessskill. Source: GitHub/npm, 2026-06-30 - 2026-06-24 |
portless doctorbecame available: proxy status, HTTPS CA trust, route/DNS checks, hostname resolution, and LAN setup checks. Source: X/@ctatedev, 2026-06-24 - 2026-06-13 | Quality remediation: verified against
vercel-labs/portless(~9.8k★, Apache-2.0, npm 0.14.0) — HTTPS/HTTP2 + local CA on :443 by default, randomPORT4000-4999, auto--port/--hostinjection, restart-safe config, CI-aware errors; extended Kevin relevance. Source: https://github.com/vercel-labs/portless - 2026-04-27 | Portless launches - "killed :3000." 3,469 likes. Source: X/@ctatedev, 2026-04-27
- 2026-04-29 | Tailscale sharing announced for next version - share local dev servers over tailnet or public internet. 1,302 likes. Source: X/@ctatedev, 2026-04-29
- 2026-04-27 | v0.11: "Portless killed :3000 ... Zero config. Zero args. Zero code changes. Just run: portless." Agents get parallel worktree dev servers with stable names; agent install via
npx skills add vercel-labs/portless. 3,469 likes, 3,569 bookmarks. Source: X/@ctatedev, 2026-04-27