Stop met zoeken naar processen via lsof en ruim je poorten op
Herkenbare situatie: je start een lokale server en de terminal spuugt een pijnlijk bekende fout Error: listen EADDRINUSE: address already in use :::3000 uit. De worker van gisteren is niet goed afgesloten, een achtergrondproces is vastgelopen, of een Docker-container houdt stilzwijgend de vereiste socket bezet.

Meestal begint hier de routine. Je opent de terminal, herinnert je de lsof -i :3000 syntaxis op macOS of grep netstat -ano op Windows, kopieert de PID, en typt kill -9. Als je een dozijn microservices hebt, verandert de terminal in een grafveld van repetitieve commando's.
Het PortPal-project lost dit kleine maar hardnekkige probleem op. Het is een lichtgewicht desktop-dashboard dat bezette poorten toont, het stack identificeert en redundante processen met één knop doodt.
Wat zit er onder de motorkap en waarom heb je het nodig
De meeste vergelijkbare hulpprogramma's zijn ofwel primitieve wrappers rond systeemcommando's of slepen zware Electron mee, die een gigabyte aan RAM verbruiken om slechts een vijfregelige lijst weer te geven.
De makers van PortPal kozen een aangenamer pad en bouwden de applicatie op Tauri 2, Rust en React 19. Dankzij Rust belast de backend de CPU nauwelijks op de achtergrond en opent het native venster onmiddellijk.
Het hulpprogramma lost verschillende dagelijkse taken op:
- Vindt vastgelopen lokale poorten en haalt procesmetadata op.
- Herkent de omgeving op basis van bestandscontext en standaardpoorten.
- Helpt bij het geforceerd stoppen of herstarten van een proces.
- Visualiseert netwerkverbindingen tussen services als een grafiek.
Belangrijkste functies
Projectherkenning in plaats van droge cijfers
Een standaard systeemmonitor zal je alleen de PID en binairennaam tonen (bijvoorbeeld node of python). Als vijf verschillende Node.js-projecten draaien, is het onmogelijk om ze te onderscheiden op basis van terminaloutput.
PortPal werkt slimmer. Het kijkt niet alleen naar het socketnummer maar scant ook werkdirectories. Het programma zoekt naar manifestbestanden (package.json, Cargo.toml, go.mod) en koppelt het poortnummer aan populaire ontwikkelomgevingen:
3000 -> React / Next.js
5173 -> Vite
4200 -> Angular
8000 -> Django
5432 -> PostgreSQL
6379 -> Redis
Als resultaat toont het paneel duidelijke kaarten: je kunt onmiddellijk zien dat je frontend draait op poort 5173 en de database luistert op 5432.
Interactieve verbindingskaart
Het meest nieuwsgierige detail van de interface is de topologische kaart gebouwd met de D3.js-bibliotheek.

In plaats van een platte tabel krijg je een fysieke simulatie met knooppunten. Knooppunten zijn gekleurd op basis van hun technologieën: blauw voor databases, paars voor Vite-bundlers, groen voor Node.js-backend. De knooppunten kunnen over het scherm worden gesleept, ingezoomd met het muiswiel, en actieve netwerklinks kunnen in realtime worden onderzocht. Als je een systeem met meerdere microservices ontwikkelt, helpt zo'n grafiek snel te begrijpen wie momenteel een verbinding met wie heeft.
Eén-klik beheer en noodknop
Elk proces heeft een beëindigingsknop ernaast. Klik op het kruisje — het proces wordt onmiddellijk beëindigd, de socket wordt vrijgegeven.
Als een poort bezet is door een gecrashte script die PortPal heeft onthouden, blijft er een herstartknop in de buurt. Het voert het commando opnieuw uit in een aparte terminal.
In de interface worden poorten verdeeld in twee groepen: ontwikkelingsprocessen en systeemservices. Het per ongeluk doden van een systeemservice is moeilijker. En voor gevallen waarin je je werkdag hebt afgerond en de hele zoo van draaiende lokale servers tegelijk wilt sluiten, is er een Kill All-knop voor de Dev Frameworks-groep.
Achtergrondwerking en systeemvak
PortPal minimaliseert naar het meldingsgebied. Het tray-pictogram verandert van kleur afhankelijk van de aanwezigheid van poortconflicten. Terwijl het venster gesloten is, registreert een achtergrondthread gebeurtenissen: wanneer een nieuw proces verscheen, welke socket werd vrijgegeven, en waar een verkeerspiek optrad. De geschiedenis met alle timestamps wordt opgeslagen op een apart logboektabblad.
Architectuur en stack
De technische stack van het project ziet er modern uit:
Backend: Rust (sysinfo + системные API сетевого стека)
Runtime: Tauri 2
Frontend: React 19 + TypeScript + Vite 7
Графика: D3.js v7 (симуляция графов на силах)
Стили: Vanilla CSS со стеклянными эффектами
Door het afzien van zware frontend-componentbibliotheken en het gebruik van native Webview is de applicatie lichtgewicht en verbruikt minimale resources tijdens constant socket-scannen.
Hoe te starten
Ontwikkelaars publiceren kant-en-klare builds op de repository-releasespagina:
- Voor Windows zijn
.msien.exebeschikbaar. - Voor macOS zijn builds
.dmgvoorbereid voor Apple Silicon-chips en Intel-processors. - Voor Linux zijn er
.deb-pakketten en het universele.AppImage-formaat.
Als je het hulpprogramma vanaf de bron wilt bouwen of je eigen detectieregels wilt toevoegen, heb je Rust versie 1.70 of hoger en Node.js 18+ nodig:
# Клонируем репозиторий
git clone https://github.com/wisher567/Portpal.git
cd portpal
# Ставим зависимости и запускаем в dev-режиме
npm install
npm run tauri dev
In dev-modus werkt hot reloading van React-componenten via Vite parallel met het compileren van het Rust-deel.
Persoonlijke indrukken
Het project is jong, momenteel in versie 0.2, maar het ziet er al uit als een kant-en-klaar dagelijks hulpmiddel. De basistabel en kaarten werken snel. De D3.js-kaart lijkt aanvankelijk decoratie, maar bij het gelijktijdig debuggen van een API-gateway, database en een paar clients blijkt het echt nuttig.
Kleine nadelen zijn onder andere de beperkte database voor automatische framework-herkenning. Als je een aangepaste service draait op een niet-standaard poort zoals 9211, zal PortPal het als een gewoon proces tonen totdat je de context handmatig bindt. Maar aangezien het project open source is onder de MIT-licentie, is het toevoegen aan de handtekeningenlijst in de code eenvoudig.
Wie zal het nuttig vinden: webontwikkelaars, full-stack engineers, en iedereen die regelmatig een dozijn lokale microservices balanceert en moe is van het onthouden van socket-opruimcommando's.
Gerelateerde projecten