|
1 | | -<p align="center"> |
2 | | - <img src="./Core-Monitor/Assets.xcassets/AppIcon.appiconset/icon-512.png" alt="Core-Monitor icon" width="180"> |
3 | | -</p> |
| 1 | +# Core-Monitor |
4 | 2 |
|
5 | | -<h1 align="center">Core-Monitor</h1> |
| 3 | +Core-Monitor is a native Apple Silicon system monitor for macOS. |
6 | 4 |
|
7 | | -<p align="center"> |
8 | | - A native Apple Silicon system monitor for macOS. |
9 | | -</p> |
| 5 | +## Overview |
10 | 6 |
|
11 | | -<p align="center"> |
12 | | - <a href="https://apps.apple.com/us/app/core-monitor/id6762558526?mt=12"> |
13 | | - <img src="https://developer.apple.com/assets/elements/badges/download-on-the-app-store.svg" alt="Download on the App Store" width="200"> |
14 | | - </a> |
15 | | -</p> |
16 | | - |
17 | | -<p align="center"> |
18 | | - <a href="https://github.com/offyotto/Core-Monitor/releases/latest"> |
19 | | - <img src="https://img.shields.io/badge/Download-Latest%20Release-2ea44f?style=for-the-badge" alt="Download latest release"> |
20 | | - </a> |
21 | | -</p> |
22 | | - |
23 | | -<p align="center"> |
24 | | - <a href="https://github.com/offyotto/Core-Monitor/releases/latest">Latest release</a> |
25 | | - · |
26 | | - <a href="https://github.com/offyotto/Core-Monitor/releases">All releases</a> |
27 | | - · |
28 | | - <a href="./LICENSE">License</a> |
29 | | -</p> |
30 | | - |
31 | | -<p align="center"> |
32 | | - <a href="https://offyotto.github.io/Core-Monitor/"> |
33 | | - <img src="https://img.shields.io/badge/Website-Core--Monitor-8A2BE2?style=flat" alt="Website"> |
34 | | - </a> |
35 | | - <a href="https://github.com/offyotto/Core-Monitor/releases/latest"> |
36 | | - <img src="https://img.shields.io/badge/Download-latest-brightgreen?style=flat" alt="Download latest"> |
37 | | - </a> |
38 | | - <a href="./LICENSE"> |
39 | | - <img src="https://img.shields.io/badge/License-GPL--3.0-blue?style=flat" alt="GPL-3.0 license"> |
40 | | - </a> |
41 | | - <img src="https://img.shields.io/badge/macOS-13%2B-black?style=flat&logo=apple" alt="macOS 13+"> |
42 | | -</p> |
43 | | - |
44 | | ---- |
45 | | - |
46 | | -Core-Monitor reads sensor data from the Apple SMC and standard macOS system APIs, then presents it in the menu bar, dashboard, and, on supported hardware, the Touch Bar. CPU, GPU, memory, battery, thermals, power draw, and on supported Macs, the Touch Bar. |
47 | | - |
48 | | -It is written in Swift and built around `host_statistics`, `IOKit`, and `IOPSCopyPowerSourcesInfo`. Sensor reads stay local to your Mac. The optional fan control helper is the only additional process. |
49 | | - |
50 | | -Public builds are available through GitHub Releases as a signed DMG for standard installs and a signed ZIP for archive-friendly installs. |
51 | | - |
52 | | -There is also a separate Core-Monitor Mac App Store edition: https://apps.apple.com/us/app/core-monitor/id6762558526?mt=12. That variant is sandboxed and intentionally different: it keeps read-only sensor monitoring but removes fan control. If you search the Mac App Store for `Core-Monitor`, this Apple listing is the official App Store install path. |
| 7 | +Core-Monitor shows local system information in the menu bar, dashboard, and Touch Bar on supported Macs. It focuses on CPU, GPU, memory, battery, thermal, power, and fan status. |
53 | 8 |
|
54 | 9 | ## Install |
55 | 10 |
|
56 | | -Direct download: |
57 | | - |
58 | | -- Download from the [Mac App Store](https://apps.apple.com/us/app/core-monitor/id6762558526?mt=12) if you want the sandboxed App Store edition. |
59 | | -- If App Store search does not surface it immediately, open the official Apple listing directly: [Core-Monitor on the Mac App Store](https://apps.apple.com/us/app/core-monitor/id6762558526?mt=12). |
60 | | -- Download [Core-Monitor.dmg](https://github.com/offyotto/Core-Monitor/releases/latest/download/Core-Monitor.dmg) for the normal drag-to-Applications install. |
61 | | -- Open the disk image, drag `Core-Monitor.app` into `/Applications`, then eject the disk image. |
62 | | -- Download [Core-Monitor.app.zip](https://github.com/offyotto/Core-Monitor/releases/latest/download/Core-Monitor.app.zip) if you prefer the raw app archive. |
63 | | -- Move `Core-Monitor.app` into `/Applications` if you use the ZIP. |
64 | | - |
65 | | -Homebrew: |
66 | | - |
67 | | -```bash |
68 | | -brew tap --custom-remote offyotto/core-monitor https://github.com/offyotto/Core-Monitor |
69 | | -brew install --cask offyotto/core-monitor/core-monitor |
70 | | -``` |
71 | | - |
72 | | -## Mac App Store Search |
73 | | - |
74 | | -The official Apple listing is [Core-Monitor on the Mac App Store](https://apps.apple.com/us/app/core-monitor/id6762558526?mt=12). The sandboxed App Store edition has its own [landing page](https://offyotto.github.io/Core-Monitor/Mac-App-Store/), [support page](https://offyotto.github.io/Core-Monitor/Mac-App-Store/support/), and [privacy policy](https://offyotto.github.io/Core-Monitor/Mac-App-Store/privacy/). |
75 | | - |
76 | | - |
77 | | -## UI Preview |
78 | | - |
79 | | -<p align="center"> |
80 | | - <img src="./docs/images/ui/overview-2026.png" alt="Core-Monitor overview screen showing CPU, memory, temperature, and power cards." width="900"> |
81 | | -</p> |
82 | | - |
83 | | -<p align="center"> |
84 | | - <img src="./docs/images/ui/thermals-2026.png" alt="Core-Monitor thermals screen showing CPU and GPU temperature cards with SMC sensor details." width="900"> |
85 | | -</p> |
86 | | - |
87 | | -<p align="center"> |
88 | | - <img src="./docs/images/ui/menu-bar-2026.png" alt="Core-Monitor menu bar panel showing quick system summary stats and SMC status." width="520"> |
89 | | -</p> |
90 | | - |
91 | | -## What it monitors |
92 | | - |
93 | | -**CPU** total load, and on Apple Silicon, P-core and E-core utilization independently, read via `host_processor_info` per logical core. |
94 | | - |
95 | | -**GPU** temperature from SMC keys `Tg0e`, `Tg0f`, `Tg0m`, and others depending on your chip. |
96 | | - |
97 | | -**Memory** used/wired/compressed pages via `vm_statistics64`, with a pressure level derived from the ratio of available to total physical memory. |
98 | | - |
99 | | -**Battery** charge, cycle count, health percentage, voltage, amperage, and power draw from `AppleSmartBattery` in the IO registry. Time remaining comes from `IOPSCopyPowerSourcesInfo`. |
100 | | - |
101 | | -**Thermals** CPU die temperature from `TC0P`, `Tp09`, `TCXC`, and fallbacks, GPU from `Tg0e`/`Tg0f`. You can also browse all readable SMC keys from the sensor explorer. |
102 | | - |
103 | | -## Fan control |
104 | | - |
105 | | -Fan control is optional and requires a privileged helper called `smc-helper`. If you don't need it, you don't need the helper, everything else works without it. |
106 | | - |
107 | | -The helper is bundled at `Core-Monitor.app/Contents/Library/LaunchServices/ventaphobia.smc-helper`, installed to `/Library/PrivilegedHelperTools/ventaphobia.smc-helper` via [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/smjobbless). |
108 | | - |
109 | | -The Apple Silicon manual-control path is adapted from the MIT-licensed research project [`agoodkind/macos-smc-fan`](https://github.com/agoodkind/macos-smc-fan). Core Monitor now probes `F%dMd` versus `F%dMc` to detect MMIO vs. normal fan mode on your specific chip. |
110 | | - |
111 | | -**Fan modes:** |
112 | | - |
113 | | -| Mode | Behavior | |
114 | | -|------|----------| |
115 | | -| Smart | Temperature + power-aware curve. Blends CPU/GPU temps with system watt draw, scales against a configurable aggressiveness from 0.0 (always minimum) to 3.0 (always maximum). | |
116 | | -| Silent | Delegates entirely to the firmware's automatic curve. | |
117 | | -| Balanced | Fixed at 60% of the fan's reported maximum. | |
118 | | -| Performance | Fixed at 85%. | |
119 | | -| Max | Fixed at 100%. | |
120 | | -| Manual | You pick the RPM. | |
121 | | -| System | Restores automatic SMC control with `F{n}Md = 0`. | |
122 | | - |
123 | | -The Smart curve accounts for system power draw as a temperature boost — at 40 W it adds up to 8°C to the effective temperature before mapping to a fan speed. Fan settings persist across sleep/wake. |
124 | | - |
125 | | -**Helper commands** (also usable directly from the terminal): |
126 | | - |
127 | | -```text |
128 | | -smc-helper set <fanID> <rpm> # override fan speed |
129 | | -smc-helper auto <fanID> # return fan to firmware |
130 | | -smc-helper read <key> # read any 4-character SMC key |
131 | | -``` |
132 | | - |
133 | | -Supported SMC value types: `sp78`, `fpe2`, `flt`, `ui8`, `ui16`. |
134 | | - |
135 | | -## Touch Bar customization |
136 | | - |
137 | | -Core-Monitor includes a Touch Bar layout editor in the app's **Touch Bar** section. Layouts can mix: |
138 | | - |
139 | | -built-in items such as Status, Weather, CPU, Dock, Stats, and Network |
140 | | -- pinned applications |
141 | | -- pinned folders |
142 | | -- custom command widgets |
143 | | - |
144 | | -Every item in the active layout is stored in order and rendered in the live preview before you apply changes. |
145 | | - |
146 | | -The point of the strip is that it stays available above your other apps. You can keep a live status HUD, weather, pinned apps, and quick actions one tap away while you are still in Xcode, Terminal, or another fullscreen app. |
147 | | - |
148 | | -### Built-in widgets |
149 | | - |
150 | | -Built-in items are the existing Core-Monitor Touch Bar modules. You can enable or disable them from the built-in list, then reorder them in **Active Items**. |
151 | | - |
152 | | -These built-ins keep their normal live behavior: |
153 | | - |
154 | | -- Weather continues to use WeatherKit |
155 | | -- Status continues to show Wi-Fi, battery, and clock data |
156 | | -- CPU and Stats items continue to use the current system snapshot |
157 | | -- Dock continues to reflect the compact launcher strip |
158 | | - |
159 | | -### Pinning applications |
160 | | - |
161 | | -Use **Pin Applications** in the Touch Bar customization panel to add one or more `.app` bundles directly to the Touch Bar. |
162 | | - |
163 | | -How it works: |
164 | | - |
165 | | -- the picker accepts macOS application bundles |
166 | | -- each selected app is stored by path, display name, and bundle identifier when available |
167 | | -- pinned apps render as compact icon launchers in the Touch Bar |
168 | | -- tapping a pinned app opens that application through `NSWorkspace` |
169 | | - |
170 | | -Practical notes: |
171 | | - |
172 | | -- pinned apps are meant to be quick launch targets, not live widgets |
173 | | -- app icons are pulled from the app bundle on disk each time the item is rebuilt |
174 | | -- if you move or rename a pinned app after saving it, the stored path may go stale and that launcher may stop working until you re-pin it |
175 | | -- if you pin many apps, the width meter warns when the layout is wider than a full Touch Bar |
176 | | - |
177 | | -### Pinning folders |
178 | | - |
179 | | -Use **Pin Folders** to add Finder locations to the Touch Bar. |
180 | | - |
181 | | -How it works: |
182 | | - |
183 | | -- the picker accepts directories only |
184 | | -- each selected folder is stored by path and display name |
185 | | -- pinned folders render as compact launcher buttons just like pinned apps |
186 | | -- tapping a pinned folder opens it in Finder through `NSWorkspace` |
| 11 | +Use the Mac App Store listing or the latest GitHub release. |
187 | 12 |
|
188 | | -Good use cases: |
189 | | - |
190 | | -- a project root you open repeatedly |
191 | | -- Downloads, Screenshots, or a working assets folder |
192 | | -- a scripts/tools directory used during development |
193 | | - |
194 | | -Folder pinning follows the same persistence rules as app pinning: if the path changes, re-pin it. |
195 | | - |
196 | | -### Custom command widgets |
197 | | - |
198 | | -The **Custom Widget** form lets you create a simple Touch Bar action backed by your own shell command. |
199 | | - |
200 | | -Each custom widget stores: |
201 | | - |
202 | | -- a visible title |
203 | | -- an SF Symbol name |
204 | | -- a shell command |
205 | | -- a target width |
206 | | - |
207 | | -Current behavior: |
208 | | - |
209 | | -- the widget appears as a compact labeled button in the Touch Bar |
210 | | -- tapping it launches `/bin/zsh -lc "<your command>"` |
211 | | -- this is designed for quick actions, scripts, and automations rather than long-running UI |
212 | | - |
213 | | -Examples: |
214 | | - |
215 | | -```bash |
216 | | -open -a Terminal |
217 | | -``` |
218 | | - |
219 | | -```bash |
220 | | -open ~/Downloads |
221 | | -``` |
222 | | - |
223 | | -```bash |
224 | | -shortcuts run "Build Project" |
225 | | -``` |
226 | | - |
227 | | -```bash |
228 | | -osascript -e 'display notification "Build complete" with title "Core-Monitor"' |
229 | | -``` |
230 | | - |
231 | | -Important caveats: |
232 | | - |
233 | | -- commands run with the app's user permissions |
234 | | -- command output is not embedded back into the Touch Bar |
235 | | -- if a command depends on shell setup files, test it directly in `zsh -lc` form first |
236 | | -- keep commands short and predictable; the current implementation is an action launcher, not a terminal emulator |
237 | | - |
238 | | -### Rearranging the layout |
239 | | - |
240 | | -The **Active Items** list is the source of truth for Touch Bar order. |
241 | | - |
242 | | -From that list you can: |
243 | | - |
244 | | -- move any item up |
245 | | -- move any item down |
246 | | -- remove any item |
247 | | - |
248 | | -This applies equally to: |
249 | | - |
250 | | -- built-in widgets |
251 | | -- pinned apps |
252 | | -- pinned folders |
253 | | -- custom command widgets |
254 | | - |
255 | | -The live preview strip above the editor reflects the current order and item widths immediately. |
256 | | - |
257 | | -### Presets and persistence |
258 | | - |
259 | | -Presets still exist, but they now apply structured item layouts instead of the older widget-only stack. |
260 | | - |
261 | | -Touch Bar layouts are stored in user defaults and older widget-only configurations are migrated forward into the richer item model automatically. Existing users should keep their built-in layouts. |
262 | | - |
263 | | -### Current limits |
264 | | - |
265 | | -The new customization system is intentionally practical rather than unlimited. Right now: |
266 | | - |
267 | | -- reordering is button-driven, not drag-and-drop |
268 | | -- pinned apps and folders are launcher buttons, not live mini-views |
269 | | -- custom widgets launch commands but do not yet show dynamic script output |
270 | | -- very wide layouts can still exceed the physical Touch Bar width, so use the width meter as the guardrail |
271 | | - |
272 | | -## Compared with other Mac monitoring apps |
273 | | - |
274 | | -Users often compare Core-Monitor with iStat Menus, TG Pro, Macs Fan Control, and Stats. |
275 | | - |
276 | | -- **Compared with iStat Menus:** Core-Monitor is the better fit if you want a more focused Apple Silicon thermal and power workflow with open-source code rather than a broader monitoring suite. |
277 | | -- **Compared with TG Pro:** Core-Monitor is the better fit if you want daily monitoring first, optional helper-backed fan control, and a stronger local-first privacy posture. |
278 | | -- **Compared with Macs Fan Control:** Core-Monitor is the better fit if you want broader Apple Silicon monitoring, menu bar status, and a native dashboard in addition to manual fan control. |
279 | | -- **Compared with Stats:** Core-Monitor is the better fit if you want a stronger fan-control story and a calmer thermal-first dashboard rather than a lighter modular menu bar utility. |
280 | | - |
281 | | -## FAQ |
282 | | - |
283 | | -### Does Core-Monitor work without the privileged helper? |
284 | | - |
285 | | -Yes. Monitoring works without the helper. The helper is only needed for fan writes and related elevated control paths. |
286 | | - |
287 | | -### Is Core-Monitor private? |
288 | | - |
289 | | -Yes. Core-Monitor does not require an account, sensor reads stay on your Mac, and the core product experience does not depend on analytics or cloud dashboards. |
290 | | - |
291 | | -### How can I ask for help or recommend Core-Monitor? |
292 | | - |
293 | | -Open **About** in the dashboard and use **Copy Pitch**, **Copy Post**, or **Copy Snapshot**. The snapshot is designed for GitHub issues and support threads because it includes the hardware and helper state people usually ask for while avoiding process names. |
294 | | - |
295 | | -### Is Core-Monitor a good open-source alternative to TG Pro, iStat Menus, Macs Fan Control, or Stats? |
296 | | - |
297 | | -Yes, when you want Apple Silicon first monitoring, open-source transparency, readable menu bar status, and optional fan control in one app. It is a particularly strong fit when privacy and local-first monitoring matter to you. |
298 | | -And.. if you dont wanna drop 20 bucks on a random app because its "known" looking at u- TG Pro>:( |
299 | | - |
300 | | -### What does Core-Monitor not try to be? |
301 | | - |
302 | | -It is not a sloppy slop ai slop sloppy slopathon, cloud monitoring platform, not a fleet-management product, and not the most sprawling all-purpose desktop stats suite. The product is intentionally centered on heat, power, battery, and fan control for Apple Silicon Macs. |
303 | | - |
304 | | -## Installation |
305 | | - |
306 | | -**Download:** Use the signed [Core-Monitor.dmg](https://github.com/offyotto/Core-Monitor/releases/latest/download/Core-Monitor.dmg) for the standard install, or grab the [Core-Monitor.app.zip](https://github.com/offyotto/Core-Monitor/releases/latest/download/Core-Monitor.app.zip) for archive installs. |
307 | | - |
308 | | -**Build from source:** |
309 | | - |
310 | | -```bash |
311 | | -git clone https://github.com/offyotto/Core-Monitor.git |
312 | | -``` |
| 13 | +## Privacy |
313 | 14 |
|
314 | | -Open the project in Xcode, select the `Core-Monitor` scheme, and build. The `smc-helper` is a separate target. You can build and run Core-Monitor without it, but fan control will not be available in the UI. |
| 15 | +Core-Monitor does not require an account. Sensor reads stay local to your Mac. |
315 | 16 |
|
316 | 17 | ## Compatibility |
317 | 18 |
|
318 | 19 | - macOS 13 or later |
319 | | -- Apple Silicon is the primary target; Intel Macs are not part of the current test path |
320 | | -- Fan control requires macOS 13+ (XPC with code-signing requirements) |
321 | | -- A separate sandboxed App Store build is available: https://apps.apple.com/us/app/core-monitor/id6762558526?mt=12 |
322 | | - |
323 | | -## Privacy |
324 | | - |
325 | | -Core-Monitor does not include analytics, ad SDKs, or account features. Sensor reads stay local to your Mac, and the optional fan helper only communicates with the local privileged XPC service. |
326 | | - |
327 | | -## WeatherKit |
328 | | - |
329 | | -The optional Touch Bar weather item uses Apple WeatherKit and location access to show local conditions. Remove the weather item from your Touch Bar layout if you do not want Core-Monitor to request your location. |
| 20 | +- Apple Silicon is the primary target |
330 | 21 |
|
331 | 22 | ## License |
332 | 23 |
|
333 | | -GPL-3.0 — see [LICENSE](./LICENSE). |
| 24 | +GPL-3.0, see [LICENSE](./LICENSE). |
0 commit comments