⚡ P U L S E
"Not a dashboard. An instrument panel."
Pulse is a terminal system monitor for people who want high-density telemetry with a bit of style. Built on Textual and psutil.
✨ Features
- Live telemetry for CPU, memory, disk I/O, storage, network, and processes.
- Transcendence mode — press
Xon any focused panel for a full-screen, interactive view. - Process and container control — terminate, renice, and manage Docker containers. Every destructive action confirms first and names its exact target.
- Six themes — Nord, Dracula, Monokai, Dark, Solarized, Gruvbox. Your choice is remembered.
- Configurable refresh rate, from 0.1s for micro-stutter hunting to 60s for a background glance.
How metrics are collected
On Linux, Pulse reads /proc directly and computes its own CPU and per-process deltas. On Windows it uses GlobalMemoryStatusEx for memory and psutil elsewhere; on macOS and other platforms it uses psutil throughout. psutil is a dependency on every platform.
🚀 Installation
pip install pulse-monitor
Then launch from anywhere:
pulse
Docker container monitoring is optional, because access to the Docker socket is root-equivalent on the host:
pip install "pulse-monitor[docker]"
🎮 Controls
| Key | Action |
|---|---|
Q |
Quit |
T |
Cycle theme |
Tab / Shift+Tab |
Focus next / previous panel |
Arrow Keys |
Move focus around the grid |
X |
Enter / exit Transcendence view |
F |
Freeze updates |
? / H |
Help overlay |
Inside Transcendence
| Key | Action |
|---|---|
P |
Toggle sampling precision |
S |
Cycle scaling mode |
Esc |
Back to the grid |
Process and container actions
| Key | Action |
|---|---|
K |
Terminate the selected process (asks first) |
+ / - |
Lower / raise priority |
C / M |
Sort processes by CPU / memory |
S / K / R |
Docker: start / stop / restart the selected container (asks first) |
Pulse will not act on processes where a mistake takes down your session: itself, its parent shell, PID 1 or the session leader on POSIX, and the reserved Windows system PIDs. It never escalates privileges on its own — if a kill is denied, it says so and offers a force kill as a separate, explicit choice.
⚙️ Configuration
Config lives at %APPDATA%\pulse\config.toml on Windows, $XDG_CONFIG_HOME/pulse/config.toml (usually ~/.config/pulse/) elsewhere.
[ui]
theme = "nord" # nord | dracula | monokai | textual-dark | solarized-dark | gruvbox
[core]
refresh_rate = 1.0 # seconds, clamped to 0.1 - 60.0
Unknown or out-of-range values fall back to the defaults rather than breaking startup.
🛠️ Development
git clone https://github.com/Fatin-Ishraq/Pulse.git
cd Pulse
python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[test]"
pytest
Run it from the source tree with pulse or python -m pulse.
🚀 Release Process
Publishing to PyPI uses GitHub Actions with Trusted Publishing — no API tokens in secrets.
- Bump
__version__insrc/pulse/__init__.py(the package version is read from there). - Update
CHANGELOG.md. - Confirm CI is green on
main— the Linux job is the one that matters. - Tag and push:
git tag v0.5.0 git push origin v0.5.0
The tag must match the version in __init__.py. PyPI will not accept a version
number twice, so a mismatched tag burns that version permanently.
📜 License
MIT © Fatin Ishraq
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pulse_monitor-0.5.0.tar.gz.
File metadata
- Download URL: pulse_monitor-0.5.0.tar.gz
- Upload date:
- Size: 87.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0ca74b3771f5403af91003503f0155fb4f07315e4fa88426b3d9fa93e5857669
|
|
| MD5 |
57b164fb18d205363aef8ee57d672f81
|
|
| BLAKE2b-256 |
5117971f8d84195293c2dc840210d67ecd4f9613394c8814805a94bd0bb9b6b1
|
Provenance
The following attestation bundles were made for pulse_monitor-0.5.0.tar.gz:
Publisher:
publish.yml on Fatin-Ishraq/Pulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pulse_monitor-0.5.0.tar.gz -
Subject digest:
0ca74b3771f5403af91003503f0155fb4f07315e4fa88426b3d9fa93e5857669 - Sigstore transparency entry: 2491905918
- Sigstore integration time:
-
Permalink:
Fatin-Ishraq/Pulse@1bfc3c458c5ad27ad7a48a9936e257c338e040a8 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/Fatin-Ishraq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bfc3c458c5ad27ad7a48a9936e257c338e040a8 -
Trigger Event:
push
-
Statement type:
File details
Details for the file pulse_monitor-0.5.0-py3-none-any.whl.
File metadata
- Download URL: pulse_monitor-0.5.0-py3-none-any.whl
- Upload date:
- Size: 79.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
40f1dc241377502dc3c5c1ba1be4e72a74445f1c1a3c030681431695e46d1d6e
|
|
| MD5 |
15fc7ccb108a7684db292aaf7fb1978e
|
|
| BLAKE2b-256 |
cd5027b235d4f80b650358058b7eb76d9b0810fa5de304bb8cc97f0ab2b05e76
|
Provenance
The following attestation bundles were made for pulse_monitor-0.5.0-py3-none-any.whl:
Publisher:
publish.yml on Fatin-Ishraq/Pulse
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pulse_monitor-0.5.0-py3-none-any.whl -
Subject digest:
40f1dc241377502dc3c5c1ba1be4e72a74445f1c1a3c030681431695e46d1d6e - Sigstore transparency entry: 2491905969
- Sigstore integration time:
-
Permalink:
Fatin-Ishraq/Pulse@1bfc3c458c5ad27ad7a48a9936e257c338e040a8 -
Branch / Tag:
refs/tags/v0.5.0 - Owner: https://github.com/Fatin-Ishraq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1bfc3c458c5ad27ad7a48a9936e257c338e040a8 -
Trigger Event:
push
-
Statement type: