streamtop
Terminal diagnostics for live HLS, DASH, and IPTV streams.
Latest release: v1.0.0 (streamtop --version).
Install
cargo
# or: cargo install cargo-binstall && cargo binstall streamtop
Scoop (Windows)
scoop bucket add streamtop https://github.com/Jorji49/streamtop
scoop install streamtop/streamtop
Winget (Windows)
In review: microsoft/winget-pkgs#425258.
winget install streamtop
Homebrew
Formula in this repo:
Arch (binary package)
AUR submission is not listed yet. Use the packaging mirror:
Source: dist/aur/PKGBUILD.
Docker
Metrics on a non-loopback bind require a token:
Debian package
From source
Binaries: GitHub Releases.
Quick start
--probe-headers requests only the first bytes of each segment (faster; enough for headers and wire checks).
UI overview
| Area | Contents |
|---|---|
| Status | URL, LIVE / ESTIMATED, SHI, FPS, GOP / audio badges, latency, CDN, buffer, G2G, LL-HLS |
| Last segment | Seq, sizes, DNS / TCP / TLS / TTFB, container, GOP interval, audio |
| ABR ladder | Bitrate, resolution, FPS, codecs. [wire] is from the bitstream; red = manifest vs wire mismatch |
| Charts | Latency or TTFB; download rate or transfer time |
| Log | Warnings, ads (SCTE-35), stalls, HTTP errors |
FPS prefers playlist FRAME-RATE / @frameRate, otherwise the bitstream when available. GOP interval comes from keyframe PTS across segments (Fixed or Variable). Audio codec / rate / channels come from ADTS, fMP4, or MPEG-TS PMT in the probe window.
Usage
# Dashboard
# Side-by-side compare
# Webhooks (Slack / Discord / HTTP). Private and metadata hosts blocked by default.
# Channel list audit → audit_report.json / .csv
# Headless PASS/FAIL (CI). Schema: schemas/summary.v1.json
# Curl / HAR for the last segment (secrets redacted)
# Profile from ~/.config/streamtop/config.toml (see config.example.toml)
# Prometheus /metrics (default bind 127.0.0.1:9184)
# curl -H "Authorization: Bearer $STREAMTOP_METRICS_TOKEN" http://host:9184/metrics
# Query ?token= is not accepted; Bearer header only.
# DRM key / LA_URL TTFB (SSRF-filtered; no redirects)
# Grafana dashboard JSON → streamtop-grafana.json
--alert-on values: stall, shi_below_70, http_5xx, mismatch, ad_start.
Non-loopback --metrics-bind requires a non-empty --metrics-token or STREAMTOP_METRICS_TOKEN.
Keys
| Key | Action |
|---|---|
q / Esc / Ctrl+C |
Quit (Esc leaves the channel list when open) |
Space |
Write diagnostics/… report (URLs and secrets redacted) |
c |
Copy curl for the last segment (redacted) |
p |
Play with mpv or ffplay (not in Docker) |
r |
Reset metrics |
Tab |
Channel overlay |
? |
Help |
/ |
Search channel list |
j / k |
Scroll log or channel list |
Compare mode: Space pause/resume, d detail, l log focus, c curl, h HAR, Tab switch pane.
License
MIT.