NetCheck - Network Availability Monitor β
A macOS menu bar utility for real-time network connectivity monitoring.
Quick Start β
Prebuilt Universal .app Bundles β
Download NetCheck-<version>.zip (ai.thefocus.netcheck) or NetCheckGeo-<version>.zip (ai.thefocus.netcheck-geo) from GitHub Releases, move to /Applications, and clear Gatekeeper quarantine once:
xattr -dr com.apple.quarantine /Applications/NetCheckGeo.app
open /Applications/NetCheckGeo.appRun or Build from Source β
# Run lightweight NetCheck directly
chmod +x netcheck.swift
./netcheck.swift
./netcheck.swift --once
./netcheck.swift --dump-menu
# Or build both universal NetCheck.app and NetCheckGeo.app
./build.shFeatures β
- π Real-time monitoring - Pings 1.1.1.1 every second
- π Success rate tracking - Rolling 60-second window
- β±οΈ Latency statistics - Current, average, min/max
- π Smart notifications - Alerts for connection state changes
- π Visual history - See recent ping results at a glance
- π― Menu bar display - Shows current state and success rate
Menu Bar States β
| Icon | State | Description |
|---|---|---|
| π’ | Online | 95%+ success rate |
| π‘ | Degraded | 50-95% success rate |
| π΄ | Offline | <50% success rate |
| β³ | Starting | Initial connection |
NetCheck Geo: Connection Atlas β
The location-enabled app includes a dark coverage dashboard, a trip sidebar, success and latency cards, a signal history strip, satellite view, and a fit-route control. Its menu bar panel shows live connectivity and latency.
Build the Geo app (macOS 12 or later, Bundle ID ai.thefocus.netcheck-geo):
./build.sh
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --show-mapNew logs are saved locally in ~/Library/Application Support/NetCheck/trips/, outside Documents/iCloud Drive. Existing ~/Documents/netcheck_trips/ files and the older single CSV log are copied in the background; originals are retained. Use Show in Finder to access the local CSV files.
Monitored Wi-Fi networks β
NetCheck Geo only shows its menu-bar item and records pings while the Mac is connected to a Wi-Fi network in the monitored list. On any other network the item is hidden and tracking pauses. The default monitored SSID is starlink.
Manage the list from Monitored Wi-Fi β Networksβ¦ in the menu, edit ~/Library/Application Support/NetCheck/networks.json, or use the CLI:
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --list-networks
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --add-network "My Hotspot"
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --remove-network "Office-WiFi"
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --monitor-all off
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --always-show on
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --dump-menu
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --version
./NetCheckGeo.app/Contents/MacOS/NetCheckGeo --quitThe CLI works even while the menu-bar item is hidden. --monitor-all on is an escape hatch for tracking every Wi-Fi network. If you only need the menu to configure things while off the monitored networks, use --always-show on: the icon stays visible in a paused state without recording pings; turn it off with --always-show off. Each CSV row includes the current SSID so recordings can be separated by network.
If macOS cannot read the SSID (usually because Location access has not been granted), the item stays visible in a paused state so the menu remains reachable.
Trip parsing and logging run off the UI thread. Parsed files are cached until their size or modification time changes, and routes share overlays by connection state. Routes use recorded GPS positions, with breaks between trips and location gaps longer than two minutes. Apple map imagery still needs a network connection; trip data remains local.
Run the regression checks, optionally benchmarking an existing archive:
bash tests/run.sh
bash tests/run.sh "$HOME/Documents/netcheck_trips"Requirements β
- macOS 10.15+ (Catalina or later)
- Swift 5.0+
- No external dependencies
How It Works β
NetCheck uses the system ping command to test connectivity to Cloudflare's DNS server (1.1.1.1) every second. It maintains a rolling window of the last 60 samples to calculate:
- Success Rate: Percentage of successful pings
- Latency: Response time in milliseconds
- Connection State: Based on success rate thresholds
Menu Options β
When you click the menu bar icon, you'll see:
- Current connection status
- Target being monitored (1.1.1.1)
- Success rate with sample counts
- Latency statistics (current, average, min, max)
- Visual history of recent pings
- Last update time
Part of the Single File Menu Apps project.