A native macOS menu bar utility for seeing what is listening on your Mac.
🇨🇳 简体中文 · 🇺🇸 English
- 🔎 Find listeners at a glance. Scan TCP
LISTENendpoints and UDP sockets with a concrete local port, then see their exposure, protocol, port, PID, process or app name, executable path, command line, inferred source, and resident memory when available. - 🧩 Understand which process owns each port. Related helper processes are grouped under their owning macOS app, while command-line listeners remain separated by PID. Current-user processes are also distinguished from system or other-user processes.
- 🔗 Open services and copy what you need. Open eligible loopback TCP services at
http://localhost:<port>, or copy URLs, ports, PIDs, paths,lsofcommands, process details, and complete listener reports. - 🔒 Share diagnostics more safely. Choose between full and redacted command-line copy actions to omit sensitive arguments when needed.
- 🛠️ Inspect and manage processes. Reveal executables in Finder, view native app or executable icons, quit or force-quit apps, and send
SIGTERMorSIGKILLto individual processes, with confirmation for destructive or higher-risk actions. - 🙈 Ignore persistent noise. Ignore listeners by stable app or executable identity, then restore individual items or all ignored items from the menu.
- 🔄 Keep the list current. Refresh whenever the menu opens, use an optional 1-, 2-, or 5-second interval, disable automatic refresh, or check for updates manually through Sparkle.
- 🚀 Launch at login. Start ListenBar automatically after signing in, with a direct link to macOS Login Items settings when approval is required.
- 🍎 Truly native. ListenBar's app business code is 100% Swift, built with SwiftUI and The Composable Architecture (TCA). It uses
MenuBarExtraandLSUIElementinstead of an Electron runtime or embedded WebView. - 🪶 Ultra-lightweight software. ListenBar stays focused on inspecting local listeners without shipping an entire browser engine.
- 🎨 At home on macOS. The interface automatically follows Light and Dark Mode. Native SwiftUI menu controls adopt the system-provided Liquid Glass appearance where appropriate on macOS 26, while macOS 14 and macOS 15 retain their own native styling. ListenBar does not simulate Liquid Glass with custom visual effects. Releases are built with Xcode 26.5.
- macOS 14 Sonoma or later
- Apple Silicon or Intel Mac (Universal Binary)
The brew trust command first shipped with Homebrew 5.1.15 on June 3, 2026. In Homebrew 5.1.15 through 5.x, trust was required only when HOMEBREW_REQUIRE_TAP_TRUST=1 was set. Starting with Homebrew 6.0.0 on June 11, 2026, casks from non-official taps require explicit trust by default.
brew tap ygsgdbd/tap
brew trust --cask ygsgdbd/tap/listenbar
brew install --cask listenbarThis trusts only the third-party listenbar cask, not the entire tap. Homebrew stores the trust entry, so you normally need to run the trust command only once. The custom cask also includes a postflight step that removes the macOS quarantine attribute from ListenBar after installation. ListenBar is still unsigned and not notarized, and brew trust is not an official Gatekeeper certification. See Homebrew's Tap Trust documentation for details.
Homebrew 5.1.14 and earlier do not have brew trust and do not require it:
brew tap ygsgdbd/tap
brew install --cask listenbarIf brew trust reports Unknown command: trust, skip that command or run brew update to upgrade Homebrew.
Update Homebrew installations with:
brew upgrade listenbar- If Homebrew reports
Refusing to load cask ... from untrusted tap, runbrew trust --cask ygsgdbd/tap/listenbar, then retry the installation or upgrade. - If
brew doctorreports thatygsgdbd/tapis untrusted, trust only the ListenBar cask with the command above; trusting the entire tap is not required. - If an existing installation stops upgrading after Homebrew is updated to 6.0.0 or later, trust the cask and retry
brew upgrade listenbar. - To trust every current and future formula, cask, and external command in the tap, use
brew trust ygsgdbd/tap. This grants broader access and is not the recommended option.
- Download
ListenBar-macOS-universal.zipfrom the latest GitHub Release. - Unzip it and move
ListenBar.appto/Applications.
Current release builds are unsigned and not notarized. macOS may therefore block the first launch even when the app was downloaded from the official release page.
- In Finder, Control-click or right-click
ListenBar.app, choose Open, then choose Open again. - If macOS still blocks it, open System Settings → Privacy & Security, find the ListenBar warning, click Open Anyway, and confirm Open.
Only bypass Gatekeeper when you obtained the app from this repository's official GitHub Releases and trust the download.
Release assets include a SHA-256 checksum, and Sparkle updates are protected by an EdDSA signature in appcast.xml. Releases published after this workflow change also include a GitHub Artifact Attestation for ListenBar-macOS-universal.zip; v0.4.0 and earlier releases predate this attestation support.
Production releases must use an annotated vX.Y.Z tag whose commit is already contained in the protected main branch:
git tag -a vX.Y.Z -m "ListenBar vX.Y.Z"
git push origin vX.Y.ZAfter downloading an attested release zip, verify its build provenance with GitHub CLI:
RELEASE_TAG=v0.5.0
SOURCE_DIGEST=$(gh api repos/ygsgdbd/ListenBar/commits/$RELEASE_TAG --jq .sha)
gh attestation verify ListenBar-macOS-universal.zip \
--repo ygsgdbd/ListenBar \
--signer-workflow ygsgdbd/ListenBar/.github/workflows/release.yml \
--source-ref "refs/tags/$RELEASE_TAG" \
--source-digest "$SOURCE_DIGEST"The GitHub Actions web UI only dispatches workflows from branches, which this release workflow intentionally rejects. To manually retry a release, start a new run from the target tag with GitHub CLI:
RELEASE_TAG=v0.5.0
gh workflow run release.yml \
--ref "$RELEASE_TAG" \
-f release_tag="$RELEASE_TAG"The --ref value and release_tag input must name the same tag. You can also dispatch the workflow through the GitHub API with that tag as the request ref.
The XCTest suite covers reducer behavior, settings persistence, ignored listener identities and filtering, login item management, port parsing and grouping, process metadata, menu presentation, screenshot fixtures, and Sparkle configuration.
Requirements: Xcode 26.5, Homebrew, just, SwiftFormat, and Tuist.
Install the development tools manually, then enable the repository-managed Git hook and run the complete local validation:
brew install just swiftformat tuist
swiftformat --version # Must be 0.62.1
just setup
just checkjust setup only checks the installed tools and configures core.hooksPath; it never installs or upgrades software. If Homebrew no longer provides SwiftFormat 0.62.1, install that exact version from the official release.
just check is the local acceptance entry point. It checks Swift formatting and runs the complete XCTest suite with the repository-managed build and test parameters.
Before each commit, the hook formats staged Swift files. When formatting changes are required, the commit stops so you can review the diff, stage the updated files, and retry. Partially staged Swift files are not modified automatically; stage or stash the remaining edits, or run just format manually. Run just --list to see all available development commands.

