A unified system monitoring and management tool for Linux
Rust
63
125 commits
updated Sep 20, 2026
Languages: English | Türkçe | Français | Deutsch | Español | Italiano | Русский
A unified system monitoring and management tool for Linux
PULS combines high-fidelity resource monitoring with native Linux system administration capabilities. It allows you to monitor hardware telemetry, manage systemd services, inspect journal logs, analyze hierarchical process trees, send POSIX signals, edit boot configurations safely, and monitor container lifecycles directly from an interactive Terminal User Interface (TUI).
PULS is written in Rust, leveraging ratatui and crossterm for UI rendering while communicating directly with the Linux kernel and native system tools:
/proc, /sys).statvfs), and battery power telemetry (/sys/class/power_supply/).nvidia-smi queries for NVIDIA GPUs. Tracks VRAM utilization, PCIe link generation and width, fan RPM, power draw against power limits, and hardware thermal throttling flags./etc/default/grub in memory. Review a colorized diff modal (u) before any change is committed to disk, backed up automatically with timestamped snapshots.EnableMouseCapture) for direct tab clicks and table scrolling, protected with a panic hook that safely restores standard terminal state upon termination.statvfs).^) and download (v) bandwidth rates. Active TCP/UDP socket inspector mapping local/remote IP endpoints, connection states (ESTABLISHED, LISTEN, etc.), and owning process PIDs.t) with tree glyphs (├─, └─).k or F9) supporting SIGTERM, SIGKILL, SIGHUP, SIGSTOP, SIGCONT, and SIGINT.[ to increase priority / lower nice value, ] to decrease priority / raise nice value).Enter on any process to view its open file descriptor count (/proc/[pid]/fd), active socket count, thread count, and thread-level CPU utilization (/proc/[pid]/task)./ in the Processes tab to filter running processes by name in real time; Esc clears the filter./run/user/$UID/podman/podman.sock). Start (s), Stop (x), Restart (r), Pause (p) containers, and view live streaming container logs (Enter or l).Direct integration with systemd (systemctl):
s), Stop (x), and Restart (r) services.e) or Disable (d) system services at startup.g to display the last 50 journald log entries for the selected service.systemctl list-timers) with next trigger and last trigger elapsed times.who / /var/run/utmp) and pending system reboot warnings (/var/run/reboot-required).--boot=0 for instant queries.LANG/LC_ALL or cycled at runtime (L / l).F2 / Shift+S): Interactive configuration modal to adjust Language, Color Theme, Default Startup Tab, Temperature Units (Celsius / Fahrenheit), Refresh Rate (500ms to 5000ms), and Process Tree View default. Persisted to ~/.config/puls/config.ini.| Key | Action |
|---|---|
q / Esc | Quit PULS (or close open modal dialog) |
Tab / 1..9, 0, -, = | Switch active tabs (0: Dashboard, 1: CPU, 2: Memory, 3: Processes, 4: Disks, 5: Network, 6: GPU, 7: Sensors, 8: Services, 9: Logs, 10: GRUB, 11: Containers, 12: System Info) |
Left Click | Click header tab to navigate or click Settings badge |
F2 / Shift+S / s | Open / Close Settings Configuration Modal |
L / l | Cycle interface language (EN -> TR -> FR -> DE -> ES -> IT -> RU) |
t / T | Cycle UI color theme (outside Processes tab) |
p | Pause / resume background metric collection |
? | Toggle Help & Keybindings Modal |
Up / Down / j / k / Scroll Wheel | Navigate list items and scroll modal contents |
| Key | Action |
|---|---|
t | Toggle between Flat List and Hierarchical Process Tree View |
k / F9 | Open POSIX Signal Selector Modal (SIGTERM, SIGKILL, SIGHUP, SIGSTOP, SIGCONT, SIGINT) |
[ | Increase process priority (renice -1, higher priority) |
] | Decrease process priority (renice +1, lower priority) |
Enter | Open Detailed Process Inspector (File Descriptors, Sockets, Threads) |
/ | Filter processes by name |
| Key | Action |
|---|---|
s | Start selected service |
x | Stop selected service |
r | Restart selected service |
e | Enable selected service at boot |
d | Disable selected service at boot |
g | View last 50 journald log lines for service |
| Key | Action |
|---|---|
s | Start container |
x | Stop container |
r | Restart container |
p | Pause / Unpause container |
Enter / l | Open streaming container logs modal |
| Key | Action |
|---|---|
Enter | Edit selected configuration parameter |
u | Open transactional diff review modal before saving |
The recommended portable installation uses the statically linked MUSL binary, requiring no runtime dependencies or specific glibc versions. Available for AMD64 (x86_64) and ARM64 (aarch64):
# For x86_64 (AMD64)
wget https://github.com/word-sys/puls/releases/latest/download/puls-0.9.4-x86_64-linux-musl.tar.gz
tar -xzf puls-0.9.4-x86_64-linux-musl.tar.gz
sudo mv puls /usr/local/bin/puls
# For aarch64 (ARM64)
wget https://github.com/word-sys/puls/releases/latest/download/puls-0.9.4-aarch64-linux-musl.tar.gz
tar -xzf puls-0.9.4-aarch64-linux-musl.tar.gz
sudo mv puls /usr/local/bin/puls
Install the standalone .deb package on Debian, Ubuntu, Linux Mint, or Pop!_OS:
# Download and install AMD64 package
wget https://github.com/word-sys/puls/releases/latest/download/puls_0.9.4_amd64.deb
sudo apt install ./puls_0.9.4_amd64.deb
# For ARM64 systems
wget https://github.com/word-sys/puls/releases/latest/download/puls_0.9.4_arm64.deb
sudo apt install ./puls_0.9.4_arm64.deb
If package dependencies need resolution:
sudo apt --fix-broken install
To compile PULS locally:
Prerequisites:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsudo apt install musl-tools (Debian/Ubuntu) or sudo dnf install musl-gcc (Fedora) or sudo pacman -S musl (Arch)rustup target add x86_64-unknown-linux-muslCompilation:
cargo build --release --target x86_64-unknown-linux-musl
The binary is generated at target/x86_64-unknown-linux-musl/release/puls.
PULS adapts its features according to the permissions granted:
| Command | Operating Mode |
|---|---|
puls | Standard Mode: Full monitoring of user processes, CPU, memory, disks, network, GPUs, and containers. |
sudo puls | Administrator Mode: Unrestricted access to Systemd service controls, journal logs, and GRUB editing. |
puls --safe | Safety Mode: Disables all administrative write actions (service controls, process kills, GRUB saves) to prevent accidental changes. |
puls --telemetry | Telemetry Mode: Prints diagnostic startup timing measurements to standard output during initialization. |
PULS is licensed under the GNU General Public License v3.0.
125 commits
Rust
100.0%
A unified system monitoring and management tool for Linux
Rust
63
125 commits
updated Sep 20, 2026
Languages: English | Türkçe | Français | Deutsch | Español | Italiano | Русский
A unified system monitoring and management tool for Linux
PULS combines high-fidelity resource monitoring with native Linux system administration capabilities. It allows you to monitor hardware telemetry, manage systemd services, inspect journal logs, analyze hierarchical process trees, send POSIX signals, edit boot configurations safely, and monitor container lifecycles directly from an interactive Terminal User Interface (TUI).
PULS is written in Rust, leveraging ratatui and crossterm for UI rendering while communicating directly with the Linux kernel and native system tools:
/proc, /sys).statvfs), and battery power telemetry (/sys/class/power_supply/).nvidia-smi queries for NVIDIA GPUs. Tracks VRAM utilization, PCIe link generation and width, fan RPM, power draw against power limits, and hardware thermal throttling flags./etc/default/grub in memory. Review a colorized diff modal (u) before any change is committed to disk, backed up automatically with timestamped snapshots.EnableMouseCapture) for direct tab clicks and table scrolling, protected with a panic hook that safely restores standard terminal state upon termination.statvfs).^) and download (v) bandwidth rates. Active TCP/UDP socket inspector mapping local/remote IP endpoints, connection states (ESTABLISHED, LISTEN, etc.), and owning process PIDs.t) with tree glyphs (├─, └─).k or F9) supporting SIGTERM, SIGKILL, SIGHUP, SIGSTOP, SIGCONT, and SIGINT.[ to increase priority / lower nice value, ] to decrease priority / raise nice value).Enter on any process to view its open file descriptor count (/proc/[pid]/fd), active socket count, thread count, and thread-level CPU utilization (/proc/[pid]/task)./ in the Processes tab to filter running processes by name in real time; Esc clears the filter./run/user/$UID/podman/podman.sock). Start (s), Stop (x), Restart (r), Pause (p) containers, and view live streaming container logs (Enter or l).Direct integration with systemd (systemctl):
s), Stop (x), and Restart (r) services.e) or Disable (d) system services at startup.g to display the last 50 journald log entries for the selected service.systemctl list-timers) with next trigger and last trigger elapsed times.who / /var/run/utmp) and pending system reboot warnings (/var/run/reboot-required).--boot=0 for instant queries.LANG/LC_ALL or cycled at runtime (L / l).F2 / Shift+S): Interactive configuration modal to adjust Language, Color Theme, Default Startup Tab, Temperature Units (Celsius / Fahrenheit), Refresh Rate (500ms to 5000ms), and Process Tree View default. Persisted to ~/.config/puls/config.ini.| Key | Action |
|---|---|
q / Esc | Quit PULS (or close open modal dialog) |
Tab / 1..9, 0, -, = | Switch active tabs (0: Dashboard, 1: CPU, 2: Memory, 3: Processes, 4: Disks, 5: Network, 6: GPU, 7: Sensors, 8: Services, 9: Logs, 10: GRUB, 11: Containers, 12: System Info) |
Left Click | Click header tab to navigate or click Settings badge |
F2 / Shift+S / s | Open / Close Settings Configuration Modal |
L / l | Cycle interface language (EN -> TR -> FR -> DE -> ES -> IT -> RU) |
t / T | Cycle UI color theme (outside Processes tab) |
p | Pause / resume background metric collection |
? | Toggle Help & Keybindings Modal |
Up / Down / j / k / Scroll Wheel | Navigate list items and scroll modal contents |
| Key | Action |
|---|---|
t | Toggle between Flat List and Hierarchical Process Tree View |
k / F9 | Open POSIX Signal Selector Modal (SIGTERM, SIGKILL, SIGHUP, SIGSTOP, SIGCONT, SIGINT) |
[ | Increase process priority (renice -1, higher priority) |
] | Decrease process priority (renice +1, lower priority) |
Enter | Open Detailed Process Inspector (File Descriptors, Sockets, Threads) |
/ | Filter processes by name |
| Key | Action |
|---|---|
s | Start selected service |
x | Stop selected service |
r | Restart selected service |
e | Enable selected service at boot |
d | Disable selected service at boot |
g | View last 50 journald log lines for service |
| Key | Action |
|---|---|
s | Start container |
x | Stop container |
r | Restart container |
p | Pause / Unpause container |
Enter / l | Open streaming container logs modal |
| Key | Action |
|---|---|
Enter | Edit selected configuration parameter |
u | Open transactional diff review modal before saving |
The recommended portable installation uses the statically linked MUSL binary, requiring no runtime dependencies or specific glibc versions. Available for AMD64 (x86_64) and ARM64 (aarch64):
# For x86_64 (AMD64)
wget https://github.com/word-sys/puls/releases/latest/download/puls-0.9.4-x86_64-linux-musl.tar.gz
tar -xzf puls-0.9.4-x86_64-linux-musl.tar.gz
sudo mv puls /usr/local/bin/puls
# For aarch64 (ARM64)
wget https://github.com/word-sys/puls/releases/latest/download/puls-0.9.4-aarch64-linux-musl.tar.gz
tar -xzf puls-0.9.4-aarch64-linux-musl.tar.gz
sudo mv puls /usr/local/bin/puls
Install the standalone .deb package on Debian, Ubuntu, Linux Mint, or Pop!_OS:
# Download and install AMD64 package
wget https://github.com/word-sys/puls/releases/latest/download/puls_0.9.4_amd64.deb
sudo apt install ./puls_0.9.4_amd64.deb
# For ARM64 systems
wget https://github.com/word-sys/puls/releases/latest/download/puls_0.9.4_arm64.deb
sudo apt install ./puls_0.9.4_arm64.deb
If package dependencies need resolution:
sudo apt --fix-broken install
To compile PULS locally:
Prerequisites:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsudo apt install musl-tools (Debian/Ubuntu) or sudo dnf install musl-gcc (Fedora) or sudo pacman -S musl (Arch)rustup target add x86_64-unknown-linux-muslCompilation:
cargo build --release --target x86_64-unknown-linux-musl
The binary is generated at target/x86_64-unknown-linux-musl/release/puls.
PULS adapts its features according to the permissions granted:
| Command | Operating Mode |
|---|---|
puls | Standard Mode: Full monitoring of user processes, CPU, memory, disks, network, GPUs, and containers. |
sudo puls | Administrator Mode: Unrestricted access to Systemd service controls, journal logs, and GRUB editing. |
puls --safe | Safety Mode: Disables all administrative write actions (service controls, process kills, GRUB saves) to prevent accidental changes. |
puls --telemetry | Telemetry Mode: Prints diagnostic startup timing measurements to standard output during initialization. |
PULS is licensed under the GNU General Public License v3.0.
125 commits
Rust
100.0%