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…

这是什么?WhatThePort 是一款用 Swift 原生编写的 macOS 菜单栏应用,显示 Mac 上运行的每个本地开发服务器:项目名、端口、git 分支、运行时长和资源占用,让你无需在终端窗口里翻找就能打开、重启或停止它们。
这是菜单栏应用,还是驻留在 Dock 里?它是只在菜单栏显示的应用,没有 Dock 图标,通过 Option-Command-P 快捷键打开;它还附带一个名为 wtp 的配套终端工具,可以在你的 shell 中显示同样的服务器列表。
运行它需要什么?预构建下载版需要搭载 macOS 14 或更高版本的 Apple Silicon Mac;如果你想自己编译,则需要 Swift 5.9 或更新版本。
它会自动停止泄漏的服务器吗?除非你主动开启:Clean up 模式默认只标记空闲或内存泄漏的服务器,由你确认(Off/Ask/Automatic 三档);即使处于 Automatic 模式,被它认为在泄漏的服务器也绝不会被自动停止。
预构建版本在 Intel Mac 上也能用吗?不能,现成的下载版只面向 macOS 14+ 的 Apple Silicon Mac;Intel 用户需要用 Swift 5.9+ 从源码自行构建应用。
它会把我的项目数据发送到别处吗?不会。没有账号系统,也没有分析 SDK,显示的一切都来自你的 Mac 并留在本地;该应用只会在以下情况联网:检查 Sparkle 更新、可选地发送不含任何标识符的匿名功能使用情况 ping,以及可选地查询你已登录的 GitHub CLI 以获取 PR/预览链接。
它怎么知道是哪个编程智能体启动了服务器?会话关联来自 Claude Code 和 Conductor 传给自己所运行命令的环境变量,再加上 Codex 的会话文件,因此可以把一台服务器追溯到启动它的智能体对话。
我可以不用菜单栏、改在终端里使用它吗?可以,wtp 命令能在你的终端里显示同样的服务器列表、详情和 Clean up 流程,而“wtp list --json”则以 JSON 形式输出数据,方便脚本或智能体使用。
界面支持哪些语言?原生应用界面提供英语、德语、法语、西班牙语、简体中文、希伯来语、日语和乌克兰语,可在引导流程或设置中即时切换。
Clean up 会误杀我的数据库吗?不会,使用 Clean up 时,Postgres 和 Redis 等数据库进程默认受到保护,不会被连同空闲开发服务器一起停掉。
Size
11.9 MB
Stars
251
Updated
CommitOct 01
Age
9mo
Commits · 90 Days