cd /news/developer-tools/leftopen-native-macos-menu-bar-app-t… · home › topics › developer-tools › article
[ARTICLE · art-140040] src=github.com ↗ pub= topic=developer-tools verified=true sentiment=↑ positive

LeftOpen – Native macOS menu bar app to see what's on localhost and close it

Developer SonghaiFan released LeftOpen, a native macOS menu bar app and bundled CLI that lists listening localhost ports, identifies the owning process and project, and closes selected ports with SIGTERM only. LeftOpen runs on macOS Sonoma 14.0+ as a universal binary for Apple Silicon and Intel Macs, is signed with a Developer ID and notarized by Apple, and installs via `brew install --cask songhaifan/tap/leftopen` or a GitHub Releases zip. The app distinguishes 127.0.0.1 from 0.0.0.0 bindings, groups ports by origin (dev servers, launchd services, apps, system), and ships a `leftopen` CLI with identical inference and safety rules.

read4 min views1 publishedSep 26, 2026
LeftOpen – Native macOS menu bar app to see what's on localhost and close it
Image: Michielbdejong (auto-discovered)

Native macOS Menu Bar Port Manager & CLI

See what your tools left running on localhost, identify projects, and gently close them.

把那些虚掩着的门,轻轻关上。

English · 中文

When I have several coding agents working in parallel, dev servers and test runners keep starting up on different ports. By the end of the day there are always a few still running.

Existing tools are either too much, or only tell you "port in use" without saying which process it is or which project it came from.

So I made LeftOpen. It sits quietly in the menu bar and shows you the listening ports, the processes behind them and the projects they probably belong to. Once you've had a look, you close the ones you no longer need.

Close the doors that were left ajar, gently.

brew install --cask songhaifan/tap/leftopen

Supports Apple Silicon and Intel Macs running macOS Sonoma (14.0+). The app and bundled CLI are universal binaries, signed with a Developer ID and notarized by Apple.

Get LeftOpen-release.zip from GitHub Releases, unzip, and move LeftOpen.app to /Applications.

  • Knows whose port it is. Walks up from the process's working directory to.git ,package.json ,pyproject.toml ,Cargo.toml orgo.mod , or resolves the owning.app . Global npm packages,python -m modules and standalone services (Redis, Postgres, Ollama…) are named too, so you rarely see a barenode orpython .

  • Real icons, nothing bundled. Uses the.app icon when there is one; otherwise the icon the project or package ships itself (Tauri/Electron app icon, the favicon declared inindex.html ,public/ conventions); otherwise the favicon served by the local server; otherwise a symbol.

  • Grouped by who started them. Dev Servers (from a project, terminal, editor or agent), Background Services (launchd: brew services, login items), Apps and System. The group is also how a port is closed for good, and each one says so: SIGTERM for dev servers,brew services stop … for services launchd would restart, quitting the app for apps.

  • Closes gently. Shows the process's other ports before you confirm, re-checks PID and start time at the moment of closing, sendsSIGTERM only. NeverSIGKILL , never system processes.

  • Local vs LAN. Tells apart ports bound to127.0.0.1 from ones on0.0.0.0 or a LAN address.

  • Nothing running in the background. Native SwiftUIMenuBarExtra . No daemon, no Dock icon, no telemetry. The only request that leaves this Mac is a daily check of the latest GitHub release, which you can turn off in Settings.

  • Same engine in the terminal. The app ships aleftopen CLI with identical inference and safety rules.

  • Fix "Port already in use" (EADDRINUSE) : When your dev server fails because port 3000, 5173, or 8080 is blocked by a lingering process, LeftOpen shows you what's running and shuts it down gently—without restarting your terminal or machine.

  • Identify the project, not just a generic node or python PID : Tools likelsof -i orkill-port only report raw PIDs or ambiguous process names. LeftOpen tracks the working directory and project root (package.json ,Cargo.toml ,pyproject.toml ,go.mod ,.git ), giving you full context before taking action.

  • Spot accidental LAN exposure : See at a glance whether a port is bound strictly to127.0.0.1 (local only) or0.0.0.0 (accessible to anyone on your local network/Wi-Fi).

  • Graceful SIGTERM vs. destructive kill -9 : Unlike blunt force-killing scripts, LeftOpen re-verifies PID and start time, shows sibling ports, and issues a standardSIGTERM so servers can clean up sockets, flush logs, and exit cleanly.

Available in the terminal right after installing:

leftopen

leftopen 3000

leftopen open 3000

leftopen close 3000

leftopen --json

Sample output:

LEFT OPEN
26 listening ports · 17 processes · 1 projects · 8 LAN-visible

MY PROJECTS (2)
PORT    PID      OWNER          PROCESS    AGE      SCOPE
5173    76344    visdelta       node       2h       LOCAL
         ↳ ~/Documents/visdelta
5511    4999     visdelta       node       27m      LOCAL
         ↳ ~/Documents/visdelta

APPLICATIONS (16)
PORT    PID      OWNER          PROCESS    AGE      SCOPE
5000    696      ControlCenter  Control    3d       LAN
9222    36824    Google Chrome  Chrome     5h       LOCAL

SERVICES (3)
PORT    PID      OWNER          PROCESS    AGE      SCOPE
11434   911      Ollama         ollama     1d       LOCAL

LOCAL = this Mac only · LAN = may be reachable from your local network
swift test

LEFTOPEN_OUTPUT_DIR=dist/dev Scripts/build-app.sh
── more in #developer-tools 4 stories · sorted by recency
── more on @leftopen 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/leftopen-native-maco…] indexed:0 read:4min 2026-09-26 · —