A powerful command-line WiFi manager for Windows with colorful UI, emoji support, and multi-platform notifications (Windows Toast & Growl).
- π Network Scanning - Scan available WiFi networks with signal strength
- π Smart Connect - Auto-save credentials and quick reconnect
- π Profile Management - List, create, and delete WiFi profiles
- β Quick Disconnect - Disconnect from current network
- π Status Monitor - Real-time connection status with signal quality
- ποΈ Live Monitoring - Monitor WiFi with change notifications
- π New AP Detection - Automatic notification for new networks
- π Dual Notifications - Windows Toast & Growl support
- πΆ Signal Tracking - Track signal strength changes
- π₯οΈ Multi-Interface - Support multiple WiFi adapters
- π¨ Colorful UI - Rich console colors with emoji icons
- Installation
- Configuration
- Usage
- Commands
- Notifications
- Troubleshooting
- Development
- Contributing
- License
- Support
- Windows 10/11 (64-bit)
- .NET 8.0 Runtime or SDK
- WiFi Adapter enabled
- Optional: Growl for Windows (for Growl notifications)
Option 1: Download Pre-built Binary
# Download from releases page
https://github.com/cumulus13/wifimanager/releases
# Extract and run
wifimgr.exe --helpOption 2: Build from Source
# Clone repository
git clone https://github.com/cumulus13/wifimanager.git
cd wifimanager
# Build
dotnet build -c Release
# Or publish as single executable
dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=true
# Executable will be in:
# bin\Release\net8.0\win-x64\publish\wifimgr.exeWindows 10/11:
- Copy
wifimgr.exetoC:\Tools\(or any folder) - Press
Win + Xβ System β Advanced system settings - Environment Variables β System variables β Path β Edit β New
- Add
C:\Tools\ - Click OK β OK β OK
- Restart terminal
- Run
wifimgrfrom anywhere!
PowerShell Quick Setup:
# Create tools directory
New-Item -ItemType Directory -Force -Path "C:\Tools"
# Copy executable
Copy-Item "wifimgr.exe" -Destination "C:\Tools\"
# Add to PATH (requires admin)
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Tools", [System.EnvironmentVariableTarget]::Machine)wifimgr searches for wifimgr.json or config.json in these locations (priority order):
%USERPROFILE%\.wifimgr\wifimgr.json%USERPROFILE%\.wifimgr\config.json%APPDATA%\.wifimgr\wifimgr.json%APPDATA%\.wifimgr\config.json{ExeDirectory}\wifimgr.json{ExeDirectory}\config.json{ExeDirectory}\.wifimgr\wifimgr.json{ExeDirectory}\config\wifimgr.json
Full Config Example (wifimgr.json):
{
"enableWindowsToast": true,
"enableGrowl": true,
"growlHosts": [
{
"host": "127.0.0.1",
"port": 23053,
"enabled": true,
"name": "Local Growl"
},
{
"host": "192.168.1.100",
"port": 23053,
"enabled": true,
"name": "Remote PC"
},
{
"host": "laptop.local",
"port": 23053,
"enabled": false,
"name": "Laptop (Disabled)"
}
],
"iconPath": "C:\\path\\to\\custom\\icon.png",
"connectionTimeout": 1000,
"notificationPriorities": {
"WiFi Connected": 0,
"WiFi Disconnected": 2,
"WiFi Changed": 0,
"New WiFi Network": 0,
"Signal Changed": -1
},
"stickyNotifications": {
"WiFi Connected": false,
"WiFi Disconnected": true,
"WiFi Changed": false,
"New WiFi Network": true,
"Signal Changed": false
},
"defaultSticky": false
}| Option | Type | Default | Description |
|---|---|---|---|
enableWindowsToast |
boolean | true |
Enable Windows Toast notifications |
enableGrowl |
boolean | true |
Enable Growl notifications |
growlHosts |
array | [{"host":"127.0.0.1","port":23053}] |
List of Growl hosts |
iconPath |
string | null |
Custom icon path for notifications |
connectionTimeout |
number | 1000 |
Growl connection timeout (ms) |
notificationPriorities |
object | see example | Priority per notification type (-2 to 2) |
stickyNotifications |
object | see example | Sticky setting per notification type |
defaultSticky |
boolean | false |
Default sticky if type not configured |
Place icon file in one of these locations (auto-detected):
{ExeDirectory}\icon.png{ExeDirectory}\wifi.png{ExeDirectory}\wifimgr.png{ExeDirectory}\app.ico{ExeDirectory}\assets\icon.png{ExeDirectory}\resources\icon.png
Or specify custom path in config:
{
"iconPath": "C:\\MyIcons\\custom.png"
}Supported formats: PNG, JPG, ICO, GIF, BMP (PNG recommended, max 100KB)
# Show help
wifimgr help
# List WiFi interfaces
wifimgr interfaces
# Switch to interface
wifimgr interface 0
# Scan networks
wifimgr scan
# Connect to network
wifimgr connect MyWiFi
# Disconnect
wifimgr disconnect
# Show status
wifimgr status
# List profiles
wifimgr list
# Delete profile
wifimgr delete OldNetwork
# Monitor mode
wifimgr monitor
# Test notifications
wifimgr test-notifList all available WiFi adapters with their status.
wifimgr interfacesOutput:
π‘ WiFi Interfaces
Found 2 interface(s):
β
[0] π’ Intel(R) Wi-Fi 6 AX201 160MHz (connected)
[1] βͺ Realtek RTL8822CE 802.11ac (disconnected)
π‘ Use 'wifimgr interface <index>' to switch
Icons:
- β = Active interface
- π’ = Connected
- βͺ = Disconnected
Switch to a specific WiFi interface.
wifimgr interface 1Output:
β
Switched to interface: Realtek RTL8822CE 802.11ac
Scan for available WiFi networks with signal strength.
wifimgr scanOutput:
π Scanning on: Intel(R) Wi-Fi 6 AX201 160MHz
Found 8 network(s):
β
πΆ π MyHomeWiFi (95%)
πΆ π NeighborWiFi (82%)
πΆ π FreeWiFi (75%)
πΆ π CoffeeShop (68%)
π‘ π Mobile_AP (45%)
π‘ π OfficeGuest (38%)
π‘ π Hotel_WiFi (25%)
π‘ π PublicWiFi (18%)
Icons:
- β = Currently connected
- πΆ = Strong signal (β₯50%)
- π‘ = Weak signal (<50%)
- π = Secured (password required)
- π = Open (no password)
Connect to a WiFi network. If profile doesn't exist, you'll be prompted for password.
# Connect to saved network
wifimgr connect MyHomeWiFi
# Connect to new secured network
wifimgr connect NewNetwork
# π Enter password: ********
# πΎ Creating profile...
# β
Profile created
# β
Connected to 'NewNetwork'
# Connect to open network
wifimgr connect FreeWiFi
# β
Connected to 'FreeWiFi'Disconnect from current WiFi network.
wifimgr disconnectOutput:
β Disconnecting...
β
Disconnected
Show current WiFi connection status with details.
wifimgr statusOutput:
π WiFi Status
Interface: Intel(R) Wi-Fi 6 AX201 160MHz (connected)
Status: β
Connected
Network: MyHomeWiFi
Signal: πΆ 95%
Security: π Secured
When disconnected:
π WiFi Status
Interface: Intel(R) Wi-Fi 6 AX201 160MHz (disconnected)
β οΈ Not connected on active interface
π‘ Found connection on: Realtek RTL8822CE 802.11ac
Use 'wifimgr interface 1' to switch
List all saved WiFi profiles.
wifimgr listOutput:
π Saved WiFi Profiles
Found 5 profile(s):
πΉ MyHomeWiFi
πΉ OfficeWiFi
πΉ CafeWiFi
πΉ AirportWiFi
πΉ HotelGuest
Delete a saved WiFi profile.
wifimgr delete OldNetworkOutput:
ποΈ Deleting profile 'OldNetwork'...
β
Profile 'OldNetwork' deleted
Start real-time WiFi monitoring with notifications.
wifimgr monitorFeatures:
- β Connection/disconnection detection
- π New network discovery
- ππ Signal strength changes
- π Desktop notifications
- π Network switching detection
Output:
ποΈ WiFi Monitoring Mode
Monitoring: π’ Intel(R) Wi-Fi 6 AX201 160MHz
Press Ctrl+C to stop...
β
Currently connected to 'MyHomeWiFi' (95%)
π Scanning for networks...
Found 8 network(s):
πΆ π MyHomeWiFi (95%)
πΆ π NeighborWiFi (82%)
πΆ π FreeWiFi (75%)
...
[Events will appear here in real-time]
π Signal: 95% β 88% (MyHomeWiFi)
π New network: 'MobileHotspot' (67%)
π Switched from 'MyHomeWiFi' to 'OfficeWiFi'
β Disconnected from 'OfficeWiFi'
β
Connected to 'MyHomeWiFi' (92%)
Press Ctrl+C to stop monitoring
Test notification systems (Windows Toast & Growl).
wifimgr test-notifOutput:
π Testing Notifications
Testing Windows Toast...
Testing Growl (2 host(s))...
β
Growl test sent to 127.0.0.1:23053 (Local Growl)
β
Growl test sent to 192.168.1.100:23053 (Remote PC)
β
Notification test completed
π Icon: C:\Tools\wifimgr.png
If Growl is not available:
β οΈ Growl is not available
π‘ To enable Growl:
1. Install Growl for Windows
2. Make sure it's running
3. Enable GNTP in Growl settings (default port 23053)
4. Configure in wifimgr.json
Automatic - Shows for:
- WiFi Connected
- WiFi Disconnected
- WiFi Network Changed
- New WiFi Network Detected
- Signal Strength Changes (β₯10%)
Requirements:
- Windows 10/11
- Notifications enabled in Settings β System β Notifications
Features:
- Native Windows 10/11 style
- Action Center integration
- Custom icon support
- Auto-dismiss or sticky
Multiple Hosts Support - Send to:
- Local Growl (127.0.0.1)
- Remote PCs over network
- Multiple Growl instances
Configuration:
{
"growlHosts": [
{
"host": "127.0.0.1",
"port": 23053,
"enabled": true,
"name": "Local"
},
{
"host": "192.168.1.100",
"port": 23053,
"enabled": true,
"name": "Desktop PC"
}
]
}Priority Levels:
-2= Very Low-1= Low0= Normal1= High2= Emergency
Sticky Notifications:
{
"stickyNotifications": {
"WiFi Disconnected": true, // Stays until dismissed
"WiFi Connected": false, // Auto-dismiss
"New WiFi Network": true // Stays until dismissed
}
}Cause: WiFi adapter not detected or disabled
Solutions:
- β Enable WiFi adapter in Device Manager
- β Run as Administrator
- β
Restart Windows WLAN service:
net stop wlansvc net start wlansvc
- β Check if WiFi drivers are installed
Windows Toast:
- β Check Settings β System β Notifications β Enable notifications
- β Enable notifications for "WiFiManager" app
- β Disable Focus Assist / Do Not Disturb
- β Run as Administrator
Growl:
- β Install Growl for Windows
- β Make sure Growl is running (check system tray)
- β Enable GNTP in Growl Settings
- β Set port to 23053 (default)
- β Check firewall (allow port 23053)
- β For remote: Enable network listener in Growl
Solutions:
- β Disable Airplane Mode
- β Wait 5-10 seconds after enabling WiFi
- β
Try
wifimgr scanmultiple times - β Move closer to access point
- β Check if other devices can see networks
- β
Restart WiFi adapter:
netsh interface set interface "Wi-Fi" disabled netsh interface set interface "Wi-Fi" enabled
Solutions:
- β Check password is correct
- β
Delete old profile:
wifimgr delete NetworkName - β Try connecting again
- β Check network security type (WPA2/WPA3)
- β Network might be hidden (try SSID exactly as shown)
- β Router might have MAC filtering enabled
Solutions:
- β Place icon file in exe directory
- β Use PNG format (recommended)
- β Keep file size < 100KB
- β Check icon path in config
- β Verify file permissions
Solutions:
- β
Use
wifimgr interfacesto see all adapters - β
Switch to connected interface:
wifimgr interface 0 - β The active interface is marked with β
Enable Verbose Logging:
# Set environment variable
set WIFIMGR_DEBUG=1
wifimgr monitorCheck Windows Event Viewer:
eventvwr.msc β Windows Logs β System
Filter by: WLAN-AutoConfig
Test WiFi Adapter:
# PowerShell
Get-NetAdapter | Where-Object {$_.InterfaceDescription -like "*Wi-Fi*"}WiFiManager/
βββ Program.cs # Entry point & CLI routing
βββ WiFiManagerCLI.cs # CLI commands implementation
βββ WiFiService.cs # Native WiFi API wrapper
βββ NotificationService.cs # Toast & Growl notifications
βββ NotificationConfig.cs # Configuration management
βββ ColorConsole.cs # Console color utilities
βββ WiFiManager.csproj # Project configuration
βββ README.md # Documentation
Debug Build:
dotnet buildRelease Build:
dotnet build -c ReleaseSingle File Executable:
dotnet publish -c Release -r win-x64 --self-contained false -p:PublishSingleFile=trueSelf-Contained (no .NET required):
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true- .NET 8.0 - Modern .NET runtime
- C# 12 - Latest C# features
- Native WiFi API - Windows wlanapi.dll
- P/Invoke - Interop with Windows APIs
- Windows.UI.Notifications - Toast notifications
- GNTP Protocol - Growl notifications
- TCP Sockets - Network communication
WiFiService.cs - Low-level WiFi operations
- P/Invoke declarations
- WLAN API wrappers
- Interface management
- Network scanning
- Profile CRUD operations
NotificationService.cs - Notification handling
- Windows Toast via PowerShell
- Growl GNTP protocol
- Multiple host support
- Icon embedding (base64 & file path)
NotificationConfig.cs - Configuration
- JSON deserialization
- Multi-location search
- Priority & sticky settings
- Auto-save location tracking
Contributions are welcome! Here's how:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
- β Follow existing code style
- β Add comments for complex logic
- β Test on Windows 10 & 11
- β Update README if needed
- β Keep commits clean and descriptive
Create an issue with:
- Windows version
- .NET version
- WiFi adapter model
- Steps to reproduce
- Error messages / screenshots
- Expected vs actual behavior
MIT License
Copyright (c) 2024 Hadi Cahyadi
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
If you find this project helpful, consider supporting:
Hadi Cahyadi
- π§ Email: cumulus13@gmail.com
- π GitHub: @cumulus13
- π Issues: GitHub Issues
- π¬ Discussions: GitHub Discussions
Made with β€οΈ and β by Hadi Cahyadi
Star β this repo if you find it useful!