astop
Terminal-based system monitor for Apple Silicon Macs
Like btop, but built for M-series chips.
Why astop?
Existing Apple Silicon monitors (asitop, macmon, mxtop) hardcode chip names and cluster layouts, causing crashes on newer chips. astop discovers your SoC topology at runtime via sysctl — no hardcoded chip tables, no breakage on M4/M5/future chips.
| Feature | astop | asitop | mxtop |
|---|---|---|---|
| Works on all M-series | Yes | Partial | No |
| Dynamic SoC discovery | Yes | No | No |
| GPU/ANE monitoring | Yes | Yes | Yes |
| Per-core CPU bars | Yes | No | No |
| Braille waveform graphs | Yes | No | No |
| No sudo required | Yes (degraded) | No | No |
Install
pip install astop
Requires Python 3.11+ and macOS (Apple Silicon).
Usage
astop # basic mode — CPU, memory, disk, network, processes
sudo astop # enhanced mode — adds GPU, ANE, power, thermals
astop --no-sudo # force basic mode even with sudo available
astop --refresh 2 # custom refresh interval (default: 1s)
Panels
| Panel | Basic Mode | Sudo Mode |
|---|---|---|
| CPU — per-core bars + braille graph | Yes | Yes |
| GPU — utilization, frequency, power | — | Yes |
| ANE — Neural Engine utilization | — | Yes |
| Memory — usage, active, wired, compressed | Yes | Yes |
| Network / Disk — I/O rates + graph | Yes | Yes |
| Battery — charge, watts, time remaining | Yes | Yes + power breakdown |
| Processes — sortable top-N table | Yes | Yes |
Keybindings
| Key | Action |
|---|---|
q |
Quit |
p |
Pause / Resume |
r |
Force refresh |
s |
Cycle process sort (CPU / Mem / PID / Name) |
v |
Reverse sort order |
How it works
astop uses hw.nperflevels and hw.perflevel{i}.* sysctl keys to dynamically discover CPU cluster topology at startup — no chip name lookup tables. GPU, ANE, and power data come from powermetrics (requires sudo). Everything else uses psutil.
Data collection runs in parallel via asyncio + thread executors, so the TUI never blocks.
License
MIT
Metadata
Release files for astop 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| astop-0.1.1.tar.gz | 13.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| astop-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 36.9 kB
Release files / astop-0.1.1.tar.gz
| Download URL | astop-0.1.1.tar.gz |
|---|---|
| Size | 13.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
99261e29e4a165235f8b291eb426602cc6e7d8e7b40f628c886e754488be7bfb
|
|
BLAKE2b-256 checksum How to use checksums |
98cc947110f43a21d81149dd0252e80632e72d6785dbd7a2ff19f802cb8080c9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.11
|
Release files / astop-0.1.1-py3-none-any.whl
| Download URL | astop-0.1.1-py3-none-any.whl |
|---|---|
| Size | 23.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a78e9d14a71ca3f4297ea4f85d7f7d8299dc134a59ee37257d7ef0c576177cc5
|
|
BLAKE2b-256 checksum How to use checksums |
2e527719cb0eae7753eae02f5821467d8e9dab6a401316c0dcb03224609a0b66
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.11
|