A terminal-based flamegraph viewer that receives profiling data via an OTLP gRPC endpoint and renders a live, interactive flamegraph in the terminal. It can be used to visualize profiling data generated by opentelemetry-ebpf-profiler.
- OTLP gRPC profiles receiver (default
0.0.0.0:4317, configurable via--port) - Live icicle-style flamegraph with hot/warm color scheme
- Freeze/live toggle to pause updates for smooth navigation
- Frame type annotations (
[Native],[Kernel],[JVM], etc.) - Thread/process grouping via
thread.namesample attribute - Keyboard-driven navigation and zoom
- Thread search (
/) with fuzzy filtering - Experimental: Flamescope tab (https://www.brendangregg.com/flamescope.html)
- Experimental: Executables tab β load debug symbols from ELF/DWARF binaries for inline-aware symbolization (persistent LSM-tree store survives restarts)
No Rust toolchain required β you can run eprofiler-tui directly with Docker or Podman:
podman run -it -p 4317:4317 ghcr.io/rogercoll/eprofiler-tui:latest --data-dir /tmp
Replace
podmanwithdockerif preferred.
Alternatively, install from source with Cargo:
cargo install --git https://github.com/rogercoll/eprofiler-tui
The TUI will start and listen for OTLP profile data on port 4317. Point your OpenTelemetry profiling agent at localhost:4317.
To use a different port:
# With Cargo install:
eprofiler-tui --port 4318
| Option | Description |
|---|---|
-p, --port <PORT> |
OTLP gRPC listen port (default: 4317) |
-d, --data-dir <PATH> |
Symbol store directory (default: ~/.local/share/eprofiler-tui on Linux, ~/Library/Application Support/eprofiler-tui on macOS) |
-h, --help |
Print help |
A standalone profile inspector for troubleshooting profiling pipelines. It receives OTLP profiles on a gRPC endpoint and displays each ExportProfilesServiceRequest as a paginated, color-coded view of the raw data β dictionary tables, resource attributes, scope metadata, profile fields, and fully resolved sample stacks.
eprofiler-tui debug
eprofiler-tui debug --port 4318
Navigate between requests like pages in a book with h/l. Each page shows the complete request: string table, mapping table, attribute table, function table, resource attributes, scope info, profile metadata, and every sample with its stack trace rendered as a tree with frame-type colors.
| Key | Action |
|---|---|
h / β l / β |
Previous / next request |
j / β k / β |
Scroll up / down |
d / u |
Page down / up |
g / G |
Jump to first / last request |
/ |
Search within current request |
n / N |
Next / previous match |
q |
Quit |
Requires Rust 2024 edition and protobuf definitions from the opentelemetry-proto submodule.
The symbolization feature (symblib) pulls in native C/C++ dependencies that need extra build tools:
cmakeandmakeβ used by thezydisdisassembler crateg++(or any C++ compiler) β compileszydis's bundled C sourcesprotobuf-compiler(protoc) β used byprost-buildto compile.protodefinitions insidesymblib
git submodule update --init
cargo build --release
Global: Tab switch tab, Ctrl-c / q quit.
Flamegraph tab
| Key | Action |
|---|---|
f / Space |
Toggle freeze/live mode |
j / β k / β |
Navigate depth |
h / β l / β |
Navigate siblings |
Enter / Esc |
Zoom in / out |
/ |
Search threads |
r |
Reset |
Executables tab (experimental β under testing, may be removed for simplification)
| Key | Action |
|---|---|
j / k |
Navigate list |
Enter |
Load symbols for selected executable |
/ |
Add new executable by path |
r |
Remove loaded symbols |


