Why Portless?
Local development with port numbers is fragile and error-prone. Portless fixes this by replacing numeric ports with stable, named URLs.The Problem with Port Numbers
If you’ve ever run multiple dev servers locally, you’ve hit these issues:Port Conflicts
Two projects default to the same port and you getEADDRINUSE:
Memorizing Ports
You have 5 tabs open:localhost:3000- is this the frontend or the API?localhost:8080- was this the admin panel?localhost:4000- wait, what app is this?
Refreshing Shows the Wrong App
You stop one server, start another on the same port, and your open tab now shows something completely different. You refresh expecting to see your API docs, but instead you get a React app. This is especially confusing when you have multiple projects using the same framework and port.Monorepo Multiplier
Every problem above scales with each service in the repo. A typical monorepo might have:- Frontend on port 3000
- API on port 8080
- Admin panel on port 3001
- Docs on port 3002
- Background worker on port 9000
Agents Test the Wrong Port
AI coding agents often guess or hardcode the wrong port, especially in monorepos:Cookie and Storage Clashes
Cookies set onlocalhost bleed across apps on different ports:
localStorage is even worse - it’s keyed by origin, so when you switch apps on the same port, you lose all your data.
With Portless, each app has its own domain:
myapp.localhost:1355has its own cookies and localStorageapi.localhost:1355has its own cookies and localStorage
Hardcoded Ports in Config
CORS allowlists, OAuth redirect URIs, and.env files all break when ports change:
.env
.env
Sharing URLs with Teammates
“What port is that on?” becomes a Slack question. With Portless, you just share:Browser History is Useless
Your browser history forlocalhost:3000 is a jumble of unrelated projects:
The Portless Solution
Portless fixes all of these problems by giving each dev server a stable, named.localhost URL:
No Port Conflicts
Every app gets a unique name.
portless myapp next dev and portless shop next dev never conflict.Stable URLs
http://myapp.localhost:1355 never changes. No more wondering which port is which.Isolated Storage
Each domain has its own cookies and localStorage. No more cross-contamination.
Shareable
Share
http://api.myapp.localhost:1355/docs with your team. Everyone knows what it is.Agent-Friendly
AI agents can rely on stable URLs instead of guessing ports.
Clean History
Browser history is organized by project name, not a jumble of
localhost:3000.Benefits of Named URLs
For Humans
- Readable:
api.myapp.localhost:1355tells you exactly what it is - Memorable: No need to remember which port is which
- Organized: Each project has its own namespace
- Shareable: Send a URL to a teammate without explaining the port
For Agents
- Predictable: Agents can rely on
http://api.myapp.localhost:1355always being the API - No Guessing: No more hardcoding
localhost:3000and hoping it’s right - Testable: Agents can run tests against stable URLs without manual intervention
For Teams
- Consistent: Everyone uses the same URL for the same service
- Documented: URLs in docs stay valid across machines
- Onboarding: New team members don’t need a port reference sheet
Real-World Use Cases
Full-Stack Monorepo
You have a Next.js frontend, Express API, and background worker:Multi-Tenant App Development
You’re building a multi-tenant SaaS app and want to test tenant isolation:Git Worktree Workflows
You use git worktrees to work on multiple features simultaneously:Microservices Development
You have 10 microservices running locally:API Client Testing
You’re building an API client library and need to test against a local API:OAuth and Webhooks
You’re testing OAuth or webhook integrations:When to Use Portless
Portless is ideal if you:- Run multiple dev servers locally (frontend + API, monorepo, microservices)
- Work on multiple projects simultaneously
- Use git worktrees for parallel feature development
- Hit port conflicts regularly
- Want stable URLs for AI agents to use
- Need consistent OAuth/webhook URLs
- Work in a team and want shareable URLs
- Value readable, memorable URLs over numeric ports
When NOT to Use Portless
Portless might not be necessary if you:- Only ever run one dev server at a time
- Don’t mind memorizing port numbers
- Never hit port conflicts
- Work alone and don’t share URLs
Portless is designed for local development only. It’s not intended for production use.
Next Steps
Quickstart
Install Portless and run your first app in under 2 minutes
HTTPS & HTTP/2
Enable HTTPS with auto-generated certificates for faster dev servers