what-the-port README

The project's README from github.com/tomjohndesign/what-the-port. As one markdown file: README.md.

WhatThePort

Every dev server on your Mac, in the menu bar.

What it is, what branch it’s on, which agent started it, and what it’s costing you. Stop the ones you forgot about in one click.

Download for macOS · Try the interactive demo · Guides · Build from source

Free and open source · macOS 14 or later · No account

WhatThePort marketing demo showing the server list, ports, branches, memory use, and CPU in a Mac menu bar popover

Know what’s running

WhatThePort is a native Swift app that lives in your menu bar, with no Dock icon. Press ⌥⌘P to see your local development servers: project names, ports, git branches, uptime, and resource use. Open a server in your browser, inspect its processes, or stop and restart it without hunting through terminals.

Knows which agent started it

Servers launched by Claude Code, Codex, Conductor, or Pane link back to the session that started them. Pick up the conversation, jump to the Pane terminal, check the branch, or open a Vercel preview. Optional pull request links use the GitHub CLI you’re already signed in to.

Marketing demo of a server’s detail view with its agent session, git branch, memory and CPU charts, and preview link

Notices before your fans do

When a server passes the default 2 GB memory threshold or grows more than 500 MB in ten minutes, WhatThePort turns its menu bar amber and sends a notification. Port colors stay consistent, while amber memory readings flag servers needing attention. Ten minutes of memory and CPU history show what’s happening across the server’s own process tree. Adjust thresholds and snooze alerts in Settings.

Marketing demo showing a rising memory chart and the amber alert threshold for a development server

Stops the ones you forgot

Clean up adds checkboxes to the server list and preselects servers from deleted worktrees or idle for hours. Tick the ones to go and WhatThePort stops each server’s own process tree. Database processes such as Postgres and Redis are protected by default.

Choose Off, Ask, or Automatic cleanup in Settings. Leaking servers are never stopped automatically.

Marketing demo of Clean up with idle and deleted-worktree servers selected for removal

Screenshots from the marketing site’s interactive demo, using sample server data.

Get started

  1. Download WhatThePort and open it.
  2. Drag WhatThePort onto the Applications shortcut beside it, then open it from Applications.
  3. Start a development server, then click the dot grid in your menu bar or press ⌥⌘P.

The prebuilt download is for Apple Silicon Macs running macOS 14 or later. To compile the app yourself, you’ll also need Swift 5.9+.

Features

Usage

WhatThePort lives in the menu bar as a small dot grid. Click it to see every server:

Right-click the dot grid to open a server in the browser, open Settings, check for updates, send feedback or quit.

Can't see the dot grid? The menu bar hides icons that don't fit: click » at its edge on macOS 27, or check System Settings → Menu Bar. Opening WhatThePort again from Finder or Spotlight shows the popover, or Settings when the icon is hidden.

In the terminal

wtp opens the same server list in your terminal, using the app's scanner and settings. Onboarding offers to install it, or click Install… in Settings → General → Terminal. That links /usr/local/bin/wtp to the app, asking for your password if the folder needs it, and keeps working through updates. To link it yourself:

sudo mkdir -p /usr/local/bin
sudo ln -sf /Applications/WhatThePort.app/Contents/MacOS/WhatThePort /usr/local/bin/wtp

wtp follows your terminal's colors and leaves notifications and automatic clean up to the menu bar app. Memory and CPU charts fill in while it runs. From source, run swift run WhatThePort --tui.

To check the UI without the menu bar, WhatThePort --snapshot <dir> renders each view with live data to PNG. Add --appearance light or --appearance dark to check a specific appearance without changing your Mac’s settings.

To render the onboarding loading, success, missing-tool, and approval states without changing macOS permissions or login items, run WhatThePort --snapshot-onboarding <dir>.

Interface language

The native app supports English, German, French, Spanish, Simplified Chinese, Hebrew, Japanese and Ukrainian. Choose your language on the first onboarding screen or in Settings → General → Language. Changes apply immediately. System default follows your Mac’s preferred languages, falling back to English. Hebrew uses a right-to-left layout.

wtp language shows the app preference; wtp language ja sets it and wtp language system restores the system default. The terminal’s ? screen also shows App language. The TUI, command help and JSON remain English, and project names, paths and commands stay unchanged.

Preview all eight languages or read Localization for translation and build details.

Native onboarding in Japanese: the language picker on the first step, with a preview of Servers rows

Settings

Open Settings from the gear in the popover (⌘,):

How It Works

WhatThePort reads listening TCP sockets with lsof, then inspects each server's process tree directly through libproc and sysctl: memory footprint, CPU time, working directory, arguments and environment. From the working directory it finds the project manifest, framework and git branch. Session links come from environment variables that Claude Code and Conductor pass to the commands they run, and from Codex's session files. It rescans every 2 seconds. In monorepos, sibling servers stay separate from their shared task runner. When one process serves several ports, each row shows its server’s usage; totals count each process once, and the memory bar divides shared usage between those ports. Stopping or restarting that process affects all ports it serves.

