Know what's on localhost.

A macOS menu bar app that names every listener, flags the ones kill -9 won't actually stop, and tells you what to send instead.

Live in the terminal? le is the free, open-source CLIbrew install alikatgh/tap/le

macOS 13+ · Apple Silicon · 1.0.0 · Local-only, no telemetry

Localhost Explorer Medium risk
ControlCenter PID 645 Open macOS Managed
Managed by launchd. kill -9 can't stop this — launchd restarts it. Use launchctl unload on its com.apple.controlcenter agent.

Try it — no install

Type a port. See what's holding it.

This is the verdict Localhost Explorer gives on a real Mac — the process, who keeps it alive, and the stop command that actually works.

What you're downloading

A real menu bar popover. No mockups.

This is the actual app, not a Figma render. Every row, badge, and risk pill comes straight from lsof + LE's process intelligence on a real Mac.

The Localhost Explorer popover showing 12 listeners on a developer Mac, including ControlCenter and BlueStacks flagged as 'Medium risk' and 'Open' — managed by launchd.

You've probably seen this

  • Port 3000 already in use.

    Yesterday's dev server never actually quit. Or VS Code's debugger grabbed it. Or both.

  • kill -9 postgres. Postgres comes back.

    Homebrew started it months ago and launchd is dutifully reviving it every time you blink.

  • Closed the editor. :6010 still listening.

    Language servers, copilots, and helper processes routinely outlive the app that started them.

The kill that doesn't kill

Port 5000 belongs to ControlCenter.

Yes, that ControlCenter — the Apple system process. It's managed by launchd, which means kill -9 645 gives you a fresh PID a few seconds later. lsof -i :5000 tells you the PID; it doesn't tell you that.

Localhost Explorer reads the launchd label, names the manager, recommends the strategy, and rates its own confidence. You decide. You don't guess.

  • lsof ControlCenter 645 *:5000 *:7000
  • kill -9 645 (0.4s later) ControlCenter 812 *:5000 *:7000
  • Localhost Explorer Managed by launchd · Careful terminate · 82% · use launchctl to unload

Stop strategies

Stop is a decision, not a button.

The right way to take down a listener depends on who's holding it. Localhost Explorer picks the strategy and shows you why before you commit.

  1. 01 Everyone's first kill

    TERM

    Plain dev servers. Sends SIGTERM, warns which tabs and reloaders will break.

  2. 02 If you ran brew install

    Homebrew service

    Redis, Postgres, MongoDB started by brew services. Stops the service, not just the PID — otherwise launchd brings it back.

  3. 03 Docker users meet this daily

    Container port

    When a published port maps cleanly to one Docker or OrbStack container, the container owns the lifecycle.

  4. 04 The one that ruins evenings

    Managed by launchd

    Editor language servers, Apple helpers, custom .plist jobs. Flagged before you act so you don't keep playing whack-a-mole.

Tools

Little tools that know your localhost.

Most "Mac utility" apps wrap one Unix command and call themselves a product. We do six things you can only do because we already map every listener on your machine — plus a few generic helpers we don't pretend are special.

Eleven tools. Six of them are unforgeable.
  1. Keep awake until this PID exits

    caffeinate -w bound to any localhost listener. Mac stays awake exactly as long as your build, LLM, or test runner lives. Sleeps automatically when it exits.

  2. Open browser when port comes up

    Pick a port and a path. We poll lsof. The moment something starts listening, we fire open http://localhost:N/. No more refreshing.

  3. Tell me when port frees up

    Port 3000 stuck? Pick it. We notify you the second nothing's listening so you can grab it for your own service without a stale EADDRINUSE dance.

  4. Hold a port

    Bind a sentinel listener on 127.0.0.1 so nothing else on the system can grab the port. Release when you're ready to use it yourself.

  5. Restart a managed listener

    We know which listeners are brew services or Docker containers. One click bounces them via their real owner — no kill -9 surprises.

  6. Stop everything in this folder

    Pick a project directory. We list every listener whose working directory lives under it, then send SIGTERM to all of them in one go. End of dev day, one click.

