<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sławomir S</title>
    <description>The latest articles on DEV Community by Sławomir S (@slawek19926).</description>
    <link>https://dev.to/slawek19926</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4138205%2F8201db7f-b6eb-4bc5-bf7e-228f49d732ea.jpg</url>
      <title>DEV Community: Sławomir S</title>
      <link>https://dev.to/slawek19926</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/slawek19926"/>
    <language>en</language>
    <item>
      <title>I built Vitals, a native macOS system monitor for Apple Silicon</title>
      <dc:creator>Sławomir S</dc:creator>
      <pubDate>Tue, 22 Sep 2026 19:23:45 +0000</pubDate>
      <link>https://dev.to/slawek19926/i-built-vitals-a-native-macos-system-monitor-for-apple-silicon-2cbh</link>
      <guid>https://dev.to/slawek19926/i-built-vitals-a-native-macos-system-monitor-for-apple-silicon-2cbh</guid>
      <description>&lt;p&gt;I recently open-sourced Vitals, a native system monitor for macOS focused on Apple Silicon.&lt;/p&gt;

&lt;p&gt;The project started because I wanted one place where I could inspect much more of what the Mac is actually doing than Activity Monitor exposes — CPU clusters, GPU, Neural Engine, SMC sensors, disks, power usage, network interfaces and processes.&lt;/p&gt;

&lt;p&gt;I also wanted to keep it fully native.&lt;/p&gt;

&lt;p&gt;No Electron, no web UI, no telemetry and no third-party monitoring libraries.&lt;/p&gt;

&lt;p&gt;GitHub:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/slawek19926/Vitals" rel="noopener noreferrer"&gt;https://github.com/slawek19926/Vitals&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;"Vitals summary"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmcmzj53igxqdvmecr6le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmcmzj53igxqdvmecr6le.png" alt=" " width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Architecture&lt;/p&gt;

&lt;p&gt;The application is split into two main layers.&lt;/p&gt;

&lt;p&gt;The UI and application logic are written in Swift and AppKit.&lt;/p&gt;

&lt;p&gt;The low-level monitoring layer is written in C++17 and exposes a plain C API to Swift.&lt;/p&gt;

&lt;p&gt;Under the hood, Vitals uses several macOS facilities directly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"libproc"&lt;/li&gt;
&lt;li&gt;Mach APIs&lt;/li&gt;
&lt;li&gt;"sysctl"&lt;/li&gt;
&lt;li&gt;IOKit&lt;/li&gt;
&lt;li&gt;AppleSMC&lt;/li&gt;
&lt;li&gt;IOReport&lt;/li&gt;
&lt;li&gt;XPC for the optional privileged helper&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I deliberately avoided external dependencies because I wanted to understand what macOS itself exposes and keep the resulting application small and native.&lt;/p&gt;

&lt;p&gt;Apple Silicon power monitoring&lt;/p&gt;

&lt;p&gt;One of the more interesting parts was power monitoring.&lt;/p&gt;

&lt;p&gt;Where available, Vitals subscribes to IOReport's "Energy Model" channels.&lt;/p&gt;

&lt;p&gt;It takes successive samples, calculates the delta between them and divides the reported energy delta by the actual elapsed time:&lt;/p&gt;

&lt;p&gt;"power = energy_delta / elapsed_time"&lt;/p&gt;

&lt;p&gt;This provides subsystem power readings for channels such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;GPU&lt;/li&gt;
&lt;li&gt;ANE&lt;/li&gt;
&lt;li&gt;DRAM&lt;/li&gt;
&lt;li&gt;video encode/decode engines&lt;/li&gt;
&lt;li&gt;ISP&lt;/li&gt;
&lt;li&gt;display&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is no additional moving averaging at this layer. The application samples the more expensive power path roughly once per second and briefly keeps the last valid value if a sample is temporarily unavailable.&lt;/p&gt;

&lt;p&gt;The complication is that on newer macOS versions some Energy Model counters are restricted or appear frozen for third-party processes.&lt;/p&gt;

&lt;p&gt;For those cases, Vitals has an optional privileged XPC helper.&lt;/p&gt;

&lt;p&gt;The helper runs Apple's own "powermetrics" tool and passes CPU, GPU and Neural Engine power readings, as well as P-core, E-core and GPU frequencies, back to the main application.&lt;/p&gt;

&lt;p&gt;The main Vitals process itself still runs as the normal logged-in user.&lt;/p&gt;

&lt;p&gt;SMC sensors&lt;/p&gt;

&lt;p&gt;SMC monitoring is separate from IOReport.&lt;/p&gt;

&lt;p&gt;Vitals opens the "AppleSMC" service through IOKit and enumerates the available SMC keys.&lt;/p&gt;

&lt;p&gt;It currently groups readings such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;temperatures&lt;/li&gt;
&lt;li&gt;power&lt;/li&gt;
&lt;li&gt;voltage&lt;/li&gt;
&lt;li&gt;current&lt;/li&gt;
&lt;li&gt;fans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The exact set of keys depends on the Mac model and firmware, which is one of the reasons I'm interested in testing the application across different generations of Apple Silicon hardware.&lt;/p&gt;

&lt;p&gt;"SMC sensors" &lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjf1ivmkjcn1r6v6jf4gg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjf1ivmkjcn1r6v6jf4gg.png" alt=" " width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Processes&lt;/p&gt;

&lt;p&gt;The process monitor uses macOS process APIs rather than parsing output from command-line tools.&lt;/p&gt;

&lt;p&gt;Vitals shows a PPID-based process tree with metrics including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;memory usage&lt;/li&gt;
&lt;li&gt;thread count&lt;/li&gt;
&lt;li&gt;disk reads and writes&lt;/li&gt;
&lt;li&gt;wakeups&lt;/li&gt;
&lt;li&gt;context switches&lt;/li&gt;
&lt;li&gt;energy impact&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The optional helper also allows Vitals to retrieve information that macOS normally restricts when inspecting processes belonging to other users.&lt;/p&gt;

&lt;p&gt;"Process monitor" &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8gpwo3yrl346ob7f4tqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8gpwo3yrl346ob7f4tqp.png" alt=" " width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Apple Silicon view&lt;/p&gt;

&lt;p&gt;Vitals also exposes Apple Silicon-specific information in one place.&lt;/p&gt;

&lt;p&gt;That includes P/E CPU clusters, GPU information, Neural Engine information and media-engine capabilities.&lt;/p&gt;

&lt;p&gt;"Apple Silicon view" &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn1440zt0yjljxmkfmmgp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fn1440zt0yjljxmkfmmgp.png" alt=" " width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;More than a menu bar monitor&lt;/p&gt;

&lt;p&gt;I like tools such as Stats and MenuMeters, but Vitals is intended to cover a somewhat broader use case.&lt;/p&gt;

&lt;p&gt;It currently includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;per-core CPU monitoring&lt;/li&gt;
&lt;li&gt;GPU and Neural Engine monitoring&lt;/li&gt;
&lt;li&gt;SMC sensors&lt;/li&gt;
&lt;li&gt;physical disk information and SMART&lt;/li&gt;
&lt;li&gt;per-interface network monitoring&lt;/li&gt;
&lt;li&gt;process monitoring&lt;/li&gt;
&lt;li&gt;disk-space analysis with a treemap&lt;/li&gt;
&lt;li&gt;system health checks&lt;/li&gt;
&lt;li&gt;alerts&lt;/li&gt;
&lt;li&gt;CPU benchmarks&lt;/li&gt;
&lt;li&gt;memory benchmarks&lt;/li&gt;
&lt;li&gt;disk benchmarks&lt;/li&gt;
&lt;li&gt;Metal GPU benchmarks&lt;/li&gt;
&lt;li&gt;configurable menu-bar modules&lt;/li&gt;
&lt;li&gt;floating desktop monitoring panels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There is also a Polish and English interface, and the language can be changed without restarting the app.&lt;/p&gt;

&lt;p&gt;Privacy&lt;/p&gt;

&lt;p&gt;Vitals does not collect or transmit telemetry.&lt;/p&gt;

&lt;p&gt;The only network request made by the application is the optional check for the latest GitHub release, and that can be disabled.&lt;/p&gt;

&lt;p&gt;There is no user account and no backend service.&lt;/p&gt;

&lt;p&gt;Current limitation&lt;/p&gt;

&lt;p&gt;There is one important limitation at the moment.&lt;/p&gt;

&lt;p&gt;The downloadable release is not yet notarized because I currently don't have an Apple Developer Program membership.&lt;/p&gt;

&lt;p&gt;The source code is public, so anyone can inspect it or build the application locally with Xcode.&lt;/p&gt;

&lt;p&gt;Getting proper signing and notarization is one of the next things I want to solve because it would make installing the downloadable builds much smoother.&lt;/p&gt;

&lt;p&gt;Open source&lt;/p&gt;

&lt;p&gt;Vitals is licensed under GPLv3.&lt;/p&gt;

&lt;p&gt;The repository includes the full Swift and C++ source code, build scripts, screenshots and downloadable releases:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/slawek19926/Vitals" rel="noopener noreferrer"&gt;https://github.com/slawek19926/Vitals&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm especially interested in feedback from people using different Apple Silicon Macs.&lt;/p&gt;

&lt;p&gt;SMC key mappings and some telemetry channels vary between machines and macOS versions, so reports from M1, M2, M3 and M4 hardware are particularly useful.&lt;/p&gt;

&lt;p&gt;If you're interested in macOS internals, Apple Silicon monitoring or native AppKit development, I'd also be very interested in code review and technical feedback.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>swift</category>
      <category>cpp</category>
    </item>
  </channel>
</rss>
