A lightweight macOS menu bar app focused on memory monitoring for multiple users: top users donut, top apps, top processes, memory pressure, swap and a short bounded history, all in one popover.
- macOS 14.0 (Sonoma) or later
- Apple Silicon or Intel Mac
- Download
MemStats-<version>.zipfrom GitHub Releases. - Unzip it and drag
MemStats.appinto/Applications. - Open it once as described in First launch.
MemStats is distributed outside the Mac App Store, because it needs the App Sandbox turned off to run top and read processes of other users.
MemStats is signed ad hoc and not notarized yet, so macOS blocks it the first time you open it. Use one of these:
-
Open the app once, then go to System Settings > Privacy & Security and click "Open Anyway" next to the MemStats message.
-
Or remove the quarantine flag in Terminal:
xattr -dr com.apple.quarantine /Applications/MemStats.app
After that, MemStats opens normally. It lives in the menu bar only (no Dock icon). Right-click (or Option-click) the menu bar item for Open at Login, Show System Users, Settings, About and Quit. The gear in the popover opens the same options menu next to the gear without closing the popover.
Settings (⌘, in the menu bar item's menu) lets you change:
- Update interval for RAM, pressure, swap, the menu bar and history (1 to 60s, default 5s)
- Update interval for top processes (3 to 60s, default 5s)
- Number of top apps and top processes shown (5 to 20, default 8)
- Open at Login and Show System Users
Short intervals use more CPU, mostly the top processes interval, since each update runs top (about 1.4s of work). While the popover is closed, RAM updates at most every 15s and top processes at most every 60s.
There is no automatic update. Open Settings and click "Check for Updates…" to open the latest release on GitHub Releases, compare it with the version shown in Settings, then download and replace the app.
Open Settings and click "Report a Bug…". It opens a new GitHub issue with your MemStats version, macOS version and Mac model already filled in, so you only describe the problem. You can also open an issue directly.
Requires Xcode 26 or later.
git clone https://github.com/chungxon/mem-stats.git
cd mem-stats
xcodebuild -project MemStats/MemStats.xcodeproj -scheme MemStats -configuration Release -derivedDataPath build build
open build/Build/Products/Release/MemStats.appRun the unit tests:
xcodebuild -project MemStats/MemStats.xcodeproj -scheme MemStats -destination 'platform=macOS' testSnapshot from Activity Monitor (Debug build, running under Xcode debugserver, on 2026-10-03):
| Metric | Value | Assessment |
|---|---|---|
| Real Memory | 45.1 MB | Normal. A minimal SwiftUI + AppKit app usually sits at 30 to 60 MB. This is all resident pages, so it also includes clean file-backed pages (framework code, fonts, assets) and graphics memory, which is why it is larger than Private + Shared |
| Private Memory | 4.9 MB | Very low. This is the memory the app allocates itself and the most meaningful number |
| Shared Memory | 12.8 MB | Normal. Frameworks shared with other processes |
| Virtual Memory | 415.44 GB | Not a concern. Reserved address space (shared cache, GPU, malloc zones), not physical RAM. Typical for any app on Apple Silicon |
| % CPU | 0.20 | Good for an app that samples periodically |
| Recent hangs | 0 | Good |
Notes:
- A Release build is expected to be slightly lighter, since there is no debugger attached and optimizations are enabled.
- One snapshot is not enough to rule out leaks. To check long-running behavior:
- Leave the app running for 30 to 60 minutes and confirm Real/Private Memory stays stable.
- Open and close the popover several times and confirm memory returns to its previous level.
- If memory keeps growing, use Instruments (Leaks / Allocations) or the Xcode Memory Graph Debugger.
Released under the MIT License.
