Localhost Port Manager for Windows & Linux - A desktop app for developers to manage local development ports and applications.
- β¨ AI Agent Integration
- 2026 Modernization
- What's New v1.6.2
- Features
- Auto Detection
- Screenshots
- Installation
- Usage
- App Badges
- Themes
- Keyboard Shortcuts
- Testing
- MCP Integration
- Tech Stack
- Version History
- Contributing
Control PortPilot with natural language! Works with Claude Code, Cursor, Windsurf, and any MCP-compatible AI assistant.
"Start the azure-practice-exam-platform app"
"What's running on port 3001?"
"Kill whatever is running on port 3000"
- Glassmorphism design - Frosted glass cards, backdrop blur, semi-transparent backgrounds
- Mobile hamburger menu - Animated 3-bar toggle with full-width dropdown
- Scroll animations - Cards fade in on scroll with staggered delays via IntersectionObserver
- Autoplay carousel - 5s interval with pause on hover/focus
- Strict CSP -
script-src 'self'(no unsafe-inline),frame-src 'none',object-src 'none' - JSON-LD structured data - SoftwareApplication schema for search engines
- sitemap.xml + robots.txt - SEO fundamentals
- 35 ARIA labels - Skip-to-content, semantic HTML, focus-visible styles
prefers-reduced-motion- Disables all animations for users who prefer it- Print styles - Hides nav/carousel for clean printing
- External JS - All JavaScript extracted to
main.js
- Overflow protection - App names, meta, port headers all truncate properly
- Content max-width - Tab content capped at 1400px, settings at 800px
min()grid columns - Prevents grid overflow on narrow windows- Focus-visible styles - 2px cyan outline on all interactive elements
- ARIA roles -
tablist,tab,aria-selectedon navigation tabs - Reduced motion - Respects
prefers-reduced-motionsystem preference - Responsive toolbar - Selection toolbar wraps below 700px
- Scrollbar gutter -
scrollbar-gutter: stableprevents layout shift
- Icon-Based Action Buttons - START/STOP buttons now use intuitive green play (βΆ) and red square (β ) icons for better visual scanning
- Removed Expand All/Collapse All Buttons - Commands now show in tooltips, no need for button clutter
- Comprehensive Auto Detection Documentation - README now includes detailed docs for all 8 language detectors
- Table of Contents - Easy navigation through README sections
- Updated Landing Page - Added 4 new language detector badges (Go, .NET, Rust, Ruby)
- Knowledge Base Updates - Framework details for new language detectors
Complete detection criteria, supported frameworks, port detection methods, and confidence scoring for:
- Node.js (React, Next.js, Vue, Angular, Vite, Express, Fastify)
- Python (FastAPI, Django, Flask)
- Docker (docker-compose, Dockerfile)
- Go (Gin, Fiber, Echo) β¨
- .NET (ASP.NET Core) β¨
- Rust (Actix-web, Rocket, Axum, Warp) β¨
- Ruby (Rails, Sinatra, Rack) β¨
- Static Sites
- CMD Icon with Hover Tooltip - Black CMD badge shows full command path on hover with copy button
- Single-Row Layout - Removed second row, CMD tooltip replaces expandable command display
- Brighter Stats - Improved visibility of Memory, Uptime, and Connections badges
- Cleaner Design - More compact while showing all essential information
- Horizontal Navigation - 13 tabs for easy access to all help sections
- Single Card View - Clean, focused presentation with smooth transitions
- v1.6.2 Documentation - New sections for Port Cards and Port Actions features
- Enhanced Troubleshooting - Added FAQs for new features (N/A values, bind indicators)
- Folder Button - π icon opens app's working directory in file explorer
- Consistent UX - Matches port card folder button functionality
- Quick Access - One-click navigation to project files
- Aligned Keyboard Shortcuts - Fixed grid layout with centered keys
- Wider CMD Tooltips - Increased from 500px to 600px with scrolling support
- Better Text Wrapping - Improved long command path display
- 30-40% More Density - See more apps and ports on screen without scrolling
- Sharp 2px Corners - Modern, clean aesthetic (down from 8px)
- Tighter Spacing - Reduced padding and gaps throughout
- Compact Port Cards - Process and PID combined on one line for space efficiency
- Smaller Fonts - Better information density while maintaining readability
- External Changes Detected - Automatically refreshes when MCP or other tools modify config
- File Watcher - Monitors config file for changes with 100ms debounce
- Toast Notifications - Visual feedback when apps list updates externally
- No Restart Required - Apps added via MCP appear instantly
- Dynamic Height - Window grows/shrinks based on number of apps
- Optimal Sizing - 400px minimum, 1200px maximum
- Seamless Integration - Works with MCP auto-refresh
- Better UX - No wasted space, no excessive scrolling
- 100% Test Coverage - All 11 E2E tests passing
- Integrated Test Servers - HTTP servers on ports 3000, 3001, 8080
- Test Mode Support - Singleton lock bypass for running tests alongside GUI
- Improved Reliability - Fixed visibility issues, better wait strategies
- ConfigStore Null Reference - Fixed critical crash on startup
- Test Infrastructure - All tests now passing reliably
- Load Strategy - Improved app initialization wait logic
- Cross-Platform Builds - Now officially supports Windows AND Linux
- AppImage Package - Universal Linux binary that runs on any distro (98 MB)
- .deb Package - Native Debian/Ubuntu installer (69 MB)
- WSL Testing - Full testing support in Windows Subsystem for Linux
- Platform Auto-Detection - Automatically adapts commands for Windows/Linux
- Stop All Apps from Tray - Right-click tray icon to stop all PortPilot-managed apps without quitting
- Configurable Window Behaviour - Choose whether close button minimises to tray or exits completely
- Smart Process Cleanup - Optionally stop all apps when quitting (only affects PortPilot-managed processes)
- External Process Safety - Never touches processes started outside PortPilot
- One Instance Only - Prevents multiple copies of PortPilot from running simultaneously
- Smart Window Focusing - Launching a second instance automatically focuses the existing window
- No More Confusion - Single system tray icon, clear state management
- One-Click Project Setup - Click "Browse & Auto-detect" in Add App modal to automatically configure any project
- Recursive Scanning - Finds projects up to 2 levels deep in subdirectories
- Package Manager Detection - Auto-detects pnpm, yarn, or npm and uses the correct command
- Smart Port Detection - Only uses explicit port config (no more "everything gets port 3000")
- Works with Monorepos - Finds the actual project inside parent folders (e.g.,
manual-build/inside root)
- Unknown Process Detection - Warns when unknown processes block your app's preferred port
- π Preview Button - Click globe to see what's running on the blocked port
- Kill Blocker Button - Terminate blocking processes with one click
- Toast Notifications - Visual warnings when port conflicts are detected
- Improved Matching - Two-phase algorithm with keyword extraction prevents false positives
- Automatic Project Detection - Scan your project directories to automatically discover Node.js, Docker, Python, and static site projects
- Smart Metadata Extraction - Automatically detects project names, start commands, and ports
- User-Configurable Paths - Add your own scan directories (e.g.,
C:\Projects,C:\Dev) - Confidence Scoring - Shows match confidence (95%, 85%, etc.) for each discovered project
- Bulk Import - Add all discovered projects at once or pick individual ones
- Scan Depth Control - Configure how deep to search (1-5 directory levels)
- Star Your Apps - Click the star (β/β) button to mark frequently-used apps as favorites
- Organized Sections - Apps automatically organised into:
- β Favorites - Starred apps at the top for quick access
- π Other Projects - Non-starred apps below
- Collapsible Sections - Click section headers to expand/collapse
- Persistent State - Section collapse state saved across app restarts
- Bulk Delete - Remove all apps in one click with "Delete All" button
- Safety First - Strong confirmation modal warns before deletion
- Export Reminder - Prompts to export config before deleting
- π Browse & Auto-detect - One-click project setup with recursive scanning and package manager detection
β οΈ Port Conflict Warnings - Visual warnings when unknown processes block app ports, with preview and kill options- π Project Auto-Discovery - Scan directories to automatically find and import dev projects (Node.js, Docker, Python, static sites)
- β Favorites - Star frequently-used apps for quick access with collapsible sections
- π Bulk Operations - Delete all apps at once with safety confirmations
- Port Scanner - Discover all active TCP ports with process details (name, PID, command line)
- One-Click Kill - Free up stuck ports instantly
- App Registry - Register your dev projects with start commands and preferred ports
- Process Management - Start/stop apps directly from PortPilot
- Smart Port Matching - Two-phase algorithm with CWD validation and keyword extraction for accurate detection
- Requirement Badges - Visual indicators for Docker, Node.js, Python, and more
- Docker Integration - Click to start Docker Desktop, with status detection
- IPv4/IPv6 Awareness - Shows which protocol your app is bound to
- System Tray - Minimize to tray, "Stop All Apps" menu option, configurable window behaviour
- Single-Instance Lock - Only one PortPilot runs at a time, focuses existing window
- Multi-Theme Support - 6 themes including TokyoNight, Brutalist, Nord, Dracula
- Knowledge Base - Built-in help with tips, shortcuts, and common ports reference
PortPilot automatically detects 8 different languages and platforms when you use "π Browse & Auto-detect Project" or Project Auto-Discovery. Detection is intelligent, framework-aware, and includes confidence scoring.
Detection Criteria:
package.jsonfile present- Package manager files:
package-lock.json,yarn.lock,pnpm-lock.yaml,bun.lockb
Supported Frameworks:
- React, Next.js, Vue, Angular, Vite
- Express, Fastify, Nest.js
- Gatsby, Nuxt, SvelteKit
Port Detection:
- Reads
package.jsonscripts for port numbers (e.g.,--port 3000) - Checks Vite/Next.js config files
- Checks
.envfiles forPORTvariable
Default Values:
- Port: 3000
- Command: Auto-detected package manager (
pnpm run dev,yarn dev,npm run dev) - Confidence: 90-95%
Detection Criteria:
requirements.txt,pyproject.toml, orPipfilepresent- Python files with common framework imports
Supported Frameworks:
- FastAPI (port 8000)
- Django (port 8000)
- Flask (port 5000)
Port Detection:
- Scans Python files for
uvicorn.run(),app.run()with port arguments - Checks framework-specific config files
Default Values:
- Port: 8000 (FastAPI/Django), 5000 (Flask)
- Command: Framework-specific (
uvicorn main:app,python manage.py runserver,flask run) - Confidence: 85-90%
Detection Criteria:
docker-compose.ymlordocker-compose.yamlpresentDockerfilepresent
Port Detection:
- Parses
docker-compose.ymlfor exposed ports - Reads port mappings (e.g.,
3000:3000,8080:80)
Default Values:
- Port: Extracted from compose file
- Command:
docker compose upordocker-compose up - Confidence: 95%
Detection Criteria:
go.modfile presentmain.gofile present
Supported Frameworks:
- Gin (port 8080)
- Fiber (port 3000)
- Echo (port 1323)
Port Detection:
- Scans
go.modfor framework dependencies - Parses
main.gofor port literals (e.g.,:8080)
Default Values:
- Port: 8080 (Gin), 3000 (Fiber), 1323 (Echo)
- Command:
go run . - Confidence: 80-95%
Detection Criteria:
.csprojfile present.slnsolution file present
Supported Frameworks:
- ASP.NET Core
Port Detection:
- Reads
Properties/launchSettings.jsonforapplicationUrl - Parses port from URLs (e.g.,
https://localhost:5001)
Default Values:
- Port: 5000
- Command:
dotnet run - Confidence: 85-95%
Detection Criteria:
Cargo.tomlfile present
Supported Frameworks:
- Actix-web (port 8080)
- Rocket (port 8000)
- Axum (port 3000)
- Warp (port 3030)
Port Detection:
- Scans
Cargo.tomldependencies for framework - Parses
src/main.rsforbind()orlisten()with port
Default Values:
- Port: Framework-specific (see above)
- Command:
cargo run - Confidence: 85-95%
Detection Criteria:
Gemfilefile presentconfig.rufile presentRakefilepresent
Supported Frameworks:
- Ruby on Rails (port 3000)
- Sinatra (port 4567)
- Rack (port 9292)
Port Detection:
- Checks for
config/application.rb(Rails) - Reads
Gemfilefor framework gems
Default Values:
- Port: 3000 (Rails), 4567 (Sinatra), 9292 (Rack)
- Command:
rails server,ruby app.rb, orrackup - Confidence: 70-95%
Detection Criteria:
index.htmlin root directory- No backend framework files present
Port Detection:
- No port needed (serves HTML directly)
Default Values:
- Port: N/A
- Command: N/A
- Confidence: 80%
Detectors run in priority order (highest to lowest):
- Docker (95) - Most explicit configuration
- Node.js (90) - Very common, well-structured
- Go (85)
- .NET (85)
- Rust (85)
- Ruby (85)
- Python (80) - Lower due to less standardized structure
- Static Sites (60) - Fallback for simple projects
If multiple detectors match, the highest-priority one wins.
| Score | Meaning |
|---|---|
| 95%+ | Exact port found in config file |
| 85-94% | Framework detected, using framework default port |
| 70-84% | Files detected, using language default port |
| <70% | Weak match, manual verification recommended |
Explore all PortPilot features including My Apps management, Active Ports scanner, Knowledge Base, Settings, multiple themes, and more.
Latest Release: v1.6.2
Windows:
- PortPilot-1.6.2-x64.exe - NSIS Installer (72 MB)
- PortPilot-1.6.2-portable.exe - Portable (72 MB)
Linux:
- PortPilot-1.6.2-x86_64.AppImage - Universal Linux (98 MB)
- PortPilot-1.6.2-amd64.deb - Debian/Ubuntu (69 MB)
macOS:
- Build from source (see below) - macOS is supported but not officially tested
# Clone the repo
git clone https://github.com/m4cd4r4/PortPilot.git
cd PortPilot
# Install dependencies
npm install
# Run the app
npm start
# Build for your platform
npm run build # Windows (NSIS installer)
npm run build:linux # Linux (AppImage + .deb)
npm run build:all-platforms # Both Windows and LinuxNote for VSCode/Claude Code users: The app automatically clears the
ELECTRON_RUN_AS_NODEenvironment variable vialaunch.js.
Click "Scan Ports" to discover all listening TCP ports. You'll see:
- Port number (large and prominent!)
- Process name
- PID
- Command line (with clean ellipsis for long paths)
Click the β button to kill any process.
- Click "Add App"
- Click "π Browse & Auto-detect Project"
- Select your project folder (e.g.,
C:\Scratch\MyApp) - PortPilot automatically fills in:
- Name from package.json
- Command with the correct package manager (
pnpm run dev,yarn dev,npm run dev) - Working Directory path
- Preferred Port from config files (if found)
- Review and edit if needed
- Click "Save App"
- Click "Add App"
- Fill in:
- Name: Display name (e.g., "AzurePrep Frontend")
- Command: Start command (e.g.,
npm run dev) - Working Directory: Project folder path
- Preferred Port: The port your app should use (or leave blank to assign later)
- Fallback Range: Alternative ports if preferred is taken (e.g.,
3001-3010)
- Click "Save App"
Now you can start/stop your apps directly from PortPilot with visual countdown feedback!
When a port is blocked by an unknown process:
- You'll see "
β οΈ Port Blocked" status on the app card - Click π Globe button to preview what's running on that port
- Click "Kill Blocker" to terminate the blocking process
- Click "Start" to launch your app
PortPilot automatically detects app requirements and shows badges:
| Badge | Meaning | Detected When |
|---|---|---|
| π³ | Docker app | Command includes docker or compose |
| π¦ | Node.js app | Command includes npm, npx, pnpm, yarn, or bun |
| π | Python app | Command includes python, uvicorn, flask, or django |
| ποΈ | Database | Command includes postgres, mysql, redis, or mongo |
| β‘ | Auto-start | App configured to start on launch |
| π | Remote | App runs on remote server/VPS |
- Yellow pulsing π³ - Docker Desktop is not running (click to start)
- Green π³ - Docker Desktop is running and ready
When apps are running, PortPilot shows v4 or v6 to indicate the IP protocol:
- v4 - Bound to IPv4 (e.g.,
0.0.0.0:3000) - v6 - Bound to IPv6 (e.g.,
[::]:3000)
This ensures the browser button opens the correct URL.
| Theme | Description |
|---|---|
| TokyoNight | Dark blue with cyan/magenta accents (default) |
| Brutalist Dark | Pure black, yellow/cyan, monospace |
| Brutalist Light | White with black borders, yellow highlights |
| Nord | Cool arctic blues |
| Dracula | Purple/pink dark theme |
| Solarized Light | Warm, easy on the eyes |
| Shortcut | Action |
|---|---|
Ctrl+R |
Refresh/Scan ports |
Ctrl+N |
Add new app |
Ctrl+1 |
Ports tab |
Ctrl+2 |
Apps tab |
Ctrl+3 |
Knowledge tab |
Ctrl+4 |
Settings tab |
Escape |
Close modal |
Your config is stored at:
- Windows:
%APPDATA%/portpilot/portpilot-config.json - macOS:
~/Library/Application Support/portpilot/portpilot-config.json - Linux:
~/.config/portpilot/portpilot-config.json
{
"apps": [
{
"id": "app_azureprep",
"name": "AzurePrep",
"command": "npm run web",
"cwd": "C:\\Scratch\\azure-practice-exam-platform",
"preferredPort": 3001,
"fallbackRange": [3002, 3010],
"color": "#84CC16",
"autoStart": false
}
],
"settings": {
"autoScan": true,
"scanInterval": 5000,
"openDevTools": false
}
}# Install dependencies
npm install
# Run in development
npm start
# Run in dev mode (with DevTools if enabled)
npm run dev
# Run all tests
npm run test:all
# Take screenshots
npm run screenshots
# Build installers
npm run build:allPortPilot includes a comprehensive Playwright E2E test suite with 100% test coverage.
# Run all tests (20 tests)
npm run test:all
# Run core functionality tests (11 tests)
npm test
# Run v1.3.0 feature tests (9 tests)
npm run test:v1.3
# Generate UI screenshots
npm run screenshotsTest Coverage:
- β UI rendering and navigation (100%)
- β Port scanning functionality (100%)
- β Port filtering (100%)
- β Port killing (100%)
- β Process cleanup (100%)
- β Settings persistence (100%)
- β DevTools toggling (100%)
- β App configuration editing (100%)
Total: 20/20 tests passing - See TESTING_SUMMARY.md for details.
PortPilot includes an MCP (Model Context Protocol) server that lets any compatible AI assistant manage your development environment with natural language.
Works with any MCP-enabled AI assistant:
- Claude Code (CLI)
- Claude Desktop
- Cursor
- Windsurf
- Cline
# Install MCP server dependencies
cd mcp-server && npm install && cd ..
# Add to Claude Code
claude mcp add portpilot -- node "C:\path\to\PortPilot\mcp-server\index.js"
# Verify connection
claude mcp list
# Should show: portpilot: ... - β ConnectedRestart your AI tool after adding to load the new tools.
Just ask in natural language:
"List all my PortPilot apps"
"Start the azure-practice-exam-platform app"
"What's running on port 3001?"
"Add a new app called 'hero-concepts-preview' at C:\Scratch\azure-practice-exam-platform with command 'npm run web' on port 3001"
"Stop mocksnap"
"Kill whatever is running on port 3000"
"Delete all apps from PortPilot"
"Favorite the AzurePrep app"
| Tool | Description |
|---|---|
list_apps |
List all registered apps |
get_app |
Get details of a specific app |
start_app |
Start an app by name or ID |
stop_app |
Stop a running app |
add_app |
Register a new app |
update_app |
Update app configuration |
delete_app |
Remove an app |
list_running |
Show currently running apps |
scan_ports |
Scan for active ports |
kill_port |
Kill process on a port |
toggle_favorite |
Star/unstar an app |
delete_all_apps |
Remove all apps (requires confirmation) |
See mcp-server/README.md for full documentation.
- Electron 27 - Cross-platform desktop framework
- Node.js - Process management and port scanning
- Playwright - End-to-end testing
- Vanilla JS - No framework bloat, lightweight and fast
- CSS Variables - Powerful theme system
- Native Commands -
netstat(Windows) /lsof(Mac/Linux)
- Landing page modernization (glassmorphism, SEO, accessibility, CSP)
- Electron app UI hardening (overflow, focus styles, ARIA, reduced motion)
- Icon-based START/STOP buttons
- 4 new language detector badges (Go, .NET, Rust, Ruby)
- π Browse & Auto-detect - One-click project setup with recursive scanning
- π¦ Package Manager Detection - Auto-detects pnpm, yarn, npm
β οΈ Port Conflict Warnings - Visual warnings with preview and kill options- π Project Auto-Discovery - Bulk scan and import projects
- β Favorites System - Star apps for quick access
- π Delete All - Bulk delete with safety confirmations
- β¨ Improved Port Matching - Two-phase algorithm with keyword extraction
- β¨ Smart Port Detection - No more hard-coded framework defaults
- 7 new features (DevTools, process cleanup, port conflict detection, etc.)
- 7 UI/UX improvements (larger port numbers, better spacing, improved readability)
- 100% test coverage (20/20 tests passing)
- Comprehensive documentation (CHANGELOG.md, TESTING_SUMMARY.md)
- Fixed port kill functionality
- Added comprehensive test suite
- Initial release with core features
- Multi-theme support
- App registry and management
Contributions are welcome! Please feel free to submit a Pull Request.
MIT Β© Macdara
Built for developers who juggle multiple localhost apps
π Download Latest Release | π Documentation | π Report Issues
