A Windows system tray application for monitoring and managing local development servers.
- Auto-detection - Automatically discovers running development servers (node.exe, dotnet.exe, and custom processes) and their listening ports
- Graceful shutdown - Sends Ctrl+C signal before force killing, allowing servers to clean up properly
- Start/Stop/Remove - Full control over server lifecycle with persistent state
- Server grouping - Organize servers into named groups for better organization
- Pin mode - Keep the popup window open and drag it anywhere on screen
- Dark theme - Modern "Terminal Luxe" dark UI with glowing status indicators
The application runs in the system tray and shows a popup when clicked:
- Green indicator = server running
- Gray indicator = server stopped
- Group labels displayed as colored badges
- STOP button for running servers
- START/REMOVE buttons for stopped servers
- Windows 10/11
- .NET 8.0 Runtime
git clone https://github.com/gary-gdbsystems/ServerMonitor.git
cd ServerMonitor
dotnet build
dotnet run --project src/WebsiteMonitorAfter building, run:
src\WebsiteMonitor\bin\Debug\net8.0-windows\WebsiteMonitor.exe
- Launch - The app starts minimized to the system tray
- Click tray icon - Opens the server list popup
- Stop a server - Click the STOP button to gracefully terminate
- Start a server - Click START to restart a previously stopped server
- Remove a server - Click REMOVE to remove a stopped server from the list
- Group servers - Right-click a server → "Assign to Group" or "New Group..."
- Pin the window - Click the 📌 button to keep the window open and draggable
Configuration is stored in %APPDATA%\WebsiteMonitor\config.json:
{
"groups": [...],
"assignments": [...],
"monitoredProcessNames": ["node", "dotnet", "Ripples.Api"],
"rememberedServers": [...]
}To monitor additional processes, add their names (without .exe) to the monitoredProcessNames array in the config file.
- Framework: .NET 8.0 WPF
- MVVM: CommunityToolkit.Mvvm
- System Tray: Hardcodet.NotifyIcon.Wpf
- DI: Microsoft.Extensions.DependencyInjection
| Component | Description |
|---|---|
ProcessMonitorService |
Scans for running processes every 2 seconds |
PortDetectionService |
Uses Windows API (GetExtendedTcpTable) to detect listening ports |
ProcessTerminationService |
Handles graceful shutdown with Ctrl+C signal |
ConfigurationService |
Persists groups and server state to JSON |
MIT License - feel free to use and modify as needed.