portless
port1355.dev- Category
- Developer Tools
- Rank
- No. 450Tools index
- Pricing
- Open Source
- Platform
- cli
- Type
- TOOL
- Builder
- @vercel-labs
- GitHub
- 12.3k stars
- Latest release
- v0.15.6
- Date
About
Replaces port numbers with stable, named .localhost URLs for local development. Enables developers to use memorable names like https://myapp.localhost instead of http://localhost:3000, making local development more organized and accessible.
What it does
Portless runs a local reverse proxy in front of development servers. It assigns each child process a free internal port, registers a hostname, and routes browser requests by host. The proxy supports HTTPS, HTTP/2, WebSockets, subdomains, custom domains, monorepos, and branch-specific worktree names.
Why it's ranked here
This is a focused tool with unusually broad handling of real development friction. Automatic framework flags, worktree isolation, monorepo discovery, persisted proxy settings, and early failure in non-interactive environments reduce setup work. The cost is meaningful system involvement: trusted certificates, privileged ports, state files, and sometimes hosts-file changes.
What's good
HTTPS and HTTP/2 work by default, while WebSocket forwarding preserves hot reload behavior. Portless infers names and scripts, discovers workspace packages, and separates linked worktrees with branch-derived subdomains. It also sanitizes hostnames, detects proxy loops, preserves forwarded headers, and supports both strict routes and optional wildcard subdomains.
Tradeoffs
Portless is pre-1.0, and its state format may change between releases. Default HTTPS generates and trusts a local certificate authority, while ports 80 and 443 can require elevation. Custom domains require hosts-file synchronization. LAN mode uses the local suffix and cannot currently combine with a custom domain. Linux LAN publishing also depends on Avahi tooling.
How to use it well
It best suits developers running several local web services, monorepo packages, or parallel Git worktrees. Install one global version, let projects keep their normal development scripts, and add configuration only for naming or fixed-port exceptions. Use custom owned domains when OAuth callbacks reject local suffixes. It does not replace production hosting, and public ngrok access still requires the separate ngrok CLI and authentication.
Technical notes+
packages/portless/tsup.config.ts builds ESM and declaration outputs from packages/portless/src/cli.ts and packages/portless/src/index.ts. The CLI coordinates certificates, route state, proxy startup, framework flag injection, workspace discovery, services, mDNS, Tailscale, and ngrok. packages/portless/src/index.ts exposes the library surface by re-exporting types, proxy, routes, utilities, and hosts modules. packages/portless/src/proxy.ts uses Node HTTP and HTTP/2 primitives, supports HTTP/1 fallback and WebSocket bridging, forwards requests to loopback backends, and rejects routing loops after five proxy hops. packages/portless/src/certs.ts generates elliptic-curve keys and signs local certificates through OpenSSL.
Observed
- Primary language
- TypeScript
- Install surface
- npm package, installable globally or as a project development dependency
- Interfaces
- Command-line tool and ESM library with TypeScript declarations
- Runtime requirements
- Node.js 24 or newer; repository tooling uses pnpm 11
- Platform support
- Certificate trust handling is documented for macOS, Windows, WSL, and several Linux families
- Network protocols
- Reverse proxy supports HTTPS, HTTP/2, HTTP/1.1 fallback, and WebSockets
- Repository structure
- Private pnpm and Turborepo monorepo containing the portless package
Read from README.md, package.json, packages/portless/tsup.config.ts, packages/portless/src/cli.ts, packages/portless/src/auto.ts, packages/portless/src/mdns.ts, packages/portless/src/index.ts, packages/portless/src/certs.ts, packages/portless/src/fonts.ts, packages/portless/src/hosts.ts, packages/portless/src/ngrok.ts, packages/portless/src/pages.ts, packages/portless/src/proxy.ts.
What it can do
Replace port numbers with named localhost URLs
Port number (e.g., 3000) → Named .localhost URL (e.g., https://myapp.localhost)
Run reverse proxy for local development
Local development server and desired name → Proxied connection between named URL and port
Generate HTTPS certificates for localhost URLs
Named .localhost domain → SSL/TLS certificate for secure local development
Map subdomains to different services
Subdomain configuration and target ports → Subdomain routing (e.g., api.myapp.localhost, web.myapp.localhost)
Support git worktree-based development
Git worktree structure and port assignments → Worktree-specific named URLs for branch isolation
Tags
Tech Stack
Media
Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.