{"_id":"portless","_rev":"42-97a1b09ffb29f1578be0536de49cc451","name":"portless","dist-tags":{"latest":"0.15.6"},"versions":{"0.0.0":{"name":"portless","version":"0.0.0","author":"","license":"MIT","_id":"portless@0.0.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"dist":{"shasum":"f21b261da9c93feb62713a6bf96850e9a4e98987","tarball":"https://registry.npmjs.org/portless/-/portless-0.0.0.tgz","fileCount":3,"integrity":"sha512-P+ZWgkuNisgbc3XONfLe9pOCek82mDincsQTIykSq9k5EYOBFcqOp6oit8obIHhGTgrmiGuv0N3CpyU5OvKNfg==","signatures":[{"sig":"MEUCIEg0uvGAKjpd96NuXSMIEXQDSbEaY5j3SVRXljDH7461AiEA2YO+oqsDgLch7NgEz7WSpfg5Fr/g1iNSQ8DMWIJ1dAk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253},"main":"index.js","_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"","type":"git"},"_npmVersion":"10.9.0","description":"Coming soon","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/portless_0.0.0_1769752138053_0.15126732009867405","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"portless","version":"0.1.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.1.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"d21ec0d7cf97e9c0cd082894fa674584ebb4663b","tarball":"https://registry.npmjs.org/portless/-/portless-0.1.0.tgz","fileCount":8,"integrity":"sha512-0OsSs7dbRjsG3vSEuvg8ZwwHooDrSy7nuvZuZuCujlkkphC7XHRTaPfXM36kUMj5M88L3UioqHOhuR0P6/6MQQ==","signatures":[{"sig":"MEYCIQDCMbcK5cInRw3V8Jejio45ByOCQdKAwD9XC25zKa5YVQIhAL+2hXuJ1IfethEOLpYkKLadMpVtaWVgniU/XPRKqssp","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39383},"main":"./dist/index.js","type":"module","_from":"file:portless-0.1.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write .","pretest":"pnpm build","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/691488a9ad25c76552423f4e838c52cd/portless-0.1.0.tgz","_integrity":"sha512-0OsSs7dbRjsG3vSEuvg8ZwwHooDrSy7nuvZuZuCujlkkphC7XHRTaPfXM36kUMj5M88L3UioqHOhuR0P6/6MQQ==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"lint-staged":{"*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":"prettier --write"},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0","http-proxy":"^1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.3","@types/node":"^20.11.0","lint-staged":"^16.2.7","@types/http-proxy":"^1.17.14","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.1.0_1771178044488_0.16604303832762013","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"portless","version":"0.2.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.2.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"e19416f93553362039f184b460aac38a36fdd0bf","tarball":"https://registry.npmjs.org/portless/-/portless-0.2.0.tgz","fileCount":8,"integrity":"sha512-c5VBNCsZ7QImlg/rTBU2eFoO0q02TDJ8ugKOGp0PMklt4fFsr2jWM44HNehhpzCAO3YSMBVenzQjISu+OUYLLg==","signatures":[{"sig":"MEUCIQDFM9y5Kv3s3yQS9tde/iaAkgMfQmzWpiVSGfJaK6mt+AIgRoM5qz21LjJSH+EcfR65TvE8x/SjZM7mzMup/JGugdU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41544},"main":"./dist/index.js","type":"module","_from":"file:portless-0.2.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write .","pretest":"pnpm build","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/56873faed8afb4abe8006bc6660a93b7/portless-0.2.0.tgz","_integrity":"sha512-c5VBNCsZ7QImlg/rTBU2eFoO0q02TDJ8ugKOGp0PMklt4fFsr2jWM44HNehhpzCAO3YSMBVenzQjISu+OUYLLg==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"lint-staged":{"*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":"prettier --write"},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0","http-proxy":"^1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.3","@types/node":"^20.11.0","lint-staged":"^16.2.7","@types/http-proxy":"^1.17.14","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.2.0_1771178721393_0.11422898254263192","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"portless","version":"0.2.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.2.1","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"85952375b4129852094143324d4328b5418d1c71","tarball":"https://registry.npmjs.org/portless/-/portless-0.2.1.tgz","fileCount":8,"integrity":"sha512-78aV2VjFSHL0Ga1T6JB/tqc97BWrHH0czvL1tP3oYDA3HujFNqu+O7/QCVhnOQKZbKRizQorzCjJ1iSPvpFz5w==","signatures":[{"sig":"MEUCIQCi907VAXVTuQ3DR84TdZyFljch0IaCID4iGuXpuvHg/QIgZW3EcmzPc7et4y5o2PRD3PtFORa7hmRMzKCcxN0BkU4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43120},"main":"./dist/index.js","type":"module","_from":"file:portless-0.2.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write .","pretest":"pnpm build","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/ec35eb07d3485340336619e5444f04b5/portless-0.2.1.tgz","_integrity":"sha512-78aV2VjFSHL0Ga1T6JB/tqc97BWrHH0czvL1tP3oYDA3HujFNqu+O7/QCVhnOQKZbKRizQorzCjJ1iSPvpFz5w==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"lint-staged":{"*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":"prettier --write"},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0","http-proxy":"^1.18.1"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.3","@types/node":"^20.11.0","lint-staged":"^16.2.7","@types/http-proxy":"^1.17.14","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.2.1_1771180176295_0.4229587495216942","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"portless","version":"0.2.2","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.2.2","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"4b225c269c27de7b0990cb00ec0a3ea25f46d693","tarball":"https://registry.npmjs.org/portless/-/portless-0.2.2.tgz","fileCount":8,"integrity":"sha512-6ICfeyAAYMXRDWLCcdtNL/oC+1rdKQ4ih6RvOMDWBte19/yPBfHdXaKEEs9LowV/V0E+Cjw+lvC+V0lQ5qKG8g==","signatures":[{"sig":"MEYCIQDiXTo3LbQ2QSmcDkysrcda14QdWKKDV4unLPMsGZ1qagIhAIMQIvYKa+kASptJKLVVIm+FadWrj/ccv/35s1OZJ/Un","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43730},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"31dbffef813c51724173fba5b3526af6b1ed5f9a","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"husky","pretest":"pnpm build","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"lint-staged":{"*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":"prettier --write"},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0","http-proxy":"^1.18.1"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.4","devDependencies":{"tsup":"^8.0.1","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.3","@types/node":"^20.11.0","lint-staged":"^16.2.7","@types/http-proxy":"^1.17.14","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.2.2_1771181544808_0.16376015199608407","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"portless","version":"0.3.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.3.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"65cf4074a6bca371c6013503ce61e7b66bb996f4","tarball":"https://registry.npmjs.org/portless/-/portless-0.3.0.tgz","fileCount":8,"integrity":"sha512-uW+nsbSajf+4aoFtRem6CTevSskozSa7qq5Vro804mPMaTaPYdWfygPak9XuMfx80ehUhxSH/ttzURAK/TnIVQ==","signatures":[{"sig":"MEYCIQD71c9hFCk2yuPKUduqVZOL/0fZVM6wHefHEJxYN54NVQIhAOg8xxR3PWNa5/P/KMNdiwkDd8MDnWfPzvKoG41sC12x","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55818},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f423a2ccd361e01b521f63397bc9010361ffb88c","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"husky","pretest":"pnpm build","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"lint-staged":{"*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":"prettier --write"},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.4","devDependencies":{"tsup":"^8.0.1","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.3","@types/node":"^20.11.0","lint-staged":"^16.2.7","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.3.0_1771188531683_0.8429448116516332","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"portless","version":"0.4.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.4.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"a7fa183ccfaae3a1c15d620db26be22017893970","tarball":"https://registry.npmjs.org/portless/-/portless-0.4.0.tgz","fileCount":8,"integrity":"sha512-CW3ERwHux/9VNrnvaSXa4sCtNlY300b5sUh6A52IBkpYMfJm7dMS4NipRVaSMFwyLAwFSp+OxGxpRD0zItiBWg==","signatures":[{"sig":"MEUCIHhCIhiEaGo1QrpcYQS+IQmZAAyfm1mm8wrc3wtnWpTzAiEAtabG5odIjXgzN4tbvQE24o77I4UZWQP7960qEuqd4A0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78961},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"84c5012b2fa5066c7585034fa1176a633bdde5ee","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","format":"prettier --write .","prepare":"husky","pretest":"pnpm build","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","format:check":"prettier --check .","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"lint-staged":{"*.{ts,js}":["eslint --fix","prettier --write"],"*.{json,md,yml,yaml}":"prettier --write"},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"packageManager":"pnpm@9.15.4","devDependencies":{"tsup":"^8.0.1","husky":"^9.1.7","eslint":"^9.39.2","vitest":"^4.0.18","prettier":"^3.8.1","@eslint/js":"^9.39.2","typescript":"^5.3.3","@types/node":"^20.11.0","lint-staged":"^16.2.7","typescript-eslint":"^8.55.0","@vitest/coverage-v8":"^4.0.18","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.4.0_1771425252815_0.19115182400586095","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"portless","version":"0.4.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.4.1","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"d457752a8581062182d45c8ada662f2190a5a40b","tarball":"https://registry.npmjs.org/portless/-/portless-0.4.1.tgz","fileCount":7,"integrity":"sha512-q/YrrtEfrPBMgdk4VXLmRaxqVbFFdnBA2wHu4c16p6cAb+INzOKRQTrqFO7NcD9R9l/BQJTJt6w6NYtODPiqCg==","signatures":[{"sig":"MEUCIQDT2tLYPdcIgM5QMief6F62b7o5SFnhCxg2qGP4M/X51QIgBNp+Yrp3ctb1Jq3tnZk4jF8eY3oo5ygcJd00g3TwUG0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":73876},"main":"./dist/index.js","type":"module","_from":"file:portless-0.4.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/49aacf708652033be42e119ed61453c6/portless-0.4.1.tgz","_integrity":"sha512-q/YrrtEfrPBMgdk4VXLmRaxqVbFFdnBA2wHu4c16p6cAb+INzOKRQTrqFO7NcD9R9l/BQJTJt6w6NYtODPiqCg==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.4.1_1771773294404_0.46936639621433995","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"portless","version":"0.4.2","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.4.2","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"1bd9e91e62c2a884860bb891ef9631fd9f388fca","tarball":"https://registry.npmjs.org/portless/-/portless-0.4.2.tgz","fileCount":6,"integrity":"sha512-/G3jIeD1XokoO9KY/lUGTV9irKz3tgx8yqHkz+hvj/86QeR219GvYFB+QEfpvjRlvvLVJa5vE7BkRfBZBe/lQg==","signatures":[{"sig":"MEYCIQDihJpqeA2WnjkAU6/IYDATCTE15Hnh9m1IczYTXZO96gIhAOaXDfZhgJ51aHkkF+rYu6dilSgiEWYmRMuUeHHZmf6c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":69163},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8af66c334e72371c01d89cd4dbfa9467ddf176bc","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.4.2_1772001404891_0.9795791457308569","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"portless","version":"0.5.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.5.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://github.com/vercel-labs/portless#readme","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"8262304b86de11df9f526ad42acea35a766f1939","tarball":"https://registry.npmjs.org/portless/-/portless-0.5.0.tgz","fileCount":6,"integrity":"sha512-VVfKvcf8ktSlXSlbEh7oklOxL0JFO8n9l1wmf6K+cGpYWmxumCQquxsx/IFtUN6X3nEULiArb+th/ncRwDWpog==","signatures":[{"sig":"MEYCIQDyQMFHIfKUUqH73DU0UEWPcFr9k4rz+ZWc/yUFpI2aMQIhAOhZfFNLUN+ffB0MFhhuXI/ZketOO8yQK5zrEHKp/Yqe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247458},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0c3d3e921ce2a1d9e598a2bdeae5f6bbb673501e","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.5.0_1772606038223_0.5228938990560752","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"portless","version":"0.5.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.5.1","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"0e07d5f9005f8bbbf2160c4f1f633437c9a05da7","tarball":"https://registry.npmjs.org/portless/-/portless-0.5.1.tgz","fileCount":7,"integrity":"sha512-F2DHd2reRx0iwbZW8O4LT3Fu8haM6OFR4AYh3vmanM0WihASaBy6+GKP8lzmcL6knD9vU5WNI+9c6Z77G5gd/A==","signatures":[{"sig":"MEUCIQC0XpnnpzDoFcBoUpV4bul3do4VEOEJ+Xpv/cK+Aa3b5QIgS+r2Z6XDoGbe+yXXZNXvcha18Dxeslvqyec3MxvQviI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":257219},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4d23deff14c571c8ab2a28f5020e19bfd5b94362","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.5.1_1772606396999_0.03155982693710735","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"portless","version":"0.5.2","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.5.2","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"ee405277721e54119c191f13fc6434a1dc06c42a","tarball":"https://registry.npmjs.org/portless/-/portless-0.5.2.tgz","fileCount":7,"integrity":"sha512-LnJvnFUduG4QSIDqc4og9WCLRA6L0+btA96nn6icY6cxyEAR44cnWaIxVzmw7y74KQ+R7zJM1HpenankphympA==","signatures":[{"sig":"MEQCIF3XrX9Bf6gSvk6CRn86YwFm9bHUM0mjJ8iYqMleEqPSAiBXqpU5jlOkhjQA8hc31e244LE4y6jkW02xN+sVJAEn2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258044},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"988c868d5bcefbd710c665df1456c48960d7cd32","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.5.2_1772608149036_0.46598011076584744","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"portless","version":"0.6.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.6.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"6e37818fec061436f8cce0cdc1055efadfc919bd","tarball":"https://registry.npmjs.org/portless/-/portless-0.6.0.tgz","fileCount":7,"integrity":"sha512-Jjk36bsWGTrqo+uyfKtHaXOfXq80BJ5EOdIRCWCbhYyJ04uV8dVw9/G4u31u1zQWmcE5WrZEYMGAm5XE+tDtXg==","signatures":[{"sig":"MEUCICfHzX0Iq6ZXS901GjIUY7o07eWS2FOY/kepsImYn9OvAiEA/ra+IwTsbY5UX+LHK/wBfwHZiquNIj0488wzXT2PYOI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":265882},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"029e97a75389ef2d475ffe9d5dc105bb6329f378","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.6.0_1773184085292_0.03867587103904069","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"portless","version":"0.7.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.7.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"3dc52b0b3a2de83fdeed487bb3009d291a8e0c95","tarball":"https://registry.npmjs.org/portless/-/portless-0.7.0.tgz","fileCount":8,"integrity":"sha512-rxreakOeTfgGcOpa4C5GSH4dra9xX4XIRunwRwtjp9g/ercLjkB/h4hT+4w0LQiIHER0xzxJ7sJxpBwEdtRZIg==","signatures":[{"sig":"MEQCIDnvQi7psC5UCpuKoEC33aEflF8b04uFTmMBTh8gBIC/AiAoSQ3veJ+MbAR2Fk7may/sr4iGhrJ9wX12fzqY0qVacA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":280408},"main":"./dist/index.js","type":"module","_from":"file:portless-0.7.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/5b95eb49c978eb8e04134137f34bb939/portless-0.7.0.tgz","_integrity":"sha512-rxreakOeTfgGcOpa4C5GSH4dra9xX4XIRunwRwtjp9g/ercLjkB/h4hT+4w0LQiIHER0xzxJ7sJxpBwEdtRZIg==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.7.0_1773627224840_0.3878386942634","host":"s3://npm-registry-packages-npm-production"}},"0.7.1":{"name":"portless","version":"0.7.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.7.1","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"3698aa43389e48316341a2e48077ef62f3da61a0","tarball":"https://registry.npmjs.org/portless/-/portless-0.7.1.tgz","fileCount":8,"integrity":"sha512-FPZcnI27SXpQlcG/19OltvHboCWm2bxwB/3bFtzSg05B6l8+Qkht3E9/AigNxmMKAzG/w88opOnyBoX3LCRpHw==","signatures":[{"sig":"MEUCIQCn6+T0LoyKymEgtYLNIVXFMsNATjBD3QlXUN5vsIPlEgIgNrlhK2lYNXqkBSU4ihkhRlS/0TvB9BaFx+/+UFH9jN8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":280439},"main":"./dist/index.js","type":"module","_from":"file:portless-0.7.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/a1ddd1b1f4ca9603a1f60126464bc6ae/portless-0.7.1.tgz","_integrity":"sha512-FPZcnI27SXpQlcG/19OltvHboCWm2bxwB/3bFtzSg05B6l8+Qkht3E9/AigNxmMKAzG/w88opOnyBoX3LCRpHw==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.7.1_1773685586219_0.5038593217017953","host":"s3://npm-registry-packages-npm-production"}},"0.7.2":{"name":"portless","version":"0.7.2","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.7.2","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"961034bbe70e9638998532e08a785dc11df57257","tarball":"https://registry.npmjs.org/portless/-/portless-0.7.2.tgz","fileCount":8,"integrity":"sha512-bwtBBTqCe4K2FL3MMTCMFw3ZEBsv5lJeu9VgVdDqFPhb04jgAaWu3ibXP/dZ6y7OfqV/Vphj0e7Z6bQxcr8uFg==","signatures":[{"sig":"MEQCIC43fc9hsuonB5Nf6qZmVTethxqsT8X8Z3yoLtb7jxp1AiBsMgU8syITFPyjgpvI8/Fenqc4xYfyVi4YFFFQJ7MsQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":281793},"main":"./dist/index.js","type":"module","_from":"file:portless-0.7.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"_resolved":"/private/var/folders/bw/l_mkbwg9061dn0frt5258s180000gn/T/16bff67fc2764fa75fbd7d8ebb268563/portless-0.7.2.tgz","_integrity":"sha512-bwtBBTqCe4K2FL3MMTCMFw3ZEBsv5lJeu9VgVdDqFPhb04jgAaWu3ibXP/dZ6y7OfqV/Vphj0e7Z6bQxcr8uFg==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","dependencies":{"chalk":"^5.3.0"},"_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.7.2_1774115928554_0.16702024035916696","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"portless","version":"0.8.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.8.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"ec7a4ef2a361c01c803aaa9054397a7b6fb19f8f","tarball":"https://registry.npmjs.org/portless/-/portless-0.8.0.tgz","fileCount":7,"integrity":"sha512-nCxqSnc5ynckes82+lXlDMzB9kkIz2C+oink6lz9TMCHneP5a9KZ0xOPj56wiFT8sc4j6zOsQPuXe2/HSL9v/A==","signatures":[{"sig":"MEYCIQD1JK6yG1zEyaTZYqaS+IVJKVStXpI746g+JcyldYg5twIhANMkNwijwK7CAaihPrqUT9lYT2PmY+zRy5NE79k50qmy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":276132},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"6f1aff253aab92e69539b30ec3260032de05da69","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.8.0_1774936083290_0.7762978304268056","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"portless","version":"0.9.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.9.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"30e9edd47de28a4a0f094e05ebe50a660a259fed","tarball":"https://registry.npmjs.org/portless/-/portless-0.9.0.tgz","fileCount":7,"integrity":"sha512-iRY4nBoRV/L5XHFAbYkdIg36HobE8kW7Vq71gh3mRGqhaKpKBNjZaWKrPTrP3gHcghKTiEgikFXa2fhnTiIWTg==","signatures":[{"sig":"MEQCIAgA42qsxgYqMVCscR8fY8XpyAyGy9eUti8nGmoDLAg2AiAj8B3TFqbtoqHKTeFCjIS6GsI3IWSX6FbjiKGtutJtww==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":282047},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"04e7d6bd3c9ff207513180e4742689977c56138f","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.9.0_1774975097945_0.943298801562864","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"portless","version":"0.9.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.9.1","maintainers":[{"name":"ctate","email":"chris@studiotate.com"}],"homepage":"https://port1355.dev","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"97d66ccbf714b22a89ccc6b190f686f49a9b5f5a","tarball":"https://registry.npmjs.org/portless/-/portless-0.9.1.tgz","fileCount":7,"integrity":"sha512-wrRtHnzsco4yvfUYLXco6G0DclUtBuHea2vD8pW8DZlSAdEavOX/mXgvSAJjhwVBvUlGoj+Z7T6rAuWl5egb1w==","signatures":[{"sig":"MEQCIHwwMZm+abtBGZnKk9D/HJoEU/6v8R6CN7xQXDMdPSfiAiAwGmdeG5kc6l6DfFjjl68eaOyMrGkJw+gS2PbmAxa2gg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":283008},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"f164662bd4872776b921f37205b8d9ce8009115e","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"ctate","email":"chris@studiotate.com"},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.12.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.9.1_1774987001346_0.9674041654263903","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"name":"portless","version":"0.9.2","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.9.2","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"e53cc5d559ff6348edde56aaf2f726ff4a64acd1","tarball":"https://registry.npmjs.org/portless/-/portless-0.9.2.tgz","fileCount":8,"integrity":"sha512-sB8orlek3wrBwzZhggRAfEzplS+3srYBfSlArl6ZqAenFvK1hYEI2Rb1W+oFmxcrKCDn5WomNMVWDijio8ds9w==","signatures":[{"sig":"MEUCIFuQubxM9eFJSSR8zFTLU5i+Q4KPtksYUnl1UKio27RPAiEApBhZkAmEMQDiQOGDS3/K2vURgN2J2prb7JLRNMBN7rc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297182},"main":"./dist/index.js","type":"module","_from":"file:portless-0.9.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/4e42647ba0cd12ab356ff52e7a1b6187/portless-0.9.2.tgz","_integrity":"sha512-sB8orlek3wrBwzZhggRAfEzplS+3srYBfSlArl6ZqAenFvK1hYEI2Rb1W+oFmxcrKCDn5WomNMVWDijio8ds9w==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.9.2_1775088125414_0.6007325229341236","host":"s3://npm-registry-packages-npm-production"}},"0.9.3":{"name":"portless","version":"0.9.3","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.9.3","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"a8bbf7581051f6500a02f36c890efdda2060d38b","tarball":"https://registry.npmjs.org/portless/-/portless-0.9.3.tgz","fileCount":8,"integrity":"sha512-TyBOameN9EVyM2kBLHzpt2uFBwzjC731i2wCQe+YVBaSy17iTOVlZXZW56COTyTAru8KubHGlSzn75N3Ui0kxw==","signatures":[{"sig":"MEYCIQDzRFIWnz1DCowLILPS8s+clhmoaggq/GOmTPG3lJNZBQIhANTqrK2hyizfksSI1lnpa6gss96XVjb6yceqp7UURkMY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296328},"main":"./dist/index.js","type":"module","_from":"file:portless-0.9.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/d8546a1ed0bcc9cc915d2140b0385755/portless-0.9.3.tgz","_integrity":"sha512-TyBOameN9EVyM2kBLHzpt2uFBwzjC731i2wCQe+YVBaSy17iTOVlZXZW56COTyTAru8KubHGlSzn75N3Ui0kxw==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.9.3_1775169518709_0.9746470636531164","host":"s3://npm-registry-packages-npm-production"}},"0.9.4":{"name":"portless","version":"0.9.4","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.9.4","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"6560bd637cc908492889b10546b7053b33407c7d","tarball":"https://registry.npmjs.org/portless/-/portless-0.9.4.tgz","fileCount":8,"integrity":"sha512-+ylrgmxDd807CldqrFc2Qak4FrUka/3ijwYtGW3dCRm0L6FvxAxONe1tlMqpyxR/CVy58lYNX0GiY6OH8R3Kmg==","signatures":[{"sig":"MEQCIAQsJ+oGIOcVSWUmiL8ppj9dfsT0yVba3osBHQGMGflJAiB0Ufu5WGSLhS2gtvxVUIHBLXesU02X/Iw3I/eiu43YRw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":296328},"main":"./dist/index.js","type":"module","_from":"file:portless-0.9.4.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/d745e38858db1e2c01cd1a54d00db59e/portless-0.9.4.tgz","_integrity":"sha512-+ylrgmxDd807CldqrFc2Qak4FrUka/3ijwYtGW3dCRm0L6FvxAxONe1tlMqpyxR/CVy58lYNX0GiY6OH8R3Kmg==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.9.4_1775170825812_0.5298360624426046","host":"s3://npm-registry-packages-npm-production"}},"0.9.5":{"name":"portless","version":"0.9.5","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.9.5","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"4fa4506d37f21f5e72810d0fb3bd286c14365075","tarball":"https://registry.npmjs.org/portless/-/portless-0.9.5.tgz","fileCount":8,"integrity":"sha512-gXVTVA410tXfZO0AAM/TSuM5znNqI6840hMVemt4OECmqwnLVKQ/T+gL8WuaYusnkdHElJ7bWcqMdYRLeLFJkw==","signatures":[{"sig":"MEYCIQCpXxmSSVZxjNKjZai+i38VXlxj+LvXyWoi49BGT8LTUwIhAPgu6uTuuhC19PpHCXocutqZKOwM/xn/xKzAvorfMlE/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297710},"main":"./dist/index.js","type":"module","_from":"file:portless-0.9.5.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/8fef96277c2db71c67e768d6c7c1bec9/portless-0.9.5.tgz","_integrity":"sha512-gXVTVA410tXfZO0AAM/TSuM5znNqI6840hMVemt4OECmqwnLVKQ/T+gL8WuaYusnkdHElJ7bWcqMdYRLeLFJkw==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.9.5_1775312456488_0.1423227444368329","host":"s3://npm-registry-packages-npm-production"}},"0.9.6":{"name":"portless","version":"0.9.6","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.9.6","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"38a827c333756e848d200b61688890b5bcdc6bc9","tarball":"https://registry.npmjs.org/portless/-/portless-0.9.6.tgz","fileCount":8,"integrity":"sha512-imtPnrQ6NNqwYMeCDaJ0PhNx/98Y2piukiMGd0MNCquDuoi7n7mHOf5P1VwhUoqx7s6z+DIqzELein1vAjf/JA==","signatures":[{"sig":"MEQCICtWyKR62AIqyJRMddPLGOrC3+5dh1GVf0CEuwVAfbCzAiAoFSOHG38O9C13o6DMkXbwKzhvRO6s/jYa5szDB+/QGg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":297917},"main":"./dist/index.js","type":"module","_from":"file:portless-0.9.6.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/45bc27ead0c89c4525ecea127a80dee5/portless-0.9.6.tgz","_integrity":"sha512-imtPnrQ6NNqwYMeCDaJ0PhNx/98Y2piukiMGd0MNCquDuoi7n7mHOf5P1VwhUoqx7s6z+DIqzELein1vAjf/JA==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.9.6_1775322032394_0.3997141044827255","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"portless","version":"0.10.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.10.0","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"eec7ac97da5a2ad209172bac2ea865af08dd3c8e","tarball":"https://registry.npmjs.org/portless/-/portless-0.10.0.tgz","fileCount":8,"integrity":"sha512-dJHvAKORfg0VTe8+pU9AkBcycHPaK2wVAynHL9U6/7k6MbQxzb9uOGh4Rw1TFMlp9jSSXfr4gG4h+9s+NsluxQ==","signatures":[{"sig":"MEUCIQD6SuzwSbO2ZfTvw2sockUqaFem1FQAxu6ORO0VE/wcuAIgPPsUbCoSLc5pJniwqjztoO4y7OP9CEOlTTItJ/Odatw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":326031},"main":"./dist/index.js","type":"module","_from":"file:portless-0.10.0.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/4b71d12a85d25c788566029b31ddcf06/portless-0.10.0.tgz","_integrity":"sha512-dJHvAKORfg0VTe8+pU9AkBcycHPaK2wVAynHL9U6/7k6MbQxzb9uOGh4Rw1TFMlp9jSSXfr4gG4h+9s+NsluxQ==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.10.0_1775546601248_0.8877398626221331","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"portless","version":"0.10.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.10.1","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"44f7e1ad8606e63be3717c97bc0b00ae5b6aacd6","tarball":"https://registry.npmjs.org/portless/-/portless-0.10.1.tgz","fileCount":8,"integrity":"sha512-WSzw0bW5tKoK8TIrOr54T43jc0A35XR6RApGEhlbBOl8NgugfQTD3EGKwqE2jjEdcNtPG5WHH/dXzxgVIoY4hw==","signatures":[{"sig":"MEUCIB2GXGLoGesN3vyHm5a4o/8BzMpuivGV/6u5aq8/C3J5AiEAqWZnBXCR2po6RaL58hynlbYPUHmc3ayiY9W6iPBAl2w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":335639},"main":"./dist/index.js","type":"module","_from":"file:portless-0.10.1.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/2e1e718ce692cc028e146344d31592cb/portless-0.10.1.tgz","_integrity":"sha512-WSzw0bW5tKoK8TIrOr54T43jc0A35XR6RApGEhlbBOl8NgugfQTD3EGKwqE2jjEdcNtPG5WHH/dXzxgVIoY4hw==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.10.1_1775576487358_0.6713898406676486","host":"s3://npm-registry-packages-npm-production"}},"0.10.2":{"name":"portless","version":"0.10.2","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.10.2","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"436a6b9874a3f76658381743a0d48fbee5566cba","tarball":"https://registry.npmjs.org/portless/-/portless-0.10.2.tgz","fileCount":8,"integrity":"sha512-g2Rpt4x/jUtGTcgYtwGElhSvIQB+p7k3dy3slHsxymDFWTImq3iwCdBYqz4EH5gJ6+Gqvjm51urlOaX9mklzmA==","signatures":[{"sig":"MEYCIQDIRq/iyd6Dhq7Eoqkepx0yWmZ+40+p1zVPpavTzB3QwwIhAKn3aZnvEtyRUjSi56do9Kbn/6WQWvtq0wVQ5bZizzN0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340034},"main":"./dist/index.js","type":"module","_from":"file:portless-0.10.2.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/ec6e9c4778ca60de9b9c28c07e33381f/portless-0.10.2.tgz","_integrity":"sha512-g2Rpt4x/jUtGTcgYtwGElhSvIQB+p7k3dy3slHsxymDFWTImq3iwCdBYqz4EH5gJ6+Gqvjm51urlOaX9mklzmA==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.10.2_1776122264286_0.5996378869157055","host":"s3://npm-registry-packages-npm-production"}},"0.10.3":{"name":"portless","version":"0.10.3","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.10.3","maintainers":[{"name":"ctate","email":"chris@studiotate.com"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"1b3aa2722c06bc1b42c38182553b08d7093ac8ae","tarball":"https://registry.npmjs.org/portless/-/portless-0.10.3.tgz","fileCount":8,"integrity":"sha512-lXbVUsNiwWMKJGMi49HhTMW0lS7u0EzawonDZQ+yglSnHioiQK18Y4Fe0Ilk+TuXej71E/nTOHIFIBjUGvTm9w==","signatures":[{"sig":"MEUCIBfedXvA7B/htx8cUgLJZJb2RkAZf+Jp7GmdUUtIvqSUAiEA5+Bs7w6r+a9ZkIPT4daE776N8aLAlVd2UdNHoZCXd3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":340692},"main":"./dist/index.js","type":"module","_from":"file:portless-0.10.3.tgz","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"vercel-release-bot","email":"infra+release@vercel.com"},"_resolved":"/tmp/dc76ad0bafbbbec6141fdd3dfe089897/portless-0.10.3.tgz","_integrity":"sha512-lXbVUsNiwWMKJGMi49HhTMW0lS7u0EzawonDZQ+yglSnHioiQK18Y4Fe0Ilk+TuXej71E/nTOHIFIBjUGvTm9w==","repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"10.9.7","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"22.22.2","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.10.3_1776315409726_0.42305049720751287","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"portless","version":"0.11.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.11.0","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"f89f6845c971ba4f51ad9b85a9abcb8216234bac","tarball":"https://registry.npmjs.org/portless/-/portless-0.11.0.tgz","fileCount":7,"integrity":"sha512-ocq29owWwKPhUw0rcMiBa5KcEwajX7Za/Nz3N1kTT4Ue09FYwUKU9GGT4SBG94q+88P82G/bCefzi4CqLpru7Q==","signatures":[{"sig":"MEUCIC/IheZ132/310dMsR9Tg+D4k1BG3M0p8El0g6/KMjk+AiEAo2ZQ8oboDU2g8oH8GvbfEL+FtW38yDFz9LM2r7e66rg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.11.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":366033},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"3dfcb3cb5a0babd3e74b02853bd3dabac70d4cfd","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.11.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.11.0_1777322232283_0.9858963066718618","host":"s3://npm-registry-packages-npm-production"}},"0.11.1":{"name":"portless","version":"0.11.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.11.1","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"8fe773d3567bcfde276ccd71ffc93b5a86c02b88","tarball":"https://registry.npmjs.org/portless/-/portless-0.11.1.tgz","fileCount":7,"integrity":"sha512-A/U6sBo/aC+MDoLjVTzAUeB18KTzJQs7z+MnuyyCjJTOZoCh9xZzOjSqUPA+aWS0uS3UytWPrNLA5AO96TzuKQ==","signatures":[{"sig":"MEQCIHNoLBwzN/cwFSWAV1Z90yIhKV1yXjh3SAdWCObQ/QstAiA04IYQAm4kfJf9V37vc+/t9VZnunBQyKJlsvHfqzNeeg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.11.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":370962},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"b4f89a50318dfe40a47cb335c9bc6a0e7335bdb8","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.11.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.11.1_1777357285937_0.5526543234218684","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"portless","version":"0.12.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.12.0","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"ca6c39382b5106ac6f38a3ed69f5919af928c0d9","tarball":"https://registry.npmjs.org/portless/-/portless-0.12.0.tgz","fileCount":7,"integrity":"sha512-zE8EYJ5xIEtKEBu1wnD+FavOE90/GNxRixF4Mu2hxMvDuVx1ftUbA6VbjbxI9sP9LUt0L26l6OiENGo4EFtLfw==","signatures":[{"sig":"MEUCIQD0j4Ih3oEvhOq+bBSetwSLBwOrFGUeTbtJe9AnVzASjAIgX3M16RihFbeSDbqpTSn1g8kEQvCUSMVSX1KMkClZFXw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.12.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":385497},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"4522cf70c94d4569cfcf7e58af5b733579baed08","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.11.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.12.0_1777478874764_0.8646897630626569","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"portless","version":"0.13.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.13.0","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"b87ec96ecd6a0ca4aac42b0e1ca68b009d349e85","tarball":"https://registry.npmjs.org/portless/-/portless-0.13.0.tgz","fileCount":7,"integrity":"sha512-PxMZ5BHH+ZZi9rTq4T8m003aZxh56qI0aBdNsxLn7jrTtvNJYBWYD3lc5PuQrom/aVh6z8iLb+tKUI6b7QNYQw==","signatures":[{"sig":"MEUCIQDM2X6uNfWDth+1eZiYdbeZwiqYx3A+udPjg01jEuNIUAIgfAGoUiS60ObPbRIOpdUIJxYOXzwQ/MvnhniBHuv6FWA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":410060},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=20"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d564c2c0974a9ad2a5aad6af23068d3f721aff73","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.11.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^20.11.0","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.13.0_1778199805113_0.34888189116450996","host":"s3://npm-registry-packages-npm-production"}},"0.13.1":{"name":"portless","version":"0.13.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.13.1","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"7732cf608cfd1f90b28627cf0fe393f5c3e6ecb9","tarball":"https://registry.npmjs.org/portless/-/portless-0.13.1.tgz","fileCount":7,"integrity":"sha512-1B+8Xd4tB1gOIkRHOUEi/LCOp8PIxUsL3ACBX5G2UkKw25TSRNUqAlQcBGxweJgdXb9DPQFX5utKLRUzPFhMnA==","signatures":[{"sig":"MEQCIDjNNMxNPmb5d3MxZVXPzUHjwop9SL1WXQ9QtPywgk4EAiBN9KovLv8yQQjY/4UPuFT4q7kao3RkaoGDOsr9X4CX4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.13.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":424875},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"551434f0e2a688c1c7eccfead411eb2cdd3109c9","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.13.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.13.1_1779923146537_0.4110547031134675","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"portless","version":"0.14.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.14.0","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"4073fa64b916074c72c891a7527a147a6d2af84b","tarball":"https://registry.npmjs.org/portless/-/portless-0.14.0.tgz","fileCount":7,"integrity":"sha512-kKxmxB1DQ9gI8t+V13VhuwTXu31io5nbFubvZAE82AxzXBsvcJV7qQJbmomrQUpbVxo2UVHqs14iX4YK0BClmQ==","signatures":[{"sig":"MEUCIFEMoRzFf+VS3bKMZ5HmtmvdBEguTPZ1+mLCIXv+OXSNAiEAtOvsEx7aiJG3e2b4Ic3UnlgW+bFVMcCjxODi0aPoa0U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":436215},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8cf54405040f5015e3890c33da9f296ca1045899","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.13.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.14.0_1780606657336_0.8972292479170956","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"portless","version":"0.15.0","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.15.0","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"e762f8e25806484c291da04a448251488a3a1112","tarball":"https://registry.npmjs.org/portless/-/portless-0.15.0.tgz","fileCount":7,"integrity":"sha512-GCrWz4GFPe4vbkGmDvXK78bGaKrVnIN2H6De3kAtoCfv1+CddaUaqPmA/hBzxQjGHbj+MpQMJEQ187tVqMtw2Q==","signatures":[{"sig":"MEQCIB2dSw8mwu3Tx0FvObC1wxash26KU8U45ObeV4ShFmV2AiBMkPKI5drPNzPlWCkMJ0iq/r6wxe4ACceSu9NMxEvJJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":452847},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"8404575c301b6b845a868d76609f79a0077cbe59","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.13.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.15.0_1782328742412_0.895775765253894","host":"s3://npm-registry-packages-npm-production"}},"0.15.1":{"name":"portless","version":"0.15.1","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.15.1","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"41de03b54983598d480322aa11c2e5389e81ab70","tarball":"https://registry.npmjs.org/portless/-/portless-0.15.1.tgz","fileCount":7,"integrity":"sha512-MQTt405HrcIa3m9OSKpH6WjJDbfNP4oFMNg0VzAoUO4B19l1eFJBFcSWfQY8KYMhzZVfa+Gea2OUrlDm8+/M4A==","signatures":[{"sig":"MEUCIQCzIC9IQc+bZ4YX8GBikqaO1POphGrMko5Cs4+gL4RF4gIgWwccYrvLyBirNNRyED/oS7MSh5v7wbzEu8sxulonId4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.15.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":460429},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"5940d3cb889f06e9b12b6ca17333232f084ef8d4","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.13.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.17.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.15.1_1782836250516_0.26864976664434637","host":"s3://npm-registry-packages-npm-production"}},"0.15.2":{"name":"portless","version":"0.15.2","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.15.2","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"6bb4def8a4467e08718e148c5a06276f6d7144e8","tarball":"https://registry.npmjs.org/portless/-/portless-0.15.2.tgz","fileCount":7,"integrity":"sha512-jyTXeRUfYgVerW/YMP1bexm79da0+55K0HgHQukHEJMmpp9AsXKVLywF4F+NnutSO1yV91AX2IK7DWAH+i2pKg==","signatures":[{"sig":"MEQCICphtGH2NzPSpyPHLRbKjbvqtj5t5RKLF11qWtA68uI8AiAGX3yd0xIkde7pPWPFCqgywR54orudqm7lzSqVD5LNoQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.15.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":462512},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0726da16938745ed37033dd24457c490fe53f03f","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.16.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.15.2_1783990343819_0.3299029562778706","host":"s3://npm-registry-packages-npm-production"}},"0.15.3":{"name":"portless","version":"0.15.3","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.15.3","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"f162fbd29402fdad3c9edeb91acd2b1e939e6d5c","tarball":"https://registry.npmjs.org/portless/-/portless-0.15.3.tgz","fileCount":7,"integrity":"sha512-2xm7SOHMhl6QOZZS3hwdtVT7D/908TDH8+Sebc1TJRJcaTVtTwMR4Mv/oI5JsdeiMh/6Im+Tp4e/OsPn+skOJQ==","signatures":[{"sig":"MEYCIQD90bsj6Puta/8azQQ9WR2O2jIkyUlghL9+2UbB66+iEgIhAJDu66jlIr/d7YTcyX69vDzO2Io49tOudkrx4WhVMnzP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.15.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":468201},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0d8a70f9b76e545c85dbb51287943e9ef37c3794","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.16.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.15.3_1784037923232_0.617387815724695","host":"s3://npm-registry-packages-npm-production"}},"0.15.4":{"name":"portless","version":"0.15.4","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.15.4","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"bc4ede05aaa4287d70c2a4f4e0f9cf018a913e65","tarball":"https://registry.npmjs.org/portless/-/portless-0.15.4.tgz","fileCount":7,"integrity":"sha512-tOxEsdlDGuPHO6DPkuK3c3mMV5ctXEgVFm53Sa8nfZ2RsRGTq4By424C6z5+JWfNbd3ktR5SOd1FJBOlB1Woqg==","signatures":[{"sig":"MEUCIFo6UN0PoSBRk092LI8cIcMjqGY3Vwl98v/EJCU0uK5FAiEAgr8N24SQKaF8zi+AswflvoBWzsfGSaSSgV8cvWuLJxc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.15.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":471040},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"74c98682edf6fc629b6aa4b059508cbd8fb2d29b","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.16.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.15.4_1784230163341_0.8424434362415019","host":"s3://npm-registry-packages-npm-production"}},"0.15.5":{"name":"portless","version":"0.15.5","keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","_id":"portless@0.15.5","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"os":["darwin","linux","win32"],"bin":{"portless":"dist/cli.js"},"dist":{"shasum":"42afb938d2a8657f8f539cc6a99a662f26d8ff0d","tarball":"https://registry.npmjs.org/portless/-/portless-0.15.5.tgz","fileCount":7,"integrity":"sha512-zmJu4Q8/fY54oVUT/5NnmF4Ih8wTdCvCf6JCN783dRYl9mXkJBzXSckX2lztGCLIbM70varDjCudAbGKT73XPg==","signatures":[{"sig":"MEUCIAmS0kKPbRm/kzI6pbNa8Cc+i326f6BLUFGaHcbq8SuXAiEAprg7s/AiwoRRKHngZMP0Sb+WoGW+n5nH7XHrke1h0M4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.15.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":480288},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"d42c741ac67d20a0b6e1f8f5b4192136de34fa03","scripts":{"dev":"tsup --watch","lint":"eslint src/","test":"vitest run","build":"tsup","lint:fix":"eslint src/ --fix","test:watch":"vitest","type-check":"tsc --noEmit","test:coverage":"vitest run --coverage","prepublishOnly":"cp ../../README.md . && pnpm build"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"repository":{"url":"git+https://github.com/vercel-labs/portless.git","type":"git"},"_npmVersion":"11.16.0","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","directories":{},"_nodeVersion":"24.18.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.1","eslint":"^9.39.2","vitest":"^4.0.18","typescript":"^5.3.3","@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18"},"_npmOperationalInternal":{"tmp":"tmp/portless_0.15.5_1785388147268_0.8483972715961663","host":"s3://npm-registry-packages-npm-production"}},"0.15.6":{"name":"portless","version":"0.15.6","description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":"./dist/index.js","types":"./dist/index.d.ts"}},"bin":{"portless":"dist/cli.js"},"engines":{"node":">=24"},"os":["darwin","linux","win32"],"scripts":{"build":"tsup","dev":"tsup --watch","lint":"eslint src/","lint:fix":"eslint src/ --fix","prepublishOnly":"cp ../../README.md . && pnpm build","test":"vitest run","test:coverage":"vitest run --coverage","test:watch":"vitest","type-check":"tsc --noEmit"},"keywords":["local","development","proxy","localhost"],"author":{"name":"Vercel Labs"},"license":"Apache-2.0","repository":{"type":"git","url":"git+https://github.com/vercel-labs/portless.git"},"homepage":"https://portless.sh","bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"devDependencies":{"@types/node":"^24.12.4","@vitest/coverage-v8":"^4.0.18","eslint":"^9.39.2","tsup":"^8.0.1","typescript":"^5.3.3","vitest":"^4.0.18"},"gitHead":"713f84dec04b5328c02ffc62d1937b27a80fbc5f","_id":"portless@0.15.6","_nodeVersion":"24.19.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-uOAwWLF32rmyEGFASzSO0VOaqb/AQxFCCzyZbPGd82UNNOfIEvc09zy92nroNibE5HNfzV4oVB0ObKbPXgkM9A==","shasum":"f8c4db760cb896c95fa45fb19047151bd650aa34","tarball":"https://registry.npmjs.org/portless/-/portless-0.15.6.tgz","fileCount":7,"unpackedSize":496701,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/portless@0.15.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDphE7vpZ9ZSs1zaXOOHu7LC7B7BjTt6fryVcnFZQZuPQIhAIswCTU5LVkaDmMGn98DdEKSpQUdGAm9lgX33S4rXIqO"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:5f84f40c-cf56-4386-ab6e-5e0415aa4b7b"}},"directories":{},"maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/portless_0.15.6_1787589601797_0.9941886512587239"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-30T05:48:57.963Z","modified":"2026-08-24T16:40:02.241Z","0.0.0":"2026-01-30T05:48:58.189Z","0.1.0":"2026-02-15T17:54:04.639Z","0.2.0":"2026-02-15T18:05:21.554Z","0.2.1":"2026-02-15T18:29:36.490Z","0.2.2":"2026-02-15T18:52:24.947Z","0.3.0":"2026-02-15T20:48:51.825Z","0.4.0":"2026-02-18T14:34:12.963Z","0.4.1":"2026-02-22T15:14:54.546Z","0.4.2":"2026-02-25T06:36:45.048Z","0.5.0":"2026-03-04T06:33:58.403Z","0.5.1":"2026-03-04T06:39:57.176Z","0.5.2":"2026-03-04T07:09:09.285Z","0.6.0":"2026-03-10T23:08:05.534Z","0.7.0":"2026-03-16T02:13:45.077Z","0.7.1":"2026-03-16T18:26:26.458Z","0.7.2":"2026-03-21T17:58:48.717Z","0.8.0":"2026-03-31T05:48:03.464Z","0.9.0":"2026-03-31T16:38:18.147Z","0.9.1":"2026-03-31T19:56:41.539Z","0.9.2":"2026-04-02T00:02:05.649Z","0.9.3":"2026-04-02T22:38:38.922Z","0.9.4":"2026-04-02T23:00:26.042Z","0.9.5":"2026-04-04T14:20:56.768Z","0.9.6":"2026-04-04T17:00:32.647Z","0.10.0":"2026-04-07T07:23:21.395Z","0.10.1":"2026-04-07T15:41:27.518Z","0.10.2":"2026-04-13T23:17:44.508Z","0.10.3":"2026-04-16T04:56:49.874Z","0.11.0":"2026-04-27T20:37:12.484Z","0.11.1":"2026-04-28T06:21:26.073Z","0.12.0":"2026-04-29T16:07:55.005Z","0.13.0":"2026-05-08T00:23:25.359Z","0.13.1":"2026-05-27T23:05:46.681Z","0.14.0":"2026-06-04T20:57:37.506Z","0.15.0":"2026-06-24T19:19:02.599Z","0.15.1":"2026-06-30T16:17:30.703Z","0.15.2":"2026-07-14T00:52:23.972Z","0.15.3":"2026-07-14T14:05:23.396Z","0.15.4":"2026-07-16T19:29:23.528Z","0.15.5":"2026-07-30T05:09:07.489Z","0.15.6":"2026-08-24T16:40:01.942Z"},"bugs":{"url":"https://github.com/vercel-labs/portless/issues"},"author":{"name":"Vercel Labs"},"license":"Apache-2.0","homepage":"https://portless.sh","keywords":["local","development","proxy","localhost"],"repository":{"type":"git","url":"git+https://github.com/vercel-labs/portless.git"},"description":"Replace port numbers with stable, named .localhost URLs. For humans and agents.","maintainers":[{"name":"ctate","email":"chris@ctate.dev"},{"name":"vercel-release-bot","email":"infra+release@vercel.com"}],"readme":"# portless\n\nReplace port numbers with stable, named .localhost URLs for local development. For humans and agents.\n\n```diff\n- \"dev\": \"next dev\"                  # http://localhost:3000\n+ \"dev\": \"portless run next dev\"     # https://myapp.localhost\n```\n\n## Install\n\n**Global (recommended):**\n\n```bash\nnpm install -g portless\n```\n\n**Or as a project dev dependency:**\n\n```bash\nnpm install -D portless\n```\n\n> portless is pre-1.0. When installed per-project, different contributors may run different versions. The state directory format may change between releases, which can require re-running `portless trust`.\n\n## Run your app\n\n```bash\nportless myapp next dev\n# -> https://myapp.localhost\n```\n\nHTTPS with HTTP/2 is enabled by default. On first run, portless generates a local CA, trusts it, and binds port 443 (auto-elevates with sudo on macOS/Linux). Use `--no-tls` for plain HTTP.\n\nThe proxy auto-starts when you run an app. A random port (4000-4999) is assigned via the `PORT` environment variable. Most frameworks (Next.js, Express, Nuxt, etc.) respect this automatically. For frameworks that ignore `PORT` (Vite, VitePlus, Astro, React Router, Angular, Expo, React Native), portless auto-injects the right `--port` flag and, when needed, a matching `--host` flag. Injection reaches through a package script whose command starts with the framework or a known runner (`\"dev\": \"vite\"`, `\"dev\": \"bunx vite\"`). Only the framework's server commands get the flags (`dev`, `serve`, `preview`, `start`, a bare `vite`, or `vite [root]`); a command that does not serve, such as `vite build`, `vite optimize`, `vp test` or `astro check`, rejects them and is left alone. Expo connection modes (`--localhost`, `--lan`, `--tunnel`) are preserved while the assigned port is still injected. A script portless cannot classify is left alone too: a flag before the subcommand on a CLI whose flag grammar it does not track (`vp --mode dev build`). Portless also leaves a script alone when appending flags to it would not work: a compound command (`&&`, `|`, `;`), a trailing `#` comment, its own `--` option terminator, an env prefix (`NODE_ENV=production vite`), delegation to another script (`\"dev\": \"npm run dev:vite\"`), or runner flags before the script name (`bun run --bun dev`). Those keep their own port, so set it in the script yourself.\n\nWhen auto-starting, portless reuses the configuration (port, TLS, TLDs) from the most recent proxy run, so a restart or reboot does not silently revert to defaults. Explicit env vars (`PORTLESS_PORT`, `PORTLESS_HTTPS`, etc.) always take priority.\n\nPortless stores per-user state in `~/.portless`. When the proxy runs under sudo, it resolves this path from the invoking user's home so the proxy and unprivileged app processes share the same route registrations.\n\nIn non-interactive environments (no TTY, or `CI=1`), portless exits with a descriptive error instead of prompting, so task runners like turborepo and CI scripts fail early with a clear message.\n\n## Configuration\n\nBare `portless` works out of the box. It runs the `\"dev\"` script from `package.json` through the proxy, inferring the app name from the package name, git root, or directory:\n\n```bash\nportless        # -> runs \"dev\" script, https://<project>.localhost\n```\n\nUse an optional `portless.json` to override defaults:\n\n```json\n{ \"name\": \"myapp\" }\n```\n\n```bash\nportless        # -> runs \"dev\" script, https://myapp.localhost\n```\n\nThe script defaults to `\"dev\"`. The name is inferred from `package.json` if not set in config.\n\n### Monorepo\n\nOne `portless.json` at the repo root covers all workspace packages. Portless discovers packages from `pnpm-workspace.yaml`, or the `\"workspaces\"` field in `package.json` (npm, yarn, bun):\n\n```json\n{\n  \"apps\": {\n    \"apps/web\": { \"name\": \"myapp\" },\n    \"apps/api\": { \"name\": \"api.myapp\" }\n  }\n}\n```\n\n```bash\nportless        # from repo root: starts all workspace packages with a \"dev\" script\ncd apps/web && portless   # start just one package\n```\n\nThe `apps` map is optional and only needed for name overrides. Packages not listed still auto-discover with names inferred from their `package.json`.\n\nWithout an `apps` map, hostnames follow the `<package>.<project>.localhost` convention. The project name comes from the most common npm scope across workspace packages (e.g. `@myorg/web` and `@myorg/api` produce `myorg`), falling back to the workspace root directory name. If a package's short name matches the project name, it gets the bare `<project>.localhost` without duplication.\n\n### Config fields\n\n| Field     | Type    | Default  | Description                                               |\n| --------- | ------- | -------- | --------------------------------------------------------- |\n| `name`    | string  | inferred | Base app name. Worktree prefix still applies.             |\n| `script`  | string  | `\"dev\"`  | Name of a `package.json` script to run.                   |\n| `appPort` | number  | auto     | Fixed port for the child process.                         |\n| `proxy`   | boolean | auto     | Whether to route through the proxy. Auto-detected.        |\n| `apps`    | object  |          | Overrides for workspace packages, keyed by relative path. |\n| `turbo`   | boolean | `true`   | Set `false` to use direct spawning instead of turborepo.  |\n\n### package.json \"portless\" key\n\nInstead of a separate `portless.json`, you can add a `\"portless\"` key to your `package.json`. A string value is shorthand for setting the name:\n\n```json\n{\n  \"name\": \"@myorg/web\",\n  \"portless\": \"myapp\"\n}\n```\n\nAn object supports all per-app fields (`name`, `script`, `appPort`, `proxy`):\n\n```json\n{\n  \"name\": \"@myorg/web\",\n  \"portless\": { \"name\": \"myapp\", \"script\": \"dev:app\" }\n}\n```\n\nThe `package.json` `\"portless\"` key takes precedence over `portless.json` app entries but is overridden by CLI flags.\n\n### --script flag\n\nOverride the default script for a single invocation:\n\n```bash\nportless --script start       # run \"start\" instead of \"dev\"\nportless --script test        # run \"test\" instead of \"dev\"\n```\n\n### Turborepo\n\nTo use portless with turborepo, put `portless` as the `dev` script and the real command in a separate script:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"portless\",\n    \"dev:app\": \"next dev\"\n  },\n  \"portless\": { \"name\": \"myapp\", \"script\": \"dev:app\" }\n}\n```\n\nTurbo runs each package's `dev` script, which invokes portless. Portless reads the config, detects the package manager, and runs `pnpm run dev:app` (or yarn/bun/npm) through the proxy. No changes to `turbo.json` are needed.\n\n`pnpm dev` at the root works through turbo as usual. People without portless can run `pnpm run dev:app` directly.\n\n## Use in package.json\n\nYou can still use portless in `package.json` scripts:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"portless run next dev\"\n  }\n}\n```\n\nWith a `portless.json`, you can simplify to:\n\n```json\n{\n  \"scripts\": {\n    \"dev\": \"next dev\"\n  }\n}\n```\n\nThen run `portless` or `portless run` to go through the proxy.\n\nWhen you press Ctrl+C, portless forwards the interrupt and waits for the command's process tree to\nexit. Press Ctrl+C again to forward another interrupt. Any remaining descendants are terminated\nafter a short grace period.\n\n## Subdomains\n\nOrganize services with subdomains:\n\n```bash\nportless api.myapp pnpm start\n# -> https://api.myapp.localhost\n\nportless docs.myapp next dev\n# -> https://docs.myapp.localhost\n```\n\nBy default, only explicitly registered subdomains are routed (strict mode). Use `--wildcard` when starting the proxy to allow any subdomain of a registered route to fall back to that app (e.g. `tenant1.myapp.localhost` routes to the `myapp` app without extra registration).\n\n## Git Worktrees\n\n`portless run` automatically detects git worktrees. In a linked worktree, the branch name is prepended as a subdomain so each worktree gets its own URL without any config changes:\n\n```bash\n# Main worktree (no prefix)\nportless run next dev   # -> https://myapp.localhost\n\n# Linked worktree on branch \"fix-ui\"\nportless run next dev   # -> https://fix-ui.myapp.localhost\n```\n\nUse `--name` to override the inferred base name while keeping the worktree prefix:\n\n```bash\nportless run --name myapp next dev   # -> https://fix-ui.myapp.localhost\n```\n\nPut `portless run` in your `package.json` once and it works everywhere. The main checkout uses the plain name, each worktree gets a unique subdomain. No collisions, no `--force`.\n\n## Custom TLD\n\nBy default, portless uses `.localhost` which auto-resolves to `127.0.0.1` in most browsers. If you prefer a different TLD (e.g. `.test`), use `--tld`:\n\n```bash\nportless proxy start --tld test\nportless myapp next dev\n# -> https://myapp.test\n```\n\nThe proxy auto-syncs `/etc/hosts` for route hostnames (including `.test`), so those domains resolve on your machine.\n\nRepeat `--tld` to serve the same app names under multiple TLDs from one proxy:\n\n```bash\nportless proxy start --tld localhost --tld test\nportless myapp next dev\n# -> https://myapp.localhost\n# -> https://myapp.test\n```\n\nWhen multiple TLDs are configured, `PORTLESS_URL` uses the first TLD. `PORTLESS_TLD` also accepts a comma separated list, e.g. `PORTLESS_TLD=localhost,test`.\n\nRecommended: `.test` (IANA-reserved, no collision risk). Avoid `.local` (conflicts with mDNS/Bonjour) and `.dev` (Google-owned, forces HTTPS via HSTS).\n\n### Multi-segment TLDs\n\nThe `--tld` value accepts a lowercase DNS name (one or more dot-separated labels, no trailing dot), so a domain you own can be used as the \"TLD\". This gives local URLs the same structure as production, which keeps OAuth redirect URIs, cross-subdomain cookies, and host-based routing working the same way in both environments:\n\n```bash\nportless proxy start --tld dev.example.com\nportless myapp next dev\n# -> https://myapp.dev.example.com\n```\n\nEach label must follow DNS rules: lowercase letters, digits, and interior hyphens, with at most 63 characters per label and 253 characters total. The full hostname (`app.TLD`) is also subject to the 253-character DNS limit.\n\nThe proxy auto-syncs `/etc/hosts` for registered hostnames, so `myapp.dev.example.com` resolves to `127.0.0.1` on your machine. This is a loopback-only setup: outside LAN mode the proxy binds only to `127.0.0.1` and `::1` (see below), so a custom TLD is reachable only from the machine running the proxy. Reaching the proxy from other devices requires LAN mode (`--lan`), but LAN mode serves apps under the `.local` TLD and ignores a custom `--tld`, so the two cannot be combined today.\n\nStrict OAuth providers (Google, Apple) reject `.localhost` and `.test` redirect URIs but accept a real domain, so `https://myapp.dev.example.com/api/auth/callback/google` works as a redirect URI.\n\n## How it works\n\n```mermaid\nflowchart TD\n    Browser[\"Browser<br>myapp.localhost\"]\n    Proxy[\"portless proxy<br>(port 80 or 443)\"]\n    App1[\":4123<br>myapp\"]\n    App2[\":4567<br>api\"]\n\n    Browser --> Proxy\n    Proxy --> App1\n    Proxy --> App2\n```\n\n1. **Start the proxy**: auto-starts when you run an app, or start explicitly with `portless proxy start`\n2. **Run apps**: `portless <name> <command>` assigns a free port and registers with the proxy\n3. **Access via URL**: `https://<name>.localhost` routes through the proxy to your app\n\nOutside LAN mode, the proxy and its HTTP redirect listener bind only to the IPv4 and IPv6 loopback addresses, `127.0.0.1` and `::1`. They do not accept connections through LAN, VPN, or other network interfaces.\n\n## HTTP/2 + HTTPS\n\nHTTPS with HTTP/2 is enabled by default. Browsers limit HTTP/1.1 to 6 connections per host, which bottlenecks dev servers that serve many unbundled files (Vite, Nuxt, etc.). HTTP/2 multiplexes all requests over a single connection.\n\nWebSockets work over both protocol versions, so dev server HMR (Next.js, Vite, etc.) works through the proxy: HTTP/1.1 `Upgrade` requests are forwarded as-is, and WebSockets opened over an HTTP/2 connection use extended CONNECT (RFC 8441).\n\nOn first run, portless generates a local CA and adds it to your system trust store. No browser warnings. No manual setup.\n\n```bash\n# Use your own certs (e.g., from mkcert)\nportless proxy start --cert ./cert.pem --key ./key.pem\n\n# Disable HTTPS (plain HTTP on port 80)\nportless proxy start --no-tls\n\n# If you skipped the trust prompt on first run, trust the CA later\nportless trust\n```\n\nOn Linux, `portless trust` supports Debian/Ubuntu, Arch, Fedora/RHEL/CentOS, and openSUSE (via `update-ca-certificates` or `update-ca-trust`). On Windows, it uses `certutil` to add the CA to the system trust store. On WSL, it updates both the Linux trust store and the Windows current-user Root store so Windows browsers trust portless HTTPS certificates.\n\n## Start at OS startup\n\nInstall the proxy as an OS startup service so clean HTTPS URLs are available after reboot without starting the proxy from a terminal:\n\n```bash\nportless service install\nportless service install --lan\nportless service install --wildcard\nPORTLESS_STATE_DIR=~/.portless-lan PORTLESS_LAN=1 portless service install\nportless service status\nportless service uninstall\n```\n\nThe service uses portless defaults unless install options or `PORTLESS_*` environment variables are provided: HTTPS on port 443 with `.localhost` names. `service install` accepts the proxy options you would use with `proxy start`, including `--port`, `--no-tls`, `--lan`, `--ip`, `--tld`, `--wildcard`, `--cert`, and `--key`. Use `--state-dir <path>` or `PORTLESS_STATE_DIR=<path>` to choose where service state and logs are written.\n\nThe chosen service configuration is written into launchd, systemd, or Task Scheduler and reused after reboot. `portless service status` reports the installed port, HTTPS mode, TLDs, LAN mode, wildcard mode, and state directory. macOS and Linux install a root-owned service so port 443 can bind at boot. Windows installs a Task Scheduler startup task that runs as SYSTEM. Installation and removal may require administrator privileges. `portless clean` automatically removes the service.\n\n## LAN mode\n\n```bash\nportless proxy start --lan\nportless proxy start --lan --https\nportless proxy start --lan --ip 192.168.1.42\n```\n\n`--lan` explicitly binds the proxy to the IPv4 and IPv6 unspecified addresses, `0.0.0.0` and `::`, and switches to mDNS discovery. This makes services available as `<name>.local` to devices on the same network. Portless auto-detects your LAN IP and follows Wi-Fi/IP changes automatically, but you can pin another address with `--ip <address>` or by exporting `PORTLESS_LAN_IP`. Set `PORTLESS_LAN=1` in your shell (0/1 boolean) to make LAN mode the default whenever the proxy starts.\n\nPortless remembers LAN mode via `proxy.lan`, so if you stop a LAN proxy and start it again, it stays in LAN mode. All proxy settings (port, TLS, TLDs, LAN) are persisted and reused on auto-start unless overridden by explicit flags or env vars. Use `PORTLESS_LAN=0` for one start to switch back to `.localhost` mode. If a proxy is already running with different explicit LAN/TLS/TLD settings, portless warns and asks you to stop it first.\n\nLAN mode depends on the system mDNS tools that portless already spawns: macOS ships with `dns-sd`, while Linux uses `avahi-publish-address` from `avahi-utils` (install via `sudo apt install avahi-utils` or your distro’s equivalent). If the command is missing or your network isn’t reachable, `portless proxy start --lan` prints the relevant error and exits.\n\n### Framework notes\n\n- **Next.js**: add your `.local` hostnames to `allowedDevOrigins`:\n\n  ```js\n  // next.config.js\n  module.exports = {\n    allowedDevOrigins: [\"myapp.local\", \"*.myapp.local\"],\n  };\n  ```\n\n- **Expo / React Native**: portless always injects `--port`. React Native also gets `--host 127.0.0.1`. Expo gets `--host localhost` outside LAN mode, but in LAN mode portless leaves Metro on its default LAN host behavior instead of forcing `--host` or `HOST`.\n\n## Tailscale sharing\n\nShare your dev server with teammates on your [Tailscale](https://tailscale.com) network:\n\n```bash\nportless myapp --tailscale next dev\n# -> https://myapp.localhost           (local)\n# -> https://devbox.yourteam.ts.net    (tailnet)\n```\n\nEach `--tailscale` app is root-mounted on its own Tailscale HTTPS port, so no framework `basePath` configuration is needed. The first app gets port 443, subsequent apps get 8443, 8444, etc.\n\n```bash\nportless myapp --tailscale next dev     # -> https://devbox.ts.net\nportless api --tailscale pnpm start     # -> https://devbox.ts.net:8443\n```\n\nUse `--funnel` to expose your dev server to the public internet via [Tailscale Funnel](https://tailscale.com/kb/1223/funnel/):\n\n```bash\nportless myapp --funnel next dev\n# -> https://devbox.yourteam.ts.net    (public)\n```\n\nTailscale HTTPS certificates must be enabled before `--tailscale` or `--funnel` can register HTTPS URLs. Funnel must also be enabled for the tailnet and node before `--funnel` can register the public URL. If either setting is missing, portless exits before starting the child process.\n\nSet `PORTLESS_TAILSCALE=1` in your shell profile or `.env` to share every app by default. `portless list` shows both local and tailnet URLs. Tailscale serve registrations are cleaned up automatically when the app exits.\n\nRequires the Tailscale CLI to be installed and connected (`tailscale up`), with Tailscale HTTPS certificates enabled.\n\n## ngrok sharing\n\nExpose your dev server to the public internet with [ngrok](https://ngrok.com):\n\n```bash\nportless myapp --ngrok next dev\n# -> https://myapp.localhost           (local)\n# -> https://abc123.ngrok.app          (public)\n```\n\nSet `PORTLESS_NGROK=1` in your shell profile or `.env` to enable ngrok by default when portless runs an app. `portless list` shows both local and ngrok URLs. The ngrok tunnel is cleaned up automatically when the app exits.\n\nRequires the ngrok CLI to be installed and authenticated. If ngrok reports an authentication error, run `ngrok config add-authtoken <token>` and try again.\n\n## Commands\n\n```bash\nportless                        # Run dev script through proxy\nportless                        # From monorepo root: run all workspace packages\nportless run [--name <name>] [cmd] [args...]  # Infer name, run through proxy\nportless <name> <cmd> [args...]  # Run app at https://<name>.localhost\nportless alias <name> <port>     # Register a static route (e.g. for Docker)\nportless alias <name> <port> --force  # Overwrite an existing route\nportless alias --remove <name>   # Remove a static route\nportless list                    # Show active routes\nportless doctor                  # Check proxy, routes, DNS, and CA trust\nportless trust                   # Add local CA to system trust store\nportless clean                   # Remove state, CA trust entry, and hosts block\nportless prune                   # Kill orphaned dev servers from crashed sessions\nportless hosts sync              # Add routes to /etc/hosts (fixes Safari)\nportless hosts clean             # Remove portless entries from /etc/hosts\n\n# Disable portless (run command directly)\nPORTLESS=0 pnpm dev              # Bypasses proxy, uses default port\n\n# Proxy control\nportless proxy start             # Start the HTTPS proxy (port 443, daemon)\nportless proxy start --no-tls    # Start without HTTPS (port 80)\nportless proxy start --lan       # Start in LAN mode (mDNS .local for devices)\nportless proxy start -p 1355     # Start on a custom port (no sudo)\nportless proxy start --foreground  # Start in foreground (for debugging)\nportless proxy start --wildcard  # Allow unregistered subdomains to fall back to parent\nportless proxy stop              # Stop the proxy\n\n# OS startup service\nportless service install         # Start HTTPS proxy when the OS starts\nportless service install --lan   # Start service in LAN mode\nportless service install --wildcard  # Persist wildcard routing in the service\nportless service status          # Show service and proxy status\nportless service uninstall       # Remove the startup service\n```\n\n### Options\n\n```\n-p, --port <number>              Port for the proxy (default: 443, or 80 with --no-tls)\n--no-tls                         Disable HTTPS (use plain HTTP on port 80)\n--https                          Enable HTTPS (default, accepted for compatibility)\n--lan                            Enable LAN mode (mDNS .local for real devices)\n--ip <address>                   Pin a specific LAN IP (disables auto-follow; use with --lan)\n--cert <path>                    Use a custom TLS certificate\n--key <path>                     Use a custom TLS private key\n--foreground                     Run proxy in foreground instead of daemon\n--tld <tld>                      Use a custom TLD instead of .localhost; repeat for more\n--wildcard                       Allow unregistered subdomains to fall back to parent route\n--state-dir <path>               Use a custom state directory with service install\n--script <name>                  Run a specific package.json script (default: dev)\n--app-port <number>              Use a fixed port for the app (skip auto-assignment)\n--tailscale                      Share the app on your Tailscale network (tailnet)\n--funnel                         Share the app publicly via Tailscale Funnel\n--ngrok                          Share the app publicly via ngrok\n--force                          Kill the existing process and take over its route\n--name <name>                    Use <name> as the app name\n```\n\n### Environment variables\n\n```\n# Configuration\nPORTLESS_PORT=<number>           Override the default proxy port\nPORTLESS_APP_PORT=<number>       Use a fixed port for the app (same as --app-port)\nPORTLESS_HTTPS=0                 Disable HTTPS (same as --no-tls)\nPORTLESS_LAN=1                   Enable LAN mode when set to 1 (auto-detects LAN IP)\nPORTLESS_LAN_IP=<address>        Pin a specific LAN IP for LAN mode\nPORTLESS_TLD=<tld>[,<tld>]       Use one or more TLDs (e.g. localhost,test)\nPORTLESS_WILDCARD=1              Allow unregistered subdomains to fall back to parent route\nPORTLESS_SYNC_HOSTS=0            Disable auto-sync of /etc/hosts (on by default)\nPORTLESS_TAILSCALE=1             Share apps on your Tailscale network (same as --tailscale)\nPORTLESS_FUNNEL=1                Share apps publicly via Tailscale Funnel (same as --funnel)\nPORTLESS_NGROK=1                 Share apps publicly via ngrok (same as --ngrok)\nPORTLESS_STATE_DIR=<path>        Override the state directory\n\n# Injected into child processes\nPORT                             Ephemeral port the child should listen on\nHOST                             Usually 127.0.0.1 (omitted for Expo in LAN mode)\nPORTLESS_URL                     Primary public URL (e.g. https://myapp.localhost)\nPORTLESS_TAILSCALE_URL           Tailscale URL of the app (when --tailscale is active)\nPORTLESS_NGROK_URL               ngrok URL of the app (when --ngrok is active)\nNODE_EXTRA_CA_CERTS              Path to the portless CA (when HTTPS is active)\n```\n\n> **Reserved names:** `run`, `get`, `alias`, `hosts`, `list`, `doctor`, `trust`, `clean`, `prune`, `proxy`, and `service` are subcommands and cannot be used as app names directly. Use `portless run <cmd>` to infer the name from your project, or `portless --name <name> <cmd>` to force any name including reserved ones.\n\n## Uninstall / reset\n\nTo remove portless data from your machine (proxy state under `~/.portless` and the system state directory, the local CA from the OS trust store when portless installed it, and the portless block in `/etc/hosts`):\n\n```bash\nportless clean\n```\n\nmacOS/Linux may prompt for `sudo`. Custom certificate paths passed with `--cert` and `--key` are not deleted. If trust-store removal fails, portless retains its CA certificate and key so a later `portless clean` can safely retry.\n\n## Safari / DNS\n\n`.localhost` subdomains auto-resolve to `127.0.0.1` in Chrome, Firefox, and Edge. Safari relies on the system DNS resolver, which may not handle `.localhost` subdomains on all configurations.\n\nIf Safari can't find your `.localhost` URL:\n\n```bash\nportless hosts sync    # Add current routes to /etc/hosts\nportless hosts clean   # Clean up later\n```\n\nAuto-syncs `/etc/hosts` for route hostnames by default (`.localhost`, custom TLDs, LAN `.local`). Set `PORTLESS_SYNC_HOSTS=0` to disable.\n\n## Troubleshooting\n\nRun `portless doctor` to inspect local health without changing state. It checks Node.js, the state directory, proxy liveness, route entries, HTTPS CA trust, hostname resolution, and LAN mode prerequisites, then prints suggested fixes.\n\n## Proxying Between Portless Apps\n\nIf your frontend dev server (e.g. Vite, webpack) proxies API requests to another portless app, make sure the proxy rewrites the `Host` header. Without this, portless routes the request back to the frontend in an infinite loop.\n\n**Vite** (`vite.config.ts`):\n\n```ts\nserver: {\n  proxy: {\n    \"/api\": {\n      target: \"https://api.myapp.localhost\",\n      changeOrigin: true,\n      ws: true,\n    },\n  },\n}\n```\n\n**webpack-dev-server** (`webpack.config.js`):\n\n```js\ndevServer: {\n  proxy: [{\n    context: [\"/api\"],\n    target: \"https://api.myapp.localhost\",\n    changeOrigin: true,\n  }],\n}\n```\n\nPortless automatically sets `NODE_EXTRA_CA_CERTS` in child processes so Node.js trusts the portless CA. If you run a separate Node.js process outside portless, point it at the CA manually: `NODE_EXTRA_CA_CERTS=~/.portless/ca.pem`. Alternatively, use `--no-tls` for plain HTTP.\n\nPortless detects this misconfiguration and responds with `508 Loop Detected` along with a message pointing to this fix.\n\n## Development\n\nThis repo is a pnpm workspace monorepo using [Turborepo](https://turbo.build). The publishable package lives in `packages/portless/`.\n\nUse Node.js 24+ and pnpm 11 for repository development. The `.node-version` file pins the Node major for version managers.\n\n```bash\npnpm install          # Install all dependencies\npnpm build            # Build all packages\npnpm test             # Run tests\npnpm test:coverage    # Run tests with coverage\npnpm lint             # Lint all packages\npnpm type-check       # Type-check all packages\npnpm format           # Format all files with Prettier\n```\n\n## Requirements\n\n- Node.js 24+\n- macOS, Linux, or Windows\n- Tailscale CLI (optional, for `--tailscale` and `--funnel`)\n- ngrok CLI (optional, for `--ngrok`)\n","readmeFilename":"README.md"}