Preview

What FerrumPorts does

The scanners, parsers and kill logic are unit-tested; the window is covered by headless tests.

  • Every listening port

    TCP listeners with port, address, process, full command line, user, start time and working directory. IPv4 and IPv6 sockets of one process share a row, and a UDP toggle adds bound UDP sockets.

  • Grouped by project

    Each process's working directory is mapped to its git root, so you see "shop: 3000 web, 5432 postgres". This project shows only the ports of the project in the strip at the top.

  • Search and refresh

    The table refreshes every 2 s, with Pause and ⌘R. ⌘F searches ports, pids, processes, commands, projects and addresses; 30 finds 3000.

  • Stop a process

    A confirmation shows the full command line, then sends SIGTERM. If the process is still running 2 s later, a second dialog offers SIGKILL. Pids 0 and 1 are refused.

  • Is port N free?

    Type a port and FerrumPorts tries to bind it. If it's taken, you see which process holds it and the nearest free port.

  • Details and hints

    Addresses and exposure (local, one interface or all), every port of the same pid, and hints for about 45 well-known ports such as 5173 Vite or 6379 Redis. Open the project in Ferrum Editor, FerrumGIT or FerrumTerm.

Status: Alpha

FerrumPorts is in alpha, as a first working version. Its tests are automated; the app hasn't been clicked through by hand yet, and the row and detail-pane actions are wired but not hand-tested.

Works today

  • TCP listeners and bound UDP sockets, with process, command, user and working directory
  • Group by project and This project
  • Auto-refresh every 2 s, search, and well-known port hints
  • Stop with SIGTERM, then SIGKILL if needed, after a confirmation
  • Is port N free?, with the nearest free port
  • The project strip, with ⌥⌘O to switch projects

Not built yet

  • Column sorting and keyboard navigation in the table
  • A context menu on rows (actions are on the row icons and in the detail pane)
  • UDP in the free-port check (it tests TCP only)
  • Windows support

Requirements & built with

Install
Ferrum Launcher (free, see Download)
Shell command
fep, turned on in Ferrum Launcher
Platforms
macOS with lsof; Linux with ss (written and tested, not yet run on Linux)
Built with
Rust, GPUI, lsof, ps and ss
Tested with
Automated unit tests and headless window tests, not yet by hand

Without root, lsof on macOS only shows your own processes' sockets, so a port held by root or another user may be missing. On Linux, ss lists them without the pid or process name.