A native macOS menu bar utility for managing local development servers. Stop juggling 10 terminal tabs. Manage your localhost processes directly from the menu bar.
Every web developer knows the pain:
- "Port 3000 is already in use."
- Forgetting which terminal tab is running the backend.
- Orphaned
nodeprocesses draining battery in the background.
DevDock solves this by wrapping your start commands (like npm run dev, go run ., or python app.py) into a clean menu bar interface. It parses logs in real-time to detect ports and ensures processes are actually killed when you press stop.
- Menu Bar Access: Start/Stop servers globally without searching for terminal windows.
- Ghost Process Killer: Automatically detects and kills orphaned processes (e.g., a rogue
nodeprocess blocking port 8080). - Auto-Port Detection: Real-time
stdoutparsing reads logs to find which port a server is running on. - ZSH Integration: Runs commands in a full login shell, so your existing tools (
nvm,bun,cargo,rbenv) work out of the box. - Native Performance: Built with Swift & SwiftUI. Uses < 20MB RAM (unlike Electron apps).
- Process Management: Uses low-level
ProcessandNSPipeAPIs to manage child processes and capture output streams. - Signal Handling: Sends
SIGTERMfor graceful shutdowns and escalates toSIGKILLif processes hang. - System Analysis: Parses
lsofoutput to identify "Ghost Ports" — processes listening on TCP ports that aren't managed by the app. - Sandbox Escape: Intentionally bypasses the App Sandbox to allow full interaction with local development tools and file systems.
DevDock runs commands in a full ZSH shell, so standard virtual environment patterns work perfectly.
Option 1: The Direct Path (Recommended)
Point directly to the python executable inside your venv. This is cleaner and less error-prone.
- Command:
venv/bin/python3 app.py - Django:
venv/bin/python3 manage.py runserver
Option 2: The Activate Chain If you need environment variables from the activate script, chain the commands:
- Command:
source venv/bin/activate && python3 main.py
- Go to the Releases page.
- Download
DevDock.zip. - Unzip and drag
DevDock.appto your Applications folder.
⚠️ Important: Since I am an independent developer (and not paying Apple $99/year), the app is unsigned.When opening it for the first time:
- Right-Click (or Control-Click) the app.
- Select Open.
- Click Open in the warning dialog. (You only need to do this once).
Troubleshooting: If the Right-Click > Open trick doesn't give you an "Open" button, macOS Gatekeeper might have blocked the app completely. Here is the fix:
- Open System Settings (or System Preferences).
- Go to Privacy & Security.
- Scroll down to the Security section.
- You will see a message: "DevDock" was blocked from use because it is not from an identified developer.
- Click the Open Anyway button.
- Enter your Mac password or Touch ID.
- The dialog will pop up one last time, but now it will have an Open button. Click it.
Requirements: Xcode 14+
- Clone this repository.
- Open
DevDock.xcodeprojin Xcode. - Select your Team (Personal Team) in Signing & Capabilities.
- Press
Cmd + Rto build and run.
Feel free to open issues or submit PRs!
- Fork the repo.
- Create your feature branch (
git checkout -b feature/amazing-feature). - Commit your changes.
- Push to the branch.
- Open a Pull Request.
Distributed under the MIT License. See LICENSE for more information.
