- Utilidad de código abierto de Vercel Labs que resuelve los conflictos de puertos y el dolor de tener que recordar qué puerto usaste al desarrollar en local
- Asigna a cada servidor de desarrollo un subdominio app.localhost único, ofreciendo un esquema de URL reconocible tanto para personas como para agentes de IA
Si lo ejecutas con next dev, tendrás http://localhost:3000 y por lo tanto debes recordar el 3000, pero
si ejecutas portless myapp next dev, puedes acceder con el formato http://myapp.localhost:1355
Si lo ejecutas como portless api.myapp pnpm start, también admite acceso por subdominios en http://api.myapp.localhost:1355
- Funciona con una arquitectura basada en proxy, donde
portless proxy enruta centralmente las solicitudes
- Al iniciar una app, el proxy se arranca automáticamente y cada app recibe un puerto aleatorio (4000–4999)
- La mayoría de los frameworks (Next.js, Express, Nuxt, etc.) reconocen automáticamente la variable de entorno
PORT
- En algunos frameworks como Vite y Astro, asegura la compatibilidad con una función de inyección automática de flags
- Implementa comunicación local rápida y segura con soporte para HTTP/2 y HTTPS
- Los navegadores limitan HTTP/1.1 a 6 conexiones por host
- Esto degrada el rendimiento de servidores de desarrollo como Vite/Nuxt, que sirven muchos archivos sin comprimir
- HTTP/2 multiplexa todas las solicitudes sobre una sola conexión
- Automatiza la generación de certificados propios y su registro en el almacén de confianza del sistema
- También se pueden aplicar certificados personalizados con las opciones
--cert y --key
- Ofrece una interfaz CLI centrada en comandos
portless <name> <cmd> : ejecuta una app con el nombre indicado
portless list : muestra la lista de rutas activas
portless proxy start/stop : controla el proxy
- Se puede omitir el proxy con la variable de entorno
PORTLESS=0
- Guarda información de rutas y PID mediante un directorio de gestión de estado
- En modo usuario normal usa
~/.portless, y en modo root usa /tmp/portless
- La ruta se puede redefinir con
PORTLESS_STATE_DIR
- Al configurar un proxy de API en Vite, webpack-dev-server y similares, es necesario reescribir el encabezado
Host
- Si la configuración es incorrecta, indica el problema con una respuesta
508 Loop Detected
- Compatible con Node.js 20 o superior y entornos macOS y Linux
- Estructura de monorepo basada en pnpm + Turborepo
- Licencia Apache-2.0, base de código en TypeScript (aprox. 74%)
7 comentarios
Se actualizó para admitir worktrees
https://github.com/vercel-labs/portless/releases/tag/v0.5.2
Ahora detecta automáticamente el worktree y agrega el nombre de la rama delante del host
No lo uso porque no encaja bien con el árbol de trabajo del mismo proyecto.
Pensé que asignaba automáticamente, pero parece que solo se registra manualmente.
Estoy usando Caddy, así que no veo una razón para cambiarme a esto.
Ya lo estaba haciendo con docker + traefik + mkcert, pero me parece que usar eso sería más cómodo.
Es un artículo útil.
¿Ahora por fin le decimos adiós al error EADDRINUSE?
Últimamente, como uno anda desarrollando de todo un poco con agentes y levantando cosas por todos lados, terminan chocando entre ellos y se arma un caos jaja
Como salió el tema en X, dicen que si lo usas en Docker y le pones a la fuerza el PID del daemon de Docker, eso también funciona.
https://github.com/vercel-labs/portless/issues/61