pier

Who’s on port 3000?

pier tells you which project every localhost port belongs to, in your menu bar and your terminal.

brew install stepanblaha/tap/pier
View on GitHub (opens in a new tab)

Free and open source. macOS 14 or later.

The pier gull says: Ahoy! Who’s on port 3000? :3000 is acme-store. Next.js, main branch. :5432 is PostgreSQL. All good. That one’s been idle for 9 days…

The pier gull, a seagull in a sailor hat, giving a salute

lsof tells you a PID. pier tells you the story.

“Port 3000 is already in use.” By what? lsof says node 4821 *:3000, which is no help when six node processes are running. pier answers with the project, the framework and the branch.

The pier gull, hand on chin, thinking about which process owns a port
$ lsof -iTCP -sTCP:LISTEN -nP
COMMAND   PID  USER  NAME
node     4821  you   *:3000
node     5012  you   *:4321
node     5377  you   *:5173
Python   6120  you   *:8000
postgres  912  you   *:5432
Five listeners. Which one is the shop?
$ pier
  PORT  PROJECT     STACK     BRANCH
● 3000  acme-store  Next.js   main
● 4321  docs        Astro     main
● 5173  dashboard   Vite      feat/charts
● 8000  acme-api    FastAPI   main
● 5432  PostgreSQL  infra     
Same ports. Now with names.

Everything behind a port, in one glance.

A listening port is only a number. pier works out the rest, so you never have to guess which dev server you are about to kill.

The pier gull peeking in from the corner and pointing a wing at the headline
  • Knows the project

    Reads the process’s working directory to name the project, and shows the git branch it is on.

  • Recognizes the framework

    Next.js, Vite, Astro, Remix, Nuxt, SvelteKit, Rails, Django, Flask, FastAPI, Express and more.

  • Names your infra

    PostgreSQL, Redis, MongoDB, MySQL, Ollama and Docker containers show up by name, not by PID.

  • Page title and favicon

    A quick probe shows what each port actually serves, so you can tell two localhost tabs apart.

  • Health at a glance

    Every port is ok, error or timeout, with uptime, CPU and memory next to it.

  • LAN exposure and QR codes

    See what is reachable from your network, and scan a QR code to test on your phone.

  • Who started it

    VS Code, iTerm, tmux or Claude Code. pier can jump straight back to the terminal that did.

  • Finds forgotten servers

    Servers idle for days get an idle badge, and one click or pier prune cleans them up.

  • Public URL on demand

    pier expose opens a Cloudflare quick tunnel and gives you an HTTPS address to share.

The pier menu bar popover: a search field, projects Acme Store, Acme Docs, Dashboard, Acme API and prototype with health dots, an infra section with PostgreSQL, Redis and Ollama, and a Clean up 1 stale button.
The gull is your menu bar icon.

Your localhost, one hotkey away.

Press ⌥⌘P anywhere, type a few letters, hit return.

The pier gull waving hello
  • Search everything. Find a service by project, port, framework or name.

  • One row per project. Every port a project listens on becomes a chip on its row. Hover for open, copy URL, logs, restart and stop.

  • A details panel. Health, branch, URLs, a QR code for your phone, and who started it.

  • Clean up stale servers. Forgotten ones get an “idle 9d” badge, and one click stops them.

  • Stacks and Run… Bring a pier.yml stack up or down, or start a project’s dev server.

  • Pins, renames, crash alerts. Keep what matters on top and get a notification when a managed server crashes.

The whole thing, from your terminal.

Everything the app does is a command away, and the CLI works without the app running. Add --json to any command when a script is the one asking.

The pier gull holding a clipboard, ready to check ports off
A terminal running pier: a table of ports 3000, 4321, 5173, 8000, 8080, 9090, 5432 and 11434 with project, framework, health, LAN or local binding and uptime. Below it, pier stale reports the forgotten server on port 8080, up 9 days and idle.
  • pier

    List everything listening, labeled by project.

  • pier watch

    A live, top-like view with keys to open, copy and kill.

  • pier info shop

    Path, branch, runtime, owners, CPU, memory and command line.

  • pier open 3000

    Open it in your browser, reusing the tab you already have. Add --editor or --terminal.

  • pier stop 3000

    Stop it cleanly. Databases ask first.

  • pier stale

    Find forgotten dev servers: long uptime, idle, no connections.

  • pier prune

    Stop every stale server after one confirmation.

  • pier qr 3000

    A QR code of the LAN URL, for testing on your phone.

  • pier free

    Print the next free port.

  • pier run

    Run your dev script under pier, with logs and exact restarts.

  • pier logs shop -f

    Follow the logs of a managed server.

  • pier restart shop

    Restart it, even if pier did not start it.

  • pier up

    Start a whole pier.yml stack, in dependency order.

  • pier down

    Stop that stack again.

  • pier expose 3000

    A public HTTPS URL through a Cloudflare quick tunnel.

  • pier mcp

    An MCP server so Claude Code can see your services.

  • pier completions --install

    Tab completion for live ports and names.

  • pier hello

    The gull says hi.

Works in any terminal

It respects NO_COLOR, uses plain 16 colors that read on light and dark themes, and falls back to ASCII when it has to. Even the pixel gull degrades to hand drawn ASCII.

  • Terminal.app
  • iTerm2
  • Ghostty
  • kitty
  • WezTerm
  • Warp
  • VS Code
  • tmux
  • ssh

Give Claude Code eyes on your localhost.

pier mcp is an MCP server. Add it once, and Claude can see and control your local services the same way you do.

The pier gull typing away on a laptop
claude mcp add --scope user pier -- pier mcp
  • List services
  • Start and wait until healthy
  • Read logs
  • Restart or stop
  • Find free ports
  • Find stale servers

Stopping a database always needs your explicit confirmation.

Try asking Claude Code
  • What's running on my machine?

    Claude lists your services, labeled by project.

  • Start the docs site and wait until it's healthy.

    Claude starts the dev server and waits for it to come up.

  • Show me the last 50 log lines of shop.

    Claude reads the logs of a managed server.

  • Is anything stale that I forgot about?

    Claude finds servers that have been idle for days.

Two commands and you are docked.

pier 0.1.2 is free and open source under the MIT license, for macOS 14 or later.

The pier gull celebrating with both wings up
  1. Install the CLI

    brew install stepanblaha/tap/pier
  2. Add the menu bar app optional

    pier app install

Builds from source, so macOS never shows a Gatekeeper prompt. The CLI works without the app running. Prefer the prebuilt app? Grab the zip from GitHub Releases (opens in a new tab).