A lightweight, real-time network speed monitoring application for macOS. Displays upload and download speeds directly in the menu bar with minimal system overhead and zero configuration required.
Network Speed Monitor is a macOS menu bar utility that continuously monitors your network bandwidth. It shows real-time upload and download speeds in a clean, non-intrusive format. Launch it once and it automatically starts on every login—no setup required.
- 📊 Real-time Monitoring – Updates every second
- 🎯 Menu Bar Display – Compact format: ↓ xx.x MB/s | ↑ xx.x MB/s
- ⚡ Ultra-Lightweight – ~20-30 MB memory, <1% CPU usage
- 🚀 Auto-Start on Login – Launches automatically at boot
- 🔧 Zero Configuration – Works out of the box
- 🛡️ Memory Safe – Pure Swift, no unsafe code
| Requirement | Details |
|---|---|
| macOS Version | 11.0 (Big Sur) or later |
| Architecture | Intel or Apple Silicon (M1+) |
| Build Tools | Swift 5.5+ (only needed for building) |
Download the latest NetworkMonitor.app.zip from the Releases page.
# Extract and launch
unzip NetworkMonitor.app.zip
open NetworkMonitor.app# Clone the repository
git clone https://github.com/SNGWN/Network-Speed.git
cd Network-Speed
# Build release version
swift build -c release
# Create .app bundle
bash create_app_bundle.sh
open NetworkMonitor.app# One-line build + bundle creation
bash create_app_bundle.shThis generates:
NetworkMonitor.app– Ready to launchNetworkMonitor.app.zip– Ready to distribute
- Launch the app (once, or it will auto-start on next login)
- Monitor network speed in the menu bar (top-right corner)
- Quit by right-clicking the menu bar icon and selecting "Quit" (or press Cmd+Q)
↓ 125.4 MB/s | ↑ 45.2 MB/s
- ↓ = Download speed
- ↑ = Upload speed
The app automatically configures auto-start on first launch.
LaunchAgent Location:
~/Library/LaunchAgents/com.networkmonitor.autostart.plist
To disable auto-start:
launchctl unload ~/Library/LaunchAgents/com.networkmonitor.autostart.plistTo re-enable auto-start:
launchctl load ~/Library/LaunchAgents/com.networkmonitor.autostart.plistTo verify auto-start is active:
launchctl list | grep networkmonitorNetworkUsageMonitor/
├── NetworkUsageMonitorApp.swift # App entry point, AppDelegate
├── Managers/
│ ├── NetworkMonitor.swift # Executes nettop and parses output
│ └── NetworkViewModel.swift # Observable state, timer management
├── Models/
│ └── NetworkSpeed.swift # Speed data structure
├── Views/
│ └── MenuBarView.swift # Menu bar UI
└── Utilities/
├── FormatUtility.swift # Speed formatting (e.g., "125.4 MB/s")
└── NetworkMonitorConstants.swift # Configuration values
- Data Collection – Executes macOS
nettoputility every second - Parsing – Extracts upload/download bytes from nettop output
- Calculation – Computes speed in MB/s or KB/s based on throughput
- Display – Updates menu bar with formatted speed string
- Cleanup – Properly manages process lifecycle and memory
| Metric | Value |
|---|---|
| Memory Usage | 20-30 MB |
| CPU Usage | <1% (average) |
| Startup Time | <100 ms |
| Update Latency | <100 ms |
| Measurement Accuracy | ±1-2% |
swift build
.build/debug/NetworkUsageMonitorswift build -c release
.build/release/NetworkUsageMonitor# Create directory structure
mkdir -p NetworkMonitor.app/Contents/MacOS
# Copy compiled binary
cp .build/release/NetworkUsageMonitor NetworkMonitor.app/Contents/MacOS/NetworkMonitor
# Make executable
chmod +x NetworkMonitor.app/Contents/MacOS/NetworkMonitorSolution:
- Check if LaunchAgent exists:
ls ~/Library/LaunchAgents/com.networkmonitor.autostart.plist - If missing, launch the app once to create it
- Verify:
launchctl list | grep networkmonitor
Cause: Normal during startup or network interruptions
Solution:
- Wait a few seconds for the app to initialize
- Check internet connectivity
- App will automatically recover
Cause: Can be normal during first 10 seconds of operation
Solution:
- Wait 10-15 seconds after startup
- If persists, restart the app
- Report issue if usage stays above 2%
Solution:
- Right-click the app
- Select "Open" (not double-click)
- Click "Open" in the security dialog
Network-Speed/
├── Package.swift # Swift package manifest
├── Sources/
│ └── NetworkUsageMonitor/ # Main source code
├── Tests/
│ └── NetworkUsageMonitorTests/ # Test suite
├── create_app_bundle.sh # Bash script to create .app bundle
├── Info.plist # App metadata
├── README.md # This file
└── LICENSE # MIT License
| Component | Purpose | Source |
|---|---|---|
| Foundation | Core library | Swift stdlib |
| SwiftUI | User interface | Apple |
| AppKit | Menu bar integration | Apple |
| Combine | Reactive programming | Apple |
| nettop | Network data collection | macOS built-in |
No external package dependencies – uses only Apple frameworks.
- Real-time only – No historical graphs or data storage
- System-wide speeds – No per-app breakdown (intentional design choice)
- macOS only – Requires macOS 11.0 or later
- No configuration – Settings are fixed for simplicity
- Language: 100% Swift
- Lines of Code: ~280 (core functionality)
- Memory Safety: No unsafe code blocks
- Error Handling: Comprehensive try-catch patterns
- Resource Management: Proper cleanup of nettop process
MIT License – See LICENSE for details.
You are free to use, modify, and distribute this software.
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch (
git checkout -b feature/your-feature) - Commit your changes (
git commit -am 'Add feature') - Push to the branch (
git push origin feature/your-feature) - Open a Pull Request
Found a bug or have a suggestion? Please open an issue with:
- macOS version (e.g., Sonoma 14.2)
- Mac hardware (Intel/M1/M2/M3/etc)
- Steps to reproduce the issue
- Expected vs actual behavior
- Log output if available
✅ Production Ready
Tested and verified on:
- macOS 11 (Big Sur) – Intel
- macOS 12 (Monterey) – M1
- macOS 13 (Ventura) – M1/M2
- macOS 14 (Sonoma) – M1/M2/M3
Made with Swift for performance, reliability, and minimal system overhead.