Native macOS utility
See which server you left running and what port it's holding — then how much space node_modules is eating.
Finds Node processes left running in the background and the ports they are holding, with a button to free them. It also scans a folder and shows every node_modules with its size and last-used date, so you can delete the ones you no longer need.
Port 3000 is taken and you don't know by which process. The alternative is lsof -i :3000 followed by kill, every single time.
node_modules does not clean itself up. It accumulates in every project you have ever worked on, and Finder will not tell you which ones are stale and which are in use.
From opening the app to a freed port — every step runs locally, on your Mac.
You got Error: listen EADDRINUSE: address already in use :::3000 and don't know which process is holding the port. PortClear solves that at a glance — and it also cleans up the dozens of forgotten node_modules folders scattered across old projects.
PortClear finds the Node processes on your Mac — Next.js, Vite, NestJS, nodemon, npm — with their PID, the ports they are listening on, how long they have been up and how much memory they use. You can stop them from there, instead of hunting through a terminal for whatever is holding port 3000.
The second module solves a related problem: the dozens of forgotten node_modules folders in directories you have not opened in months, each one hundreds of megabytes. PortClear scans a folder you choose and shows every node_modules it finds: how much space it takes, when it was last accessed, and which project it belongs to. Sort them, group them by project, reveal them in Finder, and delete them — one at a time or in bulk, with the reclaimed space confirmed.
The third shows the space distribution across projects, so you can see at a glance where it accumulated.
Finds Node processes left running: PID, ports, uptime, memory
Stop them straight from the app, no terminal needed
Recursive scan with size and last-access date per folder
Grouped by project, with subtotals and sortable columns
Delete one or many, with the reclaimed space confirmed up front
A chart of how space is distributed across projects
Skips hidden directories and symlinks, so it cannot loop
Runs locally — no account, no telemetry, no external dependencies
Five things you can verify directly in the app's own code.
Every kill confirmation lists the targeted processes — kind, pid, uptime, port, working directory — and the exact reason each was flagged, before you press stop.
Sources/PortClear/UI/PortsView.swift — commit 404791b
Scanning, deleting and licence checking all run on your own Mac: there is no network call anywhere in the app's code, so no telemetry and no account. The one connection it can make is an update check, started by you from the menu — automatic checking is off by default.
Sources/ — zero URLSession, NWConnection or socket; Sparkle in App/Updater.swift, SUEnableAutomaticChecks = false
A `node_modules` it has found is not walked into, and a cancelled scan stops exactly where it was — both pinned by tests that work on real folders, created and removed inside the test, not on mocks.
Tests/PortClearTests/ScannerTests.swift — neverDescendsIntoAFoundNodeModules, aCancelledScanStopsEarly
Deleting a node_modules that is a symbolic link removes only the link; the target folder stays intact — verified, in both deletion modes.
Tests/PortClearTests/DeletionTests.swift
The shipped build runs natively on Intel and Apple Silicon, with no Rosetta emulation.
`lipo -archs` on PortClear.app inside the served DMG — x86_64 and arm64; Package.swift:10
The build you download here is signed with a Developer ID and notarised by Apple — it opens on an ordinary double-click the first time, with no right-click and no macOS warning.
`spctl -a -t exec` on PortClear.app inside the served DMG → accepted, Notarized Developer ID (83S677R8NP)
A tool that states what it cannot do is easier to trust about what it can.
Checked against the served build — the app and its Info.plist inside PortClear 0.3.2, 11 September 2026 — not a promise of what a later version adds.
The detector is a heuristic and can be wrong — which is why every kill confirmation shows the process (kind, pid, uptime, folder) and the exact reason it was flagged, not just a "stop everything" button.
No. There is no network call in the code, at any stage. Everything you see comes from `ps` and `lsof`, run locally, on your Mac.
Only the link is deleted; the target folder stays intact. It is marked separately in the list and counts as 0 B reclaimable, so the number cannot mislead you.
It can report them if they hold a known port, but it cannot stop them — the app only stops Node-ecosystem processes. For the rest, `lsof -i :PORT` is still the way.
No. The app is signed with a Developer ID and notarised by Apple, so an ordinary double-click opens it the first time — no right-click, and no warning from macOS.
A native macOS app — no browser, no middleman server.
+ VAT, calculated at checkout for your country
Open the app, go to Preferences → Licence and paste the key from the email.