Skip to main content

⚡ 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 X on 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.

  1. Bump __version__ in src/pulse/__init__.py (the package version is read from there).
  2. Update CHANGELOG.md.
  3. Confirm CI is green on main — the Linux job is the one that matters.
  4. 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

pulse_monitor-0.5.0.tar.gz (87.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pulse_monitor-0.5.0-py3-none-any.whl (79.1 kB view details)

Uploaded Python 3

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

Hashes for pulse_monitor-0.5.0.tar.gz
Algorithm Hash digest
SHA256 0ca74b3771f5403af91003503f0155fb4f07315e4fa88426b3d9fa93e5857669
MD5 57b164fb18d205363aef8ee57d672f81
BLAKE2b-256 5117971f8d84195293c2dc840210d67ecd4f9613394c8814805a94bd0bb9b6b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulse_monitor-0.5.0.tar.gz:

Publisher: publish.yml on Fatin-Ishraq/Pulse

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for pulse_monitor-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 40f1dc241377502dc3c5c1ba1be4e72a74445f1c1a3c030681431695e46d1d6e
MD5 15fc7ccb108a7684db292aaf7fb1978e
BLAKE2b-256 cd5027b235d4f80b650358058b7eb76d9b0810fa5de304bb8cc97f0ab2b05e76

See more details on using hashes here.

Provenance

The following attestation bundles were made for pulse_monitor-0.5.0-py3-none-any.whl:

Publisher: publish.yml on Fatin-Ishraq/Pulse

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.5.0 This release

2 files

0.4.0

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page