Ports

January 20, 2026 · View on GitHub

A lightweight macOS menu bar app for viewing and managing open network ports.

macOS 13+ Swift 6.0+ License: MIT Release

Features

  • Menu bar app - Always accessible from the system tray
  • Smart categorization - Ports grouped by type (dev, web, database, gaming, media, comms)
  • Risk indicators - Visual safety assessment for each port
  • Exposure info - See if ports are local-only (127) or network-exposed (*)
  • One-click kill - Terminate processes directly from the menu
  • Pin favorites - Quick access to important ports
  • Search & filter - Find ports by name or number
  • Launch at login - Start automatically with your Mac
  • Keyboard shortcuts - Quick actions without clicking

Installation

Download

  1. Download the latest .dmg from Releases
  2. Open the DMG and drag Ports to Applications
  3. Launch Ports from Applications
  4. Look for the network icon in your menu bar

Note: If you see "App is damaged" on unsigned releases, run:

xattr -cr /Applications/Ports.app

Build from Source

git clone https://github.com/CorvidLabs/Ports.git
cd Ports
swift build && swift run PortViewer

Usage

  1. Click the network icon in the menu bar
  2. View open ports grouped by category
  3. Click any port row to see details
  4. Hover to reveal kill/pin actions
  5. Right-click for more options

Keyboard Shortcuts

ShortcutAction
⌘RRefresh port list
⌘FFocus search field
EscClear search

Understanding the Display

● 3000 tcp bun       * 92960
│   │   │   │        │   │
│   │   │   │        │   └── Process ID
│   │   │   │        └────── Exposure (* = network, 127 = local)
│   │   │   └─────────────── Process name
│   │   └─────────────────── Protocol
│   └─────────────────────── Port number
└─────────────────────────── Risk indicator

Exposure Indicators

SymbolMeaning
127 (green)Local only - Only accessible from your Mac
* (orange)Network - Accessible from other devices on your network

Risk Levels

ColorLevelDescription
GreenSafeKnown process, localhost only
BlueNormalRecognized application
OrangeAttentionExposed to network
GrayUnknownUnrecognized process

Categories

IconCategoryExamples
🔨devNode.js, Bun, Vite, webpack
🌐webnginx, Apache, Caddy
🗄️databasePostgreSQL, MySQL, Redis, MongoDB
🎮gamingSteam, Discord (gaming features)
▶️mediaSpotify, Plex, VLC
💬commsSlack, Discord, Zoom
🍎macosSystem services

Development

Requirements

  • macOS 13.0+
  • Swift 6.0+
  • Xcode Command Line Tools

Building

# Debug build and run
swift build && swift run PortViewer

# Release build
swift build -c release

# Create DMG
./scripts/build-release.sh 0.3.0

# Create signed DMG (requires Developer ID)
./scripts/build-release.sh 0.3.0 "Developer ID Application: Name (TEAMID)"

Project Structure

Sources/PortViewer/
├── App.swift              # App entry point and state
├── Models/
│   └── PortInfo.swift     # Port data model
├── Services/
│   ├── PortScanner.swift  # lsof parsing
│   ├── ProcessKiller.swift # Process termination
│   ├── UpdateChecker.swift # GitHub release checking
│   └── LaunchAtLogin.swift # Login item management
└── Views/
    ├── MenuBarView.swift  # Main menu bar popup
    ├── PortDetailView.swift # Port detail popover
    ├── SettingsView.swift # Settings window
    └── AboutView.swift    # About tab

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

MIT License - see LICENSE for details.


Made with ❤️ by CorvidLabs