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.localhost instead of localhost:3000). Bare portless runs the package.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-tls for 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 ignore PORT (Vite, Astro, Angular, React Router, Expo, React Native) it injects the right --port/--host flags. Source: GitHub vercel-labs/portless, https://github.com/vercel-labs/portless, 2026-06-13
  • Tailscale sharing - portless --tailscale exposes a local dev server to the private tailnet, while portless --funnel exposes it to the public internet through Tailscale Funnel. The reviewed artifact shows the local .localhost URL 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 doctor checks 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 upstream skills/portless/SKILL.md is now imported locally as skills/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 --tailscale for private tailnet sharing and portless --funnel for public sharing, while preserving the stable local .localhost address. Current source authority remains portless@0.15.1, Node >=24, Apache-2.0, HEAD/tag 5940d3c. Source: X/@ctatedev, 2026-04-29; Source: npm/GitHub, 2026-07-03
  • 2026-07-02 | Added the reviewed v0.11 launch artifact: stable .localhost names for parallel apps/worktrees, human install through npm, and agent install through skills add. Current source authority remains portless@0.15.1, Node >=24, Apache-2.0, HEAD/tag 5940d3c. Source: X/@ctatedev, 2026-04-27; Source: npm/GitHub, 2026-07-02
  • 2026-07-01 | Refreshed package/source snapshot: portless@0.15.1, tag v0.15.1, and current HEAD all resolve to 5940d3cb889f06e9b12b6ca17333232f084ef8d4; 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 = main HEAD 8404575c301b6b845a868d76609f79a0077cbe59, and imported upstream skills/portless/SKILL.md as the local executable portless skill. Source: GitHub/npm, 2026-06-30
  • 2026-06-24 | portless doctor became 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, random PORT 4000-4999, auto --port/--host injection, 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