Privacy

There's no account and no analytics SDK. Everything the app shows comes from your Mac and stays there. It only goes online to:

The website uses cookieless Vercel Web Analytics to count visits and download clicks.

Building

cd WhatThePort
swift build

To build the app bundle:

./build-app.sh
open .build/WhatThePort.app

For updater-enabled releases, see Automatic updates and release setup. The release script packages the app as a notarized disk image and generates a signed update feed for the website.

To package a local build as the download's disk image, run ./make-dmg.sh after ./build-app.sh.

Automatic deployment

Every push to main, including a merged pull request, runs Rebuild and deploy site and app. It builds the Apple Silicon Mac app on macOS, verifies its ad-hoc signature, and packages it as WhatThePort.dmg (make-dmg.sh): the app beside an Applications shortcut, on a background designed in Paper (WhatThePort/dmg/). A Linux job then puts that artifact at public/WhatThePort.dmg, builds the Next.js site, and deploys both together to production on Vercel. A failed app or site build stops deployment.

The download is never checked in, so the site always serves the latest release. Production builds fail unless public/WhatThePort.dmg is a disk image and any update feed is for this commit's build (scripts/check-download.mjs). Local dev and preview deployments don't have the file, so they redirect downloads to production.

Configure these GitHub Actions repository secrets under Settings → Secrets and variables → Actions before merging this workflow:

Run vercel link locally to obtain the project IDs. Keep tokens and the generated .vercel directory out of Git.

The app's tip jar opens whattheport.dev/tip, which redirects to the TIP_URL environment variable, so the payment page can change without an app update. Create a Stripe Payment Link and set its type to Customers choose what to pay (not a product price), then add it to the Vercel project's production environment with vercel env add TIP_URL production. Production builds fail without it (scripts/check-tip.mjs); local dev and previews redirect /tip to production.

vercel.json disables Vercel's automatic Git deployments for main, so only this workflow publishes production with the freshly built app. Other branches retain Vercel's normal preview deployments. To retry production, use Actions → Rebuild and deploy site and app → Run workflow with main selected. Production runs are serialized; GitHub may replace a pending run with a newer one when several merges arrive during an active deployment.

Until its signing secrets are configured, the workflow uses ad-hoc signing and builds without an update feed. Once they are, it signs with Developer ID, notarizes the app, and publishes a signed Sparkle feed under /updates/. See Release from GitHub Actions.

About

Made by Tomjohn. Explore the interactive demo, read the guides to ports, dev servers and coding agents on macOS, or browse the source to see how it works. Agents can read the site as Markdown from /llms.txt. If WhatThePort saves you time, buy me a coffee.

License

MIT

what-the-port (tomjohndesign/what-the-port)

Searching Database…

What is this?WhatThePort is a native Swift menu bar app for macOS that shows every local development server running on your Mac: project name, port, git branch, uptime, and resource use, so you can open, restart, or stop them without hunting through terminal windows.
Is this a menu bar app or does it sit in the Dock?It is a menu bar-only app with no Dock icon, opened with the shortcut Option-Command-P; it also ships a companion terminal tool called wtp that mirrors the same server list in your shell.
What do I need to run it?The prebuilt download requires an Apple Silicon Mac on macOS 14 or later; if you want to compile it yourself instead, you'll need Swift 5.9 or newer.
Does it stop leaking servers automatically?Not unless you turn it on: Clean up mode defaults to flagging idle or memory-leaking servers for you to confirm (Off/Ask/Automatic), and servers it thinks are leaking are never auto-stopped even in Automatic mode.
Does the prebuilt build work on Intel Macs too?No, the ready-made download only targets Apple Silicon Macs on macOS 14+; Intel users would need to build the app themselves from source with Swift 5.9+.
Does it send my project data anywhere?No. There's no account or analytics SDK, and everything shown comes from your Mac and stays there; the app only goes online to check for Sparkle updates, optionally send anonymous feature-usage pings with no identifiers, and optionally query the GitHub CLI you're already signed into for PR/preview links.
How does it know which coding agent started a server?Session links come from environment variables that Claude Code and Conductor pass to the commands they run, plus Codex's session files, so a server can be traced back to the agent conversation that launched it.
Can I use it from the terminal instead of the menu bar?Yes, the wtp command shows the same server list, details, and Clean up flow in your terminal, and 'wtp list --json' prints the data as JSON for scripts or agents.
What languages does the interface support?The native app's interface is available in English, German, French, Spanish, Simplified Chinese, Hebrew, Japanese, and Ukrainian, switchable instantly from onboarding or Settings.
Will Clean up accidentally kill my database?No, database processes such as Postgres and Redis are protected by default when using Clean up, so they won't be stopped along with idle dev servers.
Size
11.9 MB
Stars
251
Updated
CommitOct 01
Age
9mo
Commits · 90 Days