moqtap CLI
Put a proxy between your client and the relay and read every frame as it passes. Degrade the path on purpose — loss, delay, a capped rate, objects dropped by rule — and watch what your player does about it. Record the session and read it back afterwards.
Ask for early access and we will come to you when there is a binary to install. Available today: the WebTransport Inspector and the protocol libraries.
One binary, four jobs
Watch a session go past, make it go badly, ask a relay directly, or read back one you recorded earlier.
Intercept
A transparent proxy that sits between your MoQT client and relay. See control messages, stream lifecycle, objects, datagrams, and errors.
- Live frame-by-frame decoding
- Color-coded directional output (C→R / R→C)
- Session recording to .moqtrace files
- Filtering by control, data, or session ID
- JSON output for piping to jq
- WebTransport support (listen and upstream)
Degrade
ProThe same proxy, running a scenario file: what the path underneath QUIC does, what each leg negotiates, how egress is shaped, and what happens to individual objects.
- Networks by name — LTE, Wi-Fi, satellite, 3G
- Loss, delay, jitter and reordering
- Bandwidth ceilings and queueing
- Rules that hit individual objects
- Conditions that change mid-session
- The same bad session, on demand
Peek
A lightweight MoQT client that connects directly to a relay to probe its capabilities, discover namespaces and tracks, and retrieve sample data.
- Relay info & draft version detection
- Namespace discovery
- Track enumeration via catalog
- Data retrieval (latest group or object)
- Media format detection (JSON, fMP4, LOC, MSF)
- Pipeable raw output and JSON mode
Replay
A session you recorded, read back from the file: the same decoded view in the terminal, or the same session opened in the browser inspector.
- Recorded from any session
- The decoded view again, offline
- Opens in the browser inspector
- JSON out, for scripts and diffs
- An open, documented format
- Nothing leaves your machine
Intercept mode
Break it on purpose
ProEverything works on a clean network. What you need to know is what your player does when the path is not clean — so the proxy that decodes the session is also the thing that can ruin it, from a file that says exactly how.
Scenario-driven degradation is a Pro feature. Default link degradation — offline, 3G and 4G — is free, and the CLI is what runs it. Your browser's own throttling dropdown has no effect on a WebTransport connection, so this is the only way to watch your player on a bad link. From v1 the moqtap Extension detects a running CLI and drives it from the panel.
{
"version": 1,
"network": { "preset": "lossy-edge" },
"rules": [
{
"name": "lose-the-first-object-of-every-group",
"matcher": { "object_id": [{ "start": 0, "end": 0 }] },
"action": "drop"
}
],
"timeline": [
{
"at": { "secs": 30, "nanos": 0 },
"network": { "preset": "satellite" }
}
]
} What the scenario did arrives in the same stream as everything else — and in the recording.
Networks by name
LTE, Wi-Fi, satellite, 3G, a lossy access edge, a bufferbloated link — and a clean datacentre path to measure the others against. Or describe your own: loss, delay, jitter, reordering, duplication, corruption, capacity.
Down to the single object
Rules that pick out a track, a group, a subgroup or one object and drop it, hold it back, or change what it carries. The keyframe at the top of every group, the third subgroup, every object over a size — whatever your player is quietly relying on.
It gets worse while it runs
A session that starts clean and falls apart thirty seconds in, a satellite hop that appears mid-stream, a bandwidth ceiling that drops under a running subscription. Recovery is a behaviour, and it only shows up when conditions move.
The same bad session again
A bad network is random, which normally means the run that broke your player cannot be shown to anyone. Every run prints the seed it drew, and a run given that seed back plays out the same way — for a colleague, for a bug report, for CI.
Peek mode
Connect straight to a relay and ask it what it is, what it is carrying, and what the media looks like — without writing a client to find out.
Four questions you would otherwise answer by writing a client.
Recorded now, read later
A session you watched go past is gone. A session you recorded is a file — one you can read again, diff against yesterday's, and hand to whoever owns the other end of the connection.
Opening a recording in the moqtrace Inspector hands it from your own disk to a page in your own browser. Nothing is uploaded, and there is no account in the way — which is what makes a customer's capture something you can actually look at.
.moqtrace is an
open format,
implemented in both Rust and JavaScript — the CLI, the browser extension and anything you
write yourself read the same recording.
Frequently asked questions
What is the moqtap CLI?
What is intercept mode?
What is peek mode?
Can I test what my player does on a bad network?
What is a .moqtrace file?
How do I configure the relay URL?
Which MoQT draft versions are supported?
Can I download it?
Will the CLI be free?
See inside the protocol
Early access is open, and every command and flag is already in the CLI reference. For MoQT over WebTransport in a page, the WebTransport Inspector brings the same decoding to your browser's DevTools today.