streamtop 0.3.2

HLS/DASH/IPTV stream diagnostics TUI and CLI
Documentation

streamtop

Crates.io Downloads License: MIT

Live HLS, DASH, and IPTV stream diagnostics in the terminal.

Installation

Rust ecosystem (recommended)

cargo install streamtop

Fast binary install (no compile), after cargo-binstall:

cargo install cargo-binstall

cargo binstall streamtop

Windows — Scoop

scoop bucket add streamtop https://github.com/Jorji49/streamtop
scoop install streamtop/streamtop

Windows — Winget

winget install streamtop

Catalog ID is Jorji49.streamtop (winget requires Publisher.Package); install resolves via the streamtop moniker. PR: microsoft/winget-pkgs#424445.

Until the catalog indexes, from a clone (admin once: winget settings --enable LocalManifestFiles):

winget install --manifest .\dist\winget

macOS / Linux — Homebrew

brew tap Jorji49/tap

brew install streamtop

One-shot without a tap:

brew install --formula https://raw.githubusercontent.com/Jorji49/streamtop/main/Formula/streamtop.rb

Arch Linux (AUR template)

dist/aur/PKGBUILD is ready for streamtop-bin. Publish it to the AUR, then:

yay -S streamtop-bin

Docker

docker run -it --rm ghcr.io/jorji49/streamtop:latest <URL>

Requires the GHCR package to be public (GitHub → Packages → streamtop → Package settings → Change visibility).

Debian / Ubuntu (.deb)

cargo install cargo-deb

cargo deb

sudo dpkg -i target/debian/streamtop_*.deb

Manual binary / build from source

# Linux x86_64 example

curl -fsSL -o streamtop.zip \

  https://github.com/Jorji49/streamtop/releases/download/v0.3.1/streamtop-linux-x86_64-0.3.1.zip

unzip streamtop.zip && chmod +x streamtop && sudo mv streamtop /usr/local/bin/

git clone https://github.com/Jorji49/streamtop.git

cd streamtop

cargo install --path .

Windows: if the linker fails, put WinLibs MinGW on your PATH, then rebuild.

Quick start

streamtop "https://example.com/master.m3u8"

streamtop "https://example.com/manifest.mpd" --probe-headers

streamtop "./channels.m3u"

--probe-headers downloads only the start of each segment (faster, enough for header and wire checks).

What you see

Area Meaning
Status URL, LIVE / ESTIMATED, health score (SHI), video FPS, latency, CDN, buffer, [LL-HLS] part timing
Last segment Sequence, sizes, DNS / TCP / TLS / TTFB, container type
ABR ladder Bitrates, resolution, FPS, codecs — [wire] = from the bitstream, red = manifest vs wire mismatch
Charts Latency or TTFB, download rate or transfer time
Log Warnings, ads (binary SCTE-35), stalls, HTTP errors

FPS comes from the playlist (FRAME-RATE / @frameRate) when present; otherwise from the media bitstream when it can be read.

Commands

# Live dashboard

streamtop <URL> [--probe-headers] [-H "Key: Value"] [-A user-agent] [-i MS]


# Compare two feeds side by side

streamtop --compare <URL_1> <URL_2> --probe-headers


# Webhook alerts (Slack / Discord / any HTTP endpoint)

streamtop <URL> --webhook https://hooks.example/x --alert-on stall,shi_below_70,http_5xx


# Channel list audit → audit_report.json / .csv

streamtop ./channels.m3u --audit


# Headless pass/fail (CI)

streamtop <URL> --summary --timeout 10


# Prometheus metrics on :9090/metrics

streamtop <URL> --prometheus


# Grafana dashboard JSON (import; scrape streamtop --prometheus)

streamtop --export-grafana

Alert kinds for --alert-on: stall, shi_below_70, http_5xx, mismatch, ad_start.

Keys

Key Action
q / Esc / Ctrl+C Quit (Esc returns to channel list when one is open)
Space Save report under diagnostics/
c Copy a curl for the last segment
p Quick Play via mpv or ffplay (non-blocking)
r Reset metrics
Tab Channel overlay
? Help
/ Search in channel list
j / k Scroll log or channel list

License

MIT — see LICENSE.