CPU, memory, battery, network, disk, GPU, temperature and fans in your menu bar. You pick which ones show, and a click opens the detail behind it. Compact Health folds the whole machine into one item that stays quiet until something's off. MIT, macOS 15+.
compact health mode staying quiet until something is actually off (1)
using it on an m-series mac and the CPU/GPU/temp numbers stay accurate even under sustained load, which is where a lot of menu bar monitors start lying to you. free and MIT is a nice bonus for something this useful.
What needs improvement
no CLI or JSON output yet for scripting alerts into an existing monitoring setup, though the maker mentioned it's coming.
Stats proved an open source monitor can be excellent, and iStat Menus set the
depth people expect. I wanted something between the two: free and open, with
alerting I'd actually trust.
The part I use most is Compact Health. It's one menu bar item that summarizes
the whole machine and stays quiet until something needs attention, so I'm not
reading six numbers all day. Alert rules fire on sustained thresholds rather
than momentary spikes, and there's a test delivery so you know what a 3am
notification will look like before it happens.
Everything is read from local system interfaces. No analytics, no crash
reporting; the only network call the app can make is an update check you
trigger yourself.
Swift, MIT, macOS 15+. Happy to hear what's missing.
Report
@faruk_kamcici Really like the Compact Health idea - quiet until something's actually wrong is exactly right.
Quick question: your description mentions "temperature and fans" alongside CPU/memory/battery/etc., but the menu bar picker only has 6 modules (CPU, Memory, Battery, Network, Disk, GPU) - no temp or fan module. I see CPU temp does show up as an alert rule, but fans don't appear anywhere.
@nikita_upadhayay Good catch, thanks for flagging it. Temperatures are available as menu bar options inside CPU, Memory, and GPU rather than as a separate module.
Fans should appear as a separate module on Macs with fan hardware. I found an issue in that detection and fixed it for the next release, also made this behavior clearer in the picker. Thanks again!
@nikita_ Hey, Mectrics v1.4.0 is live! It should fix the issue you reported. Let me know if it’s working on your end now. Thanks again for reporting it!
Report
the GPU and temperature tracking is what caught my eye - I've had my mac silently throttle during long batch jobs before and only noticed afterward from how long everything took. would compact health actually flag sustained thermal throttling, or just raw temperature being high? those aren't quite the same thing and the throttling itself is usually the real problem, not the number on the sensor.
@omri_ben_shoham1 Quick update: this is now implemented in Mectrics v1.4.0. It can now alert when macOS reports that the CPU or GPU is being slowed down to cool the system, rather than relying only on raw temperatures. Thanks again for the suggestion!
Report
Compact Health is the bit I'd use. I've got a Mac Mini sitting headless running agent jobs, so the menu bar is exactly where I never look. Is there a way to get the same alert rules out over CLI or JSON so I could pipe them somewhere else, or is it menu bar only for now?
@dalemooney That’s a really good use case. There’s no CLI or JSON output for alerts right now, but we can build it. I’ll work on adding it in the next release. Thanks for the idea, Dale!
Report
@faruk_kamcici Nice one, thanks for taking it seriously. If it helps scope it small: the thing I'd want is exit codes rather than something to parse. A `mectrics check` that returns non-zero while a rule is firing, plus `--json` for the detail when I actually want it. That drops straight into a cron or an existing monitoring check without anyone writing a parser, and it's a much smaller job than a daemon or a proper API.
@dalemooney Quick update: the CLI you mentioned is now available in Mectrics v1.4.0. If you get a chance to try it on your headless setup, I’d love to hear your feedback. Thanks!
Report
@faruk_kamcici That was fast. Exit codes plus --json is exactly the right shape, and I will get it onto the Mini and report back properly rather than just guessing at it.
One thing worth settling before the contract hardens, because it is the failure that will bite whoever wires this into a cron.
What does mectrics check exit when it cannot read the sensor? Permission missing, the app not running, a fan module absent on that hardware, a reading that exists on Intel and not on Apple Silicon. If any of those return 0, then "everything is within limits" and "I could not look" are the same exit code, and a monitoring check that cannot separate those will sit there green while the machine cooks.
Three codes rather than two fixes it. 0 for checked and fine, 1 for a rule firing, and something distinct for could not determine. A cron can then treat unknown as its own alert instead of as success, which is most of the reason to run this headless at all.
Same question for alerts watch. If the stream dies, whatever is consuming it sees silence, and silence is indistinguishable from no alerts. A heartbeat line on an interval, even an empty one, is what lets a consumer tell "nothing is wrong" apart from "nothing is running".
Neither is a big change today. Both get painful once people have scripts that depend on 0 meaning fine.
Report
congrats on the launch. I run a Mac mini headless most of the day for local model work, so it's basically always on and I'm sensitive to anything that adds its own background load. for a tool that's polling CPU, memory, GPU, temp and fans continuously, what's mectrics' own footprint look like - is the sampling itself negligible, or is there a tradeoff between poll frequency and how much it costs you to run the monitor in the first place?
@galdayan Thanks, Gal! That tradeoff was one of my main concerns too. The main app currently settles around 60 to 65 MB of memory. Lightweight metrics update every second on AC and every two seconds on battery, while GPU, temperature, and fan readings run every third cycle.
The planned read-only CLI for the next release should have a lower footprint on headless setups because it skips the UI and samples only what each command needs. If you try Mectrics and see a very different footprint, let me know and I’ll dig into it.
Report
@faruk_kamcici 60-65MB is very reasonable, that's not what I was worried about honestly. good to know the CLI skips the UI layer entirely for headless, that's the part that actually matters for my setup. will give it a try and report back if the numbers look off.
Report
Compact Health staying quiet until something's actually off is the detail that matters. Every other menu bar monitor I've used just dumps every number on you all the time and you tune it out.
@minimaldesign Fair comparison. iStat Menus goes much deeper, and I would not claim Mectrics replaces all of it.
The biggest difference is the approach. Mectrics is built to stay quiet, with Compact Health and alerts that only speak up when something persists. It is also free, open source, and has zero telemetry.
Report
Love that Compact Health folds the whole machine into one item that stays quiet until something is actually wrong, that is the opposite of how these apps usually behave. Free and MIT licensed is a generous move too. Does the compact item still show enough at a glance on a notched MacBook where menu bar space is tight?
@doganakbulut Thanks, Dogan! Compact Health takes up only the space of a single icon. It shows the overall state at a glance, and clicking it opens a popover with the details. It works especially well on notched MacBooks where menu bar space is limited.
mectrics
@faruk_kamcici Really like the Compact Health idea - quiet until something's actually wrong is exactly right.
Quick question: your description mentions "temperature and fans" alongside CPU/memory/battery/etc., but the menu bar picker only has 6 modules (CPU, Memory, Battery, Network, Disk, GPU) - no temp or fan module. I see CPU temp does show up as an alert rule, but fans don't appear anywhere.
Are those planned, or just described a bit early?
mectrics
@nikita_upadhayay Good catch, thanks for flagging it. Temperatures are available as menu bar options inside CPU, Memory, and GPU rather than as a separate module.
Fans should appear as a separate module on Macs with fan hardware.
I found an issue in that detection and fixed it for the next release, also made this behavior clearer in the picker. Thanks again!
mectrics
the GPU and temperature tracking is what caught my eye - I've had my mac silently throttle during long batch jobs before and only noticed afterward from how long everything took. would compact health actually flag sustained thermal throttling, or just raw temperature being high? those aren't quite the same thing and the throttling itself is usually the real problem, not the number on the sensor.
mectrics
@omri_ben_shoham1 Right now it's the raw number, so you'd catch a hot sensor but not the
throttling. You're right that the throttling is the part that costs you.
The app already reads ProcessInfo's thermal state, but only to back off its own
sampling. It never surfaces it.
Going into the next release, good contribution. Thanks!
mectrics
Compact Health is the bit I'd use. I've got a Mac Mini sitting headless running agent jobs, so the menu bar is exactly where I never look. Is there a way to get the same alert rules out over CLI or JSON so I could pipe them somewhere else, or is it menu bar only for now?
mectrics
@dalemooney That’s a really good use case. There’s no CLI or JSON output for alerts right now, but we can build it. I’ll work on adding it in the next release. Thanks for the idea, Dale!
@faruk_kamcici Nice one, thanks for taking it seriously. If it helps scope it small: the thing I'd want is exit codes rather than something to parse. A `mectrics check` that returns non-zero while a rule is firing, plus `--json` for the detail when I actually want it. That drops straight into a cron or an existing monitoring check without anyone writing a parser, and it's a much smaller job than a daemon or a proper API.
Will keep an eye out for the release.
mectrics
@dalemooney Quick update: the CLI you mentioned is now available in Mectrics v1.4.0. If you get a chance to try it on your headless setup, I’d love to hear your feedback. Thanks!
@faruk_kamcici That was fast. Exit codes plus --json is exactly the right shape, and I will get it onto the Mini and report back properly rather than just guessing at it.
One thing worth settling before the contract hardens, because it is the failure that will bite whoever wires this into a cron.
What does mectrics check exit when it cannot read the sensor? Permission missing, the app not running, a fan module absent on that hardware, a reading that exists on Intel and not on Apple Silicon. If any of those return 0, then "everything is within limits" and "I could not look" are the same exit code, and a monitoring check that cannot separate those will sit there green while the machine cooks.
Three codes rather than two fixes it. 0 for checked and fine, 1 for a rule firing, and something distinct for could not determine. A cron can then treat unknown as its own alert instead of as success, which is most of the reason to run this headless at all.
Same question for alerts watch. If the stream dies, whatever is consuming it sees silence, and silence is indistinguishable from no alerts. A heartbeat line on an interval, even an empty one, is what lets a consumer tell "nothing is wrong" apart from "nothing is running".
Neither is a big change today. Both get painful once people have scripts that depend on 0 meaning fine.
congrats on the launch. I run a Mac mini headless most of the day for local model work, so it's basically always on and I'm sensitive to anything that adds its own background load. for a tool that's polling CPU, memory, GPU, temp and fans continuously, what's mectrics' own footprint look like - is the sampling itself negligible, or is there a tradeoff between poll frequency and how much it costs you to run the monitor in the first place?
mectrics
@galdayan Thanks, Gal! That tradeoff was one of my main concerns too. The main app currently settles around 60 to 65 MB of memory. Lightweight metrics update every second on AC and every two seconds on battery, while GPU, temperature, and fan readings run every third cycle.
The planned read-only CLI for the next release should have a lower footprint on headless setups because it skips the UI and samples only what each command needs. If you try Mectrics and see a very different footprint, let me know and I’ll dig into it.
@faruk_kamcici 60-65MB is very reasonable, that's not what I was worried about honestly. good to know the CLI skips the UI layer entirely for headless, that's the part that actually matters for my setup. will give it a try and report back if the numbers look off.
Compact Health staying quiet until something's actually off is the detail that matters. Every other menu bar monitor I've used just dumps every number on you all the time and you tune it out.
mectrics
@irahimiam Hey, thanks for the comment!
That's exactly why I built it. I had six numbers up there and had stopped
looking at any of them.
It only speaks up if something stays off for a while, not on a quick spike.
Otherwise it just sits there being boring.
Let me know if it ever nags you when it shouldn't.
Seems very reminiscent of iStat Menus. What would you say is the biggest difference?
mectrics
@minimaldesign Fair comparison. iStat Menus goes much deeper, and I would not claim Mectrics replaces all of it.
The biggest difference is the approach. Mectrics is built to stay quiet, with Compact Health and alerts that only speak up when something persists. It is also free, open source, and has zero telemetry.
Love that Compact Health folds the whole machine into one item that stays quiet until something is actually wrong, that is the opposite of how these apps usually behave. Free and MIT licensed is a generous move too. Does the compact item still show enough at a glance on a notched MacBook where menu bar space is tight?
mectrics
@doganakbulut Thanks, Dogan! Compact Health takes up only the space of a single icon. It shows the overall state at a glance, and clicking it opens a popover with the details. It works especially well on notched MacBooks where menu bar space is limited.