A simple CLI tool to find available ports for monorepo development with multiple git worktrees.
$()), which is not available in Windows cmd.exe.
Install in your monorepo root:
npm install portfinder
# or
pnpm add portfinderUse command substitution to set the PORT environment variable:
PORT=$(portfinder 3000) next dev{
"scripts": {
"dev": "PORT=$(portfinder 3000) next dev --turbopack"
}
}{
"scripts": {
"dev": "PORT=$(portfinder 3000) API_PORT=$(portfinder 4000) node server.js"
}
}// apps/web/package.json
{
"scripts": {
"dev": "PORT=$(portfinder 3000) next dev"
}
}
// apps/admin/package.json
{
"scripts": {
"dev": "PORT=$(portfinder 3100) next dev"
}
}
// apps/api/package.json
{
"scripts": {
"dev": "PORT=$(portfinder 3200) node server.js"
}
}- When you run
portfinder 3000, it checks if port 3000 is available - If port 3000 is taken, it automatically finds the next available port (3001, 3002, etc.)
- The command outputs only the port number to stdout
- Shell command substitution captures this output and sets it as an environment variable
When running multiple worktrees of the same monorepo:
- Worktree 1:
pnpm dev→ apps run on ports 3000, 3100, 3200 - Worktree 2:
pnpm dev→ apps automatically use ports 3001, 3101, 3201 - Worktree 3:
pnpm dev→ apps automatically use ports 3002, 3102, 3202
No port conflicts, no manual configuration needed!
MIT