Welcome to Portless
Portless gives every local dev server a stable, human-readable URL. No more remembering which port is which, no more conflicts, no more switching tabs to the wrong app.What is Portless?
Portless is a local development proxy that replaces numeric port numbers with stable, named.localhost URLs. Instead of juggling localhost:3000, localhost:8080, and localhost:4000, you get myapp.localhost:1355, api.localhost:1355, and docs.localhost:1355.
It works by running a lightweight reverse proxy on port 1355 (customizable) that routes requests based on the hostname. When you start your dev server with portless, it automatically assigns a random port to your app and registers it with the proxy, so you can access it via a clean URL.
No More Port Conflicts
Every app gets a unique name instead of fighting over port 3000.
EADDRINUSE becomes a thing of the past.Stable URLs
Your URL never changes. No more wondering if that tab is showing the old app that used to run on port 3000.
Human-Readable
api.myapp.localhost:1355 is easier to remember and share than localhost:8080. For humans and AI agents.Git Worktree Support
Each worktree gets its own subdomain automatically. Main branch uses
myapp.localhost:1355, feature branch uses feature.myapp.localhost:1355.Quick Example
Instead of this:The proxy auto-starts when you run an app. You can also start it explicitly with
portless proxy start.Key Features
- Zero Config: Works out of the box with Next.js, Express, Vite, Nuxt, React, Angular, and more
- Auto Port Assignment: Assigns random ports (4000-4999) automatically and injects
PORTandHOSTenv vars - Subdomains: Use
api.myapp,docs.myapp, or any nested structure you want - Wildcard Routing:
tenant1.myapp.localhost:1355routes tomyappautomatically - Git Worktree Detection: Branch names become subdomains automatically
- HTTP/2 Support: Enable
--httpsfor faster dev server page loads (browsers limit HTTP/1.1 to 6 connections) - Static Aliases: Register Docker containers or external services with
portless alias
How It Works
- Start the proxy - Auto-starts when you run an app, or start explicitly with
portless proxy start - Run apps -
portless <name> <command>assigns a free port and registers with the proxy - Access via URL -
http://<name>.localhost:1355routes through the proxy to your app
PORT and HOST environment variables. Most frameworks (Next.js, Express, Nuxt, etc.) respect these automatically. For frameworks that ignore PORT (Vite, Astro, React Router, Angular, Expo, React Native), portless auto-injects the correct --port and --host flags.
Requirements
- Node.js 20+
- macOS or Linux
Windows support is not currently available. Portless is designed for Unix-based systems.
Next Steps
Quickstart
Install Portless and run your first app in under 2 minutes
Why Portless?
Learn about the problems Portless solves and when to use it