Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Project Port ManagerNew to Visual Studio Code? Get it now.
Project Port Manager

Project Port Manager

Irfan ali

| (0) | Free
Finds every port your project uses, shows which are in use and what is holding them, and kills them in one click. No more hunting for a PID after EADDRINUSE.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Project Port Manager

EADDRINUSE: address already in use :::3000

Every developer knows the next twenty seconds: open a terminal, remember whether it is lsof -ti:3000 or netstat -ano | findstr, pipe it to kill, try again.

This puts your project's ports in the Explorer instead, with the process holding each one, and a button to end it.

It finds your ports for you

Other port extensions ask you to type a number. This one reads the project and works out which ports it uses:

Source What it reads
.env files Any key containing PORT, plus any localhost:1234 URL
docker-compose*.yml The host side of every ports: mapping
package.json --port 4200, -p 3000, PORT=3000 inside scripts
angular.json, vite.config.*, next.config.*, nest-cli.json, nodemon.json "port": 4200
application.properties / application.yml Spring's server.port, and JDBC URLs
launchSettings.json .NET applicationUrl
.vscode/launch.json Debug ports, in any language

Node, Angular, Vite, Next, NestJS, Spring Boot, .NET and anything in Docker Compose work without configuration.

In a monorepo that means every service's port, labelled with the service it belongs to:

PROJECT PORTS
  ● 3000  api            node · pid 4471      🌐 ✕
  ● 5173  web            node · pid 5120      🌐 ✕
  ○ 8080  worker         free
  ● 5432  compose, api   postgres · pid 819   🌐 ✕

One row per process, not per port. A Node server and its --inspect debugger share a process, and killing the process closes both — so they appear as one row with the extra ports folded in:

● 3000  node · pid 3451 · +9229     🌐 ✕
● 5432  docker · pid 2746 · +6379

Turn that off with projectPorts.groupByProcess if you want a row per socket.

By default only ports that are actually in use are listed — that is the short, useful list. Click the eye in the view's title bar to also show the ports your project declares but nothing is running on.

● in use, ○ free. Hover any port to see every file that references it.

If the project declares no ports at all, the view falls back to showing whatever is listening on your machine, so it is never empty.

What you can do

  • ✕ Kill — sends SIGTERM, waits, then SIGKILL only if the process is still there. Confirms first, because the port may belong to something you did not start.
  • 🌐 Open in Browser — straight to http://localhost:<port>
  • Copy Process ID — for when you want to investigate rather than kill
  • Ports: Kill Process on Port… — type a number, for ports outside the project

Settings

Setting Default What it does
projectPorts.showFreePorts false Also list declared ports that nothing is using
projectPorts.groupByProcess true One row per process instead of per port
projectPorts.extraPorts — Always show these, even if nothing references them
projectPorts.ignorePorts — Hide these
projectPorts.showOtherListening false Also list machine ports your project does not mention
projectPorts.confirmBeforeKill true Ask first
projectPorts.autoRefreshSeconds 0 Poll every N seconds; 0 means only when you ask

Platforms

macOS and Linux use lsof; Windows uses netstat and tasklist. Nothing is bundled and nothing is downloaded — these ship with the operating system.

No network access, no telemetry.

Author

Irfan Ali

MIT licensed.

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft