portless - ferramenta que substitui números de porta por URLs `.localhost` baseadas em nome
(github.com/vercel-labs)- Utilitário open source da Vercel Labs que resolve conflitos de porta e o incômodo de ter que lembrar qual porta foi usada no desenvolvimento local
- Atribui a cada servidor de desenvolvimento um subdomínio app.localhost exclusivo, oferecendo um esquema de URLs compreensível tanto para pessoas quanto para agentes de IA
Ao executar comnext dev, você acessa emhttp://localhost:3000, então precisa lembrar a 3000
Ao executarportless myapp next dev, é possível acessar no formatohttp://myapp.localhost:1355
Ao executar algo comoportless api.myapp pnpm start, também há suporte a acesso por subdomínio emhttp://api.myapp.localhost:1355 - Funciona com uma arquitetura baseada em proxy, em que
portless proxyroteia centralmente as requisições- Ao iniciar um app, o proxy é iniciado automaticamente, e cada app recebe uma porta aleatória (4000–4999)
- A maioria dos frameworks (Next.js, Express, Nuxt etc.) reconhece automaticamente a variável de ambiente
PORT - Em alguns frameworks, como Vite e Astro, a compatibilidade é garantida com injeção automática de flags
- Suporte a HTTP/2 e HTTPS para implementar carregamento de páginas mais rápido e comunicação local segura
- Os navegadores limitam HTTP/1.1 a 6 conexões por host
- Isso reduz o desempenho de servidores de desenvolvimento como Vite/Nuxt, que servem vários arquivos descompactados
- HTTP/2 multiplica todas as requisições em uma única conexão
- Geração automática de certificados próprios e registro no armazenamento de confiança do sistema
- Também é possível aplicar certificados personalizados com as opções
--certe--key
- Os navegadores limitam HTTP/1.1 a 6 conexões por host
- Fornece uma interface de CLI centrada em comandos
portless <name> <cmd>: executa o app com o nome especificadoportless list: mostra a lista de rotas ativasportless proxy start/stop: controla o proxy- É possível executar ignorando o proxy com a variável de ambiente
PORTLESS=0
- Armazena informações de rotas e PID por meio de um diretório de gerenciamento de estado
- No modo de usuário normal usa
~/.portless, e no modo root usa/tmp/portless - É possível redefinir o caminho com
PORTLESS_STATE_DIR
- No modo de usuário normal usa
- Ao configurar proxy de API em Vite, webpack-dev-server etc., é necessário reescrever o cabeçalho
Host- Em caso de configuração incorreta, o problema é indicado com a resposta
508 Loop Detected
- Em caso de configuração incorreta, o problema é indicado com a resposta
- Suporta Node.js 20 ou superior e ambientes macOS e Linux
- Estrutura de monorepo baseada em pnpm + Turborepo
- Licença Apache-2.0, codebase em TypeScript (cerca de 74%)
7 comentários
Foi atualizado para dar suporte a worktree
https://github.com/vercel-labs/portless/releases/tag/v0.5.2
Agora ele reconhece automaticamente a worktree e adiciona o nome da branch antes do host
Não estou usando porque não combina bem com worktrees do mesmo projeto.
Achei que fazia a atribuição automaticamente, mas pelo visto é só um esquema de registrar manualmente.
Estou usando Caddy, então não vejo muito motivo para trocar por isso.
Eu já estava fazendo isso com docker + traefik + mkcert, mas acho que usar isso aí vai ser mais prático.
Texto útil.
Agora podemos dar adeus ao erro EADDRINUSE?
Hoje em dia, como a gente desenvolve de tudo um pouco usando agentes e fica subindo um monte de coisas, elas acabam entrando em conflito entre si e vira uma bagunça rs
Como comentaram no X, aparentemente, se você estiver usando com Docker e informar à força o PID do daemon do Docker, isso também funciona.
https://github.com/vercel-labs/portless/issues/61