New to this?

Start with the 7-lesson field guide.

If words like launchd, SIGTERM, or brew services are new, the Academy walks you from 127.0.0.1 to source-aware lifecycle management.

  1. 01Localhost
  2. 02Ports
  3. 03Listeners
  4. 04Wildcards
  5. 05PIDs
  6. 06Folders
  7. 07Owners

Anatomy of a row

Every row answers four questions.

One glance, four answers. The numbered callouts map directly to what you read in the popover — same order, same vocabulary.

  1. 1
    Process nameThe binary holding the port.
  2. 2
    PIDStable while the process lives.
  3. 3
    ProfileRedis, Vite, Ollama — what kind of thing it is.
  4. 4
    Managerlaunchd, brew, Docker — who restarts it.
  5. 5
    EndpointLoopback, IPv6, or wildcard.
redis-server 85,899 Redis Managed 127.0.0.1:6379
What is it?
Redis · PID 85,899 · started by Homebrew.
Where does it live?
/opt/homebrew/var/db/redis
Where is it listening?
127.0.0.1:6379 · loopback only
If I stop it?
brew services stop redis — otherwise launchd revives it.

Features

The menu bar version of lsof with a memory.

  • Free a port. Type 3000, see the owner, pick the safest action.
  • Group by project. Forgotten servers stop being invisible.
  • Wildcard warnings. Anything bound to 0.0.0.0 is called out — it might be reachable beyond your Mac.
  • Process profiles. Knows Redis, Postgres, Mongo, Ollama, Node, Python, common editors and helpers.
  • Restart hints. The right brew services start or launchctl command, copy-ready.
  • Adjustable popover. Compact, default, roomy, expanded — same data, your scroll preference.

Free & open source · MIT

If you live in the terminal, le is yours. Free.

The same engine as the app — it knows who owns a port and which stop actually sticks — as a single static binary for macOS and Linux, including servers over SSH. MIT licensed, no account, no telemetry.

~ · le
$ le
PORT   PID    WHAT               DIR                RISK    OWNER      STOP WITH
3000   38814  juice-shop         ~/code/juice-shop  medium  container  docker stop juice-shop
8001   43138  Django dev server  ~/code/api         low     terminal   TERM
27017  1183   MongoDB            /opt/homebrew/var  high    homebrew   brew services stop mongodb-community

Install

brew install alikatgh/tap/le

Man pages and shell completions included. Or grab a prebuilt binary — macOS and Linux, amd64 and arm64, provenance-attested.

Use

le                # live TUI of everything listening
le list node      # one-shot table (--json for scripts)
le stop 3000      # TERM / brew / docker — whichever sticks
le stop --dir . -n # preview stopping a project's servers
le hold 3000      # squat a port so nothing grabs it
le ready 5173 -t 30s && open http://localhost:5173

le is free forever — that's the point. If it earns a place in your shell, the $5 app is how you support the work.

Launch license

$5. One Mac. Yours to keep.

Secure checkout is being set up — email to buy today and I'll send your download link. No account, no subscription, no analytics. Every update included.

LocalhostExplorer-1.0.0.dmg
Localhost
Explorer
Applications
Open the DMG, drag the icon into Applications.
  1. 1. Open the DMG, drag the app to Applications.
  2. 2. Launch it. The icon lives in the menu bar.
  3. 3. Click before you kill.

Questions a developer would ask.

Does it upload my command lines anywhere?
No. Everything stays on the Mac. No account, no telemetry, no scan results sent anywhere.
Why isn't it on the App Store?
The whole point is reading other processes' ports, folders, and managers. Sandboxing makes that impossible to do well.
A process came back after I clicked Stop. Why?
Something else owns its lifecycle — launchd, Homebrew, an editor, a container manager. Localhost Explorer flags those before you act and recommends the right path; sometimes you have to take it.
Intel Macs? macOS 12?
Apple Silicon and macOS 13+ for now. Earlier targets aren't ruled out, but they're not the focus.