mactop is a terminal-based monitoring tool "top" designed to display real-time metrics for Apple Silicon chips written by Carsen Klock. It provides a simple and efficient way to monitor CPU and GPU usage, E-Cores and P-Cores, power consumption, GPU frequency, temperatures, and other system metrics directly from your terminal
- Apple Silicon Only (ARM64)
- macOS Monterey 12.3+
- No sudo required - Uses native Apple APIs (SMC, IOReport, IOKit, IOHIDEventSystemClient)
- Apple Silicon Monitor Top written in Go Lang and CGO
- Real-time CPU, GPU, ANE, DRAM, and system power wattage usage display
- GPU frequency and usage percentage display
- CPU and GPU temperatures + Thermal State
- Detailed native metrics for CPU cores (E and P cores) via Apple's Mach Kernel API
- Memory usage and swap information
- Network usage information (upload/download speeds)
- Thunderbolt bandwidth monitoring: Real-time throughput for Thunderbolt Bridge interfaces
- Thunderbolt Device Tree: Visual tree of connected Thunderbolt/USB4 devices and their speeds
- RDMA Support: Detection of RDMA over Thunderbolt 5 availability
- Disk I/O activity (read/write speeds)
- Multiple volume display (shows Mac HD + mounted external volumes)
- Easy-to-read terminal UI
- 11 Layouts: (
Lto cycle layouts) - Persistent Settings: Remembers your Layout and Theme choice across restarts
- Customizable UI color (green, red, blue, skyblue, magenta, yellow, gold, silver, white, lime, orange, violet, pink, and more) (
Cto cycle colors) - Customizable update interval (default is 1000ms) (
-or=to speed up,+to slow down) - Process list matching htop format (VIRT in GB, CPU normalized by core count)
- Process Management: Kill processes directly from the UI (F9). List pauses while selecting.
- Headless Mode: Output JSON metrics to stdout for scripting/logging (
--headless) - JSON Formatting: Pretty print JSON output (
--pretty) or set collection count (--count <n>) - Party Mode (Randomly cycles through colors) (P to toggle)
- Optional Prometheus Metrics server (default is disabled) (
-p <port>or--prometheus <port>) - Support for all Apple Silicon models
- Auto-detect Light/Dark Mode: Automatically adjusts UI colors based on your terminal's background color or system theme.
- Configurable Units: Customize units for network, disk, and temperature display (
--unit-network,--unit-disk,--unit-temp)
You can install mactop via Homebrew! https://brew.sh
brew install mactopmactopbrew updatebrew upgrade mactopTo install mactop, follow these steps:
-
Ensure you have Go installed on your machine. If not, you can install it by following the instructions here: Go Installation Guide.
-
Clone the repository:
git clone https://github.com/metaspartan/mactop.git cd mactop -
Build the application:
go build
-
Run the application:
./mactop
After installation, you can start mactop by simply running:
./mactopExample with flags:
mactop --interval 1000 --color greenHeadless Mode (JSON Output):
# Run once and exit (great for scripts)
mactop --headless --count 1
# Run continuously with pretty printing
mactop --headless --pretty--headless: Run in headless mode (no TUI, output JSON to stdout).--count: Number of samples to collect in headless mode (0 = infinite).--pretty: Pretty print JSON output in headless mode.--intervalor-i: Set the update interval in milliseconds. Default is 1000.--coloror-c: Set the UI color. Default is white. Options are 'green', 'red', 'blue', 'skyblue', 'magenta', 'yellow', 'gold', 'silver', 'white', 'lime', 'orange', 'violet', and 'pink'. (-c green)--prometheusor-p: Set and enable the local Prometheus metrics server on the given port. Default is disabled. (e.g. -p 2112 to enable Prometheus metrics on port 2112)--unit-network: Network unit: auto, byte, kb, mb, gb (default: auto)--unit-disk: Disk unit: auto, byte, kb, mb, gb (default: auto)--unit-temp: Temperature unit: celsius, fahrenheit (default: celsius)--testor-t: Test IOReport power metrics (no sudo required)--versionor-v: Print the version of mactop.--helpor-h: Show a help message about these flags and how to run mactop.
Use the following keys to interact with the application while its running:
q: Quit the application.r: Refresh the UI data manually.c: Cycle through the color themes.p: Party Mode (Randomly cycles through colors)i: Toggle Info layout (displays system info)l: Cycle through the 10 available layouts.+or=: Increase update interval (slower updates).-: Decrease update interval (faster updates).F9: Kill the currently selected process (pauses updates while selecting).Arrow Keysorh/j/k/l: Navigate the process list and select columns.EnterorSpace: Sort by the selected column.hor?: Toggle the help menu.
[{
"timestamp": "2025-12-22T18:16:57-07:00",
"soc_metrics": {
"cpu_power": 2.1959999999999997,
"gpu_power": 5.38552801,
"ane_power": 0,
"dram_power": 5.702,
"gpu_sram_power": 0.158,
"system_power": 37.47166092432617,
"total_power": 50.91318893432617,
"gpu_freq_mhz": 643,
"soc_temp": 62.562572,
"cpu_temp": 62.562572,
"gpu_temp": 58.38886
},
"memory": {
"total": 137438953472,
"used": 74062512128,
"available": 63376441344,
"swap_total": 5368709120,
"swap_used": 4094689280
},
"net_disk": {
"out_packets_per_sec": 589.4371024829012,
"out_bytes_per_sec": 196028.18012655922,
"in_packets_per_sec": 593.3256375185223,
"in_bytes_per_sec": 74461.55739710879,
"read_ops_per_sec": 0.32404458630175986,
"write_ops_per_sec": 40.18152870141822,
"read_kbytes_per_sec": 1.2961783452070395,
"write_kbytes_per_sec": 308.4904461592754
},
"cpu_usage": 15.140564910346725,
"gpu_usage": 53.51970510465884,
"core_usages": [
42.244224422442244,
37.17105263157895,
55.26315789473685,
37.704918032786885,
27.21311475409836,
21.241830065359476,
14.563106796116504,
6.148867313915858,
4.193548387096775,
1.9417475728155338,
30.718954248366014,
20.846905537459286,
1.9417475728155338,
1.2944983818770228,
0.3236245954692557,
0,
0,
0,
0,
0
],
"system_info": {
"name": "Apple M1 Ultra",
"core_count": 20,
"e_core_count": 4,
"p_core_count": 16,
"gpu_core_count": 64
},
"thermal_state": "Normal",
"thunderbolt_info": {
"buses": [
{
"name": "TB4 Bus 5",
"status": "Active (USB)",
"icon": "⏺",
"speed": "Up to 40 Gb/s",
"domain_uuid": "9FDBA52F-DF7C-425E-B67B-FB80F9E1DCD6",
"switch_uid": "0x05AC38BE5E390FE5",
"receptacle_id": "6",
"devices": [
{
"name": "ASM236X NVME",
"mode": "USB",
"info_string": "USB, SSD"
}
],
"network_stats": {
"interface_name": "en7",
"bytes_in": 0,
"bytes_out": 0,
"bytes_in_per_sec": 0,
"bytes_out_per_sec": 0,
"packets_in": 0,
"packets_out": 0
}
},
{
"name": "TB4 Bus 4",
"status": "Inactive",
"icon": "○",
"speed": "Up to 40 Gb/s",
"domain_uuid": "5DD6DE43-051D-4B32-B044-23E57AA0EEC8",
"switch_uid": "0x05AC38BE5E390FE4",
"receptacle_id": "5",
"network_stats": {
"interface_name": "en6",
"bytes_in": 0,
"bytes_out": 0,
"bytes_in_per_sec": 0,
"bytes_out_per_sec": 0,
"packets_in": 0,
"packets_out": 0
}
},
{
"name": "TB4 @ TB3 Bus 3",
"status": "Active",
"icon": "ϟ",
"speed": "20 Gb/s",
"domain_uuid": "AF4CE493-9005-4E9D-8B8B-0198D27BABA3",
"switch_uid": "0x05AC38BE5E390FE3",
"receptacle_id": "4",
"devices": [
{
"name": "Studio Display",
"vendor": "Apple Inc.",
"vendor_id": "0x0001",
"mode": "TB3",
"switch_uid": "0x0001AFBD0C588A00",
"device_id": "0x801F",
"info_string": "Apple Inc., TB3"
}
],
"network_stats": {
"interface_name": "en5",
"bytes_in": 0,
"bytes_out": 0,
"bytes_in_per_sec": 0,
"bytes_out_per_sec": 0,
"packets_in": 0,
"packets_out": 0
}
},
{
"name": "TB4 Bus 2",
"status": "Inactive",
"icon": "○",
"speed": "Up to 40 Gb/s",
"domain_uuid": "D589EEFE-98CF-42EC-A729-6C3E523AA321",
"switch_uid": "0x05AC38BE5E390FE2",
"receptacle_id": "3",
"network_stats": {
"interface_name": "en4",
"bytes_in": 0,
"bytes_out": 0,
"bytes_in_per_sec": 0,
"bytes_out_per_sec": 0,
"packets_in": 0,
"packets_out": 0
}
},
{
"name": "TB4 Bus 1",
"status": "Inactive",
"icon": "○",
"speed": "Up to 40 Gb/s",
"domain_uuid": "6DAC6FCD-E102-4CCD-9D01-A75540E660CA",
"switch_uid": "0x05AC38BE5E390FE1",
"receptacle_id": "2",
"network_stats": {
"interface_name": "en3",
"bytes_in": 0,
"bytes_out": 0,
"bytes_in_per_sec": 0,
"bytes_out_per_sec": 0,
"packets_in": 0,
"packets_out": 0
}
},
{
"name": "TB4 Bus 0",
"status": "Inactive",
"icon": "○",
"speed": "Up to 40 Gb/s",
"domain_uuid": "63A80A32-E70C-4F22-84BE-EDE632A5BA3E",
"switch_uid": "0x05AC38BE5E390FE0",
"receptacle_id": "1",
"network_stats": {
"interface_name": "en2",
"bytes_in": 0,
"bytes_out": 0,
"bytes_in_per_sec": 0,
"bytes_out_per_sec": 0,
"packets_in": 0,
"packets_out": 0
}
}
]
},
"tb_net_total_bytes_in_per_sec": 0,
"tb_net_total_bytes_out_per_sec": 0,
"rdma_status": {
"available": false,
"status": "RDMA Disabled (use rdma_ctl enable in Recovery Mode)"
},
"cpu_temp": 62.562572,
"gpu_temp": 58.38886
}
]- M1
- M1 Pro
- M1 Max
- M1 Ultra
- M2
- M2 Pro
- M2 Max
- M2 Ultra
- M3
- M3 Pro
- M3 Max
- M3 Ultra
- M4
- M4 Pro
- M4 Max
- M5
(If you have a confirmed working M series chip that is not listed, please open an issue, so we may add it here!)
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork mactop
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Apple SMC: For SoC temperature sensors and System Power (PSTR)
- IOReport API: For CPU, GPU, ANE, and DRAM power consumption (no sudo required)
- IOKit: For GPU frequency table from
pmgrdevice - IOHIDEventSystemClient: Fallback for SoC temperature sensors
- NSProcessInfo.thermalState: For system thermal state (Nominal/Fair/Serious/Critical)
- Mach Kernel API (
host_processor_info): For CPU metrics (E and P cores) via CGO - gopsutil: For memory, swap, network, and disk I/O metrics
- ps: For process list information
sysctl: For CPU model informationsystem_profiler: For GPU Core Count
Distributed under the MIT License. See LICENSE for more information.
Carsen Klock - @carsenklock
Project Link: https://github.com/metaspartan/mactop
This tool is not officially supported by Apple. It is provided as is, and may not work as expected. Use at your own risk.

