- 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 com next dev, você acessa em http://localhost:3000, então precisa lembrar a 3000
Ao executar portless myapp next dev, é possível acessar no formato http://myapp.localhost:1355
Ao executar algo como portless api.myapp pnpm start, também há suporte a acesso por subdomínio em http://api.myapp.localhost:1355
- Funciona com uma arquitetura baseada em proxy, em que
portless proxy roteia 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
--cert e --key
- Fornece uma interface de CLI centrada em comandos
portless <name> <cmd> : executa o app com o nome especificado
portless list : mostra a lista de rotas ativas
portless 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
- 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
- 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