The TLD is a per-proxy setting — every alias resolves as <name>.<tld>. Choose with care: changing the TLD later means re-registering every alias.
| TLD | Resolution | OAuth-safe | Best for |
|---|---|---|---|
.localhost (default) |
Native in Chrome/Firefox/Edge; needs /etc/hosts on Safari |
❌ Rejected by Google/Apple | Solo dev, no OAuth |
.test |
IANA-reserved (RFC 6761) | ✅ Yes | Recommended default — safe everywhere |
.lab |
Not reserved (no DNS collision in practice) | Provider-dependent | Personal/distinctive naming |
.dev |
Google-owned, HSTS-preloaded (forces HTTPS) | ✅ Yes | OAuth-heavy projects |
.app |
Google-owned, HSTS-preloaded | ✅ Yes | Similar to .dev |
.local |
mDNS — conflicts with Bonjour/Avahi | Provider-dependent | LAN mode only (--lan) |
Anything you own (e.g. .local.mycorp.dev) |
Whatever you configure | ✅ Yes | Teams, enterprise |
Do you need OAuth (Google/Apple/Facebook)?
├── Yes
│ ├── Do you control a real domain? → use a subdomain of it (best)
│ └── No → use .dev or .test (good)
└── No
├── Solo dev, no special needs → .test (recommended) or .localhost
└── Personal preference → .lab or any short distinctive TLD
.localhost (default)127.0.0.1 in all modern browsers (RFC 6761)/etc/hosts entries — run portless hosts sync.test (recommended for general use).test, so no collision risk/etc/hosts entries (portless auto-syncs).dev / .app (Google-owned).local (avoid for non-LAN use).local for Bonjour / Avahi auto-discovery--tld local without --lan mode confuses macOS in particular--lan mode actually advertises <name>.local over mDNSThe most defensible option for OAuth and team setups:
# You own example.com. Set up DNS:
*.local.example.com A 127.0.0.1
# Then portless:
portless proxy start --tld local.example.com
portless myapp next dev
# → https://myapp.local.example.com
.lab (or any short distinctive TLD)If you need to change TLD (e.g. you started on .localhost, now need OAuth):
# Stop proxy
portless proxy stop
# Wipe routes (because `portless alias --remove` appends the active TLD,
# making it impossible to remove old-TLD aliases cleanly)
rm ~/.portless/routes.json
# Restart with new TLD
portless proxy start --tld test --port 443
# Re-register aliases against new TLD
portless alias myapp 8000 --force
portless alias api 8001 --force
Update any bookmarks, OAuth provider configs, and NEXTAUTH_URL / AUTH_URL / BASE_URL environment variables.
references/upstream-oauth.md — per-provider OAuth setupreferences/upstream-portless.md — full CLI reference (search "tld" or "--tld")references/integration-patterns.md — combining portless with process supervisors