MacNTop
A macOS menu bar system monitor with retro CRT terminal aesthetics.
![]() |
![]() |
| Menu Bar Popover | Floating Window |
Features
Live Monitoring
- CPU Usage - Per-core usage with sparkline graphs
- Memory - Active, wired, compressed breakdown with segmented bar
- Network - Upload/download speeds with real-time sparklines
- Disk - Volume usage and I/O speeds
- Processes - Top 10 by CPU or memory usage
Retro CRT Aesthetics
- Phosphor glow effects on text
- Scanline overlay
- Vignette darkening at edges
- Multiple color themes
Themes
- Retro Green - Classic green phosphor CRT
- Amber CRT - Warm amber terminal
- Blue Ice - Cool blue tones
- Matrix - Bright green on black
- Dracula - Purple/pink dark theme
- Light - Light mode for daytime
Installation
Requirements
- macOS 14.0 (Sonoma) or later
- Swift 6.0+ / Xcode 16+ (for building)
Build from Source
git clone https://github.com/CorvidLabs/MacNTop.git
cd MacNTop
swift build -c release
The built app will be at .build/release/MacNTop.
Run
swift run
Or after building:
.build/release/MacNTop
Usage
Menu Bar
- Left-click - Toggle the dashboard popover
- Right-click - Open context menu
Context Menu Options
- Open in Window - Detach dashboard to a floating window
- Theme - Select from 6 color themes
- About MacNTop - Version info
- Quit MacNTop - Exit the app
Window Mode
The dashboard can be opened in a standalone floating window that stays on top:
- Right-click β "Open in Window"
- Window persists across spaces
- Receives live updates like the popover
- Right-click β "Close Window" to return to popover-only mode
Dashboard
- CPU/MEM toggle in process list - Click to sort by CPU or Memory
- Scroll to see all sections
Keyboard Shortcuts
- βW - Toggle window mode (from context menu)
- βQ - Quit (from context menu)
Architecture
MacNTop/
βββ Sources/MacNTop/
β βββ App/
β β βββ AppDelegate.swift # Entry point
β β βββ Application+State.swift # AppState theme management
β βββ MenuBar/
β β βββ StatusBarController.swift # NSStatusItem + popover + window
β β βββ StatusBarIconRenderer.swift
β βββ Models/ # Sendable data models
β βββ Services/ # Actor-based monitors
β βββ Core/
β β βββ MetricsCoordinator.swift # Orchestrates collection
β βββ Views/
β β βββ DashboardWindow.swift # Standalone floating window
β β βββ DashboardView.swift # Main dashboard layout
β β βββ ... # Component views
β βββ Utilities/
β βββ ByteFormatter.swift
βββ Tests/MacNTopTests/ # Unit tests
βββ Package.swift
Key Technologies
- Swift Concurrency - Actors for thread-safe monitoring
- AppKit - Native macOS UI
- AppState - State management and persistence
- IOKit - Low-level system metrics
System APIs Used
| Metric | API |
|---|---|
| CPU | host_processor_info() |
| Memory | host_statistics64(HOST_VM_INFO64) |
| Network | getifaddrs() with if_data |
| Disk | statfs(), IOKit IOBlockStorageDriver |
| Processes | proc_listallpids(), proc_pidinfo() |
Dependencies
- AppState - Thread-safe state management
Configuration
Theme selection is persisted automatically via UserDefaults.
Development
Code Style
This project follows CorvidLabs Swift Conventions:
- Explicit access control on all declarations
- K&R brace style
- No force unwrapping
- async/await for concurrency
- Sendable conformance for cross-boundary types
Building Documentation
swift package generate-documentation
Running Tests
swift test
Privacy
MacNTop runs entirely locally. No data is collected or transmitted.
Known Limitations
- Requires distribution outside App Store (uses restricted APIs)
- Disk I/O monitoring requires IOKit access
- Process monitoring limited to current user's processes
Contributing
- Fork the repository
- Create a feature branch
- Follow CorvidLabs Swift conventions
- Submit a pull request
License
MIT License - see LICENSE for details.
Credits
Built by CorvidLabs
Inspired by:

