See every port. Stop it by name.

Every listening port, with its framework, project, and uptime. Zero config, one static binary.

Install ports ↗
$curl -fsSL https://ports.tools/install | sh
The tool

See it work in one session.

List what's running, find a service, free a port, stop a project — the four commands, back to back.

~/projects — zsh
$ portsPORT     PROCESS       PROJECT                UPTIME3000     Next.js       ~/projects/shop        14m5432     PostgreSQL    docker: shop-db        2d8000     FastAPI       ~/projects/shop        14m5173     Vite          ~/projects/admin       3h11434    Ollama        windows                ? $ ports find postgres5432     PostgreSQL    docker: shop-db        2d $ ports free 3000✓ killed Next.js (pid 48391) — port 3000 is free $ ports kill shop✓ stopped FastAPI (:8000)✓ stopped PostgreSQL (container shop-db)$ 
What it knows

Context the OS won't give you.

01

Framework detection

Next.js, Vite, FastAPI, Postgres, Redis — named the way you know them, not as PIDs.

02

Project grouping

A frontend, API, and database that belong together read — and stop — as one application.

03

Docker unwrap

Real container and Compose service names instead of docker-proxy.

04

WSL2-aware

Windows-side listeners and WSL processes, distinguished in the same table.

05

JSON output

Pass --json to any list or find command for scripting and automation.

06

Safe stops

SIGTERM first, SIGKILL only if it won't exit. Never a reused PID.

Reference

Four commands and two flags.

portsList every listening port with its framework, project, and uptime.
ports find <name>Filter by framework, process, project, or container. Case-insensitive.
ports free <port>Kill whatever holds a port.
ports kill <name>Stop every process in a project or service — containers included.
--jsonMachine-readable output for scripts and coding agents.
--forceSkip SIGTERM and kill immediately.
How it works

Your whole machine, already explained.

Instead of raw PIDs and process names: framework names, project directories, and uptime — grouped so a frontend, API, and database that belong together read as one application.

Read the docs

Your machine

sockets · processes · working directories

ports

one command, zero config

Local projects — git roots & marker files
Docker — containers & Compose services
WSL2 — Windows-side listeners
Install

One static binary. No runtime.

Homebrew, Scoop, or curl — then run ports.

macOS
$ brew install pyjeebz/tap/ports
Linux, macOS
$ curl -fsSL https://ports.tools/install | sh
Windows
$ scoop install ports
The harbor

Port of localhost.

127.0.0.1live
m/v localhost · inbound

No PID was harmed in the making of this harbor. Every ship gets SIGTERM before SIGKILL.