An open-source Linux observability TUI built with Rust.
Combining low-overhead /proc telemetry with real-time eBPF kernel lifecycle tracing.
Live terminal recordings generated with asciinema.
Pulse started on a whim and a hand-me-down laptop.
After reviving an old machine with Arch Linux and building a custom Hyprland desktop, I found myself constantly reaching for top and htop whenever something felt slow.
Watching thousands of values update in real time sparked a question:
How can these tools continuously observe an entire Linux system without becoming the bottleneck themselves?
Arch Linux encourages understanding your system from the ground up, so I decided to extend that philosophy to application development.
Rather than treating Linux as a black box, I wanted to understand how observability works from the kernel upward—how processes are born, how resources are consumed, and how telemetry moves from the operating system into a responsive user interface.
Pulse is the result of that exploration.
Observe process activity directly from the Linux kernel.
- Kernel Event Streaming — Captures
sched_process_execandsched_process_exitevents using Aya-powered eBPF tracepoints. - Zero-Allocation Reducer — Propagates kernel events through a bounded lock-free ring buffer into the UI.
- Bounded Event History — Retains the latest 500 lifecycle events while preventing unbounded memory growth.
- Trace Lens — Dedicated dashboard (
4) highlightingEXECevents in green andEXITevents in crimson.
Real-time network interface observability.
- Interface operational status
- RX / TX throughput
- Receive and transmit errors
- Stable interface ordering
System-wide performance telemetry.
- Live CPU sparklines
- Memory utilization
- Disk read/write velocity
- Rolling historical metrics
Navigate and manage running processes.
- Stateless filtering
- Fast searching
- Namespace-aware grouping
- Send
SIGTERMandSIGKILLdirectly from the UI
Pulse uses a multi-threaded producer-consumer architecture that ensures filesystem polling and kernel event collection never block terminal rendering.
KERNEL SPACE │ USERSPACE (TUI)
│
┌──────────────────────────┐ │ ┌───────────────┐ ┌────────────────┐
│ sched_process_exec/ │ │ │ TUI Renderer │ │ Collector │
│ sched_process_exit │ │ │ (Stateless v4)│ │ (/proc parser) │
└────────────┬─────────────┘ │ └───────┬───────┘ └───────┬────────┘
│ (eBPF RingBuf) │ ▲ │
▼ │ │ │
┌──────────────────────────┐ │ View DTO Frame SystemEvent
│ ebpf_collector Thread ├──┼──────────┼──────────────────────┘
│ (Aya-driven consumer) │ │ ┌──────┴──────────┐
└──────────────────────────┘ │ │Projection Engine│◄── AppState Reducer
│ └─────────────────┘
The architecture separates collection, reduction, and rendering into independent stages, allowing Pulse to maintain responsive terminal performance even under heavy system activity.
Pulse is organized as a multi-crate Rust workspace.
| Crate | Purpose |
|---|---|
| pulse | Main application, reducers, state management and Ratatui renderer |
| pulse-common | Shared #![no_std] POD types between kernel and userspace |
| pulse-ebpf | Aya eBPF kernel program |
| xtask | Build automation, tracing utilities and CI helpers |
- Rust (Nightly)
- LLVM / Clang
bpf-linker
cargo install bpf-linkergit clone https://github.com/josiah-mbao/pulse.git
cd pulsecargo run --package xtask -- build-ebpfsudo ./target/debug/pulseSwitch between observability lenses:
| Key | Lens |
|---|---|
1 |
Fleet |
2 |
EKG |
3 |
Sentinel |
4 |
Trace |
Stream kernel lifecycle events directly to the terminal.
sudo cargo run --package xtask -- traceRun formatting, linting and tests.
cargo run --package xtask -- ciPulse is open source and released under the MIT License.
See LICENSE.


