II.
Tool JSON
Structured · livetool:portless
Portless json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "tool:portless",
"_kind": "Tool",
"_file": "domain/tools/portless.yaml",
"_cluster": "domain",
"attributes": {
"displayName": "Portless",
"homepageUrl": "https://portless.sh",
"kind": "other",
"description": "Open source (Apache-2.0) by Vercel Labs — github.com/vercel-labs/portless\n(npm `portless`; \"for humans and agents\"). Replaces local-dev port numbers with stable, named `.localhost` URLs so there\nare no port conflicts. Runs an HTTPS reverse proxy on port 443; each app\nregisters a hostname→port route and is proxied to a randomly assigned port\n(4000–4999), so `http://localhost:3000` becomes `https://myapp.localhost`.\nHTTPS/HTTP-2 by default with auto-generated trusted local CA; auto-detects\nframeworks (Vite, Astro, React Router, …) and honors/injects `PORT`; auto-syncs\n`/etc/hosts`. Worktree-friendly: a git branch name is auto-prepended as a\nsubdomain (`fix-ui.myapp.localhost`) with zero config, so parallel worktrees\nnever collide on ports. Install `npm install -g portless` (Node 24+); run\n`portless` to wrap the package.json dev script, `portless myapp next dev`, or\n`portless api.myapp pnpm start` for sub-services. Custom TLD via `--tld test`.\n"
},
"outgoingEdges": [
{
"from": "tool:portless",
"to": "language:javascript",
"kind": "belongs_to_language"
},
{
"from": "tool:portless",
"to": "tool:ngrok",
"kind": "alternative_to",
"attributes": {
"comparison": "ngrok exposes local servers via public tunnels; Portless gives stable named HTTPS .localhost routes purely locally, with worktree-aware subdomains"
}
},
{
"from": "tool:portless",
"to": "evidence:portless-homepage-2026-06",
"kind": "sourced_from",
"attributes": {}
},
{
"from": "tool:portless",
"to": "evidence:portless-npm-2026-06",
"kind": "sourced_from",
"attributes": {}
}
],
"incomingEdges": []
}