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.
Offline, 3G and 4G are free with moqtap intercept --link. Your browser's
throttling dropdown has no effect on a WebTransport connection, so this is how to watch
your player on a bad link. In the browser, the WebTransport Inspector picks them for a
tab from DevTools: see network
impairment.
| Feature | Free | Pro | Team | Business | Enterprise |
|---|---|---|---|---|---|
| Link presets Throttle a session to offline, 3G or 4G with moqtap intercept --link. | Included | Included | Included | Included | Included |
| Scenario files Run any network scenario file with moqtap intercept -s. | Not included | Included | Included | Included | Included |
| Scenario library Use the online scenario library. | Not included | Included | Included | Included | Included |
| Scenario sharing Share scenarios with your organisation. | Not included | Included | Included | Included | Included |
| Headless runs Run scenarios in CI, signed in with MOQTAP_TOKEN (a personal access token or a service token). | Not included | Not included | Included | Included | Included |
| Per-track shaping Shape each track separately in a scenario file, with traffic classes and buckets. | Not included | Not included | Not included | Included | Included |
| Per-object rules Drop, delay or replace individual objects with rules in a scenario file. | Not included | Not included | Not included | Included | Included |
| Impairment API Drive network impairment from your own HTTP or socket API. | Not included | Not included | Not included | Not included | Included |
| Offline licence An offline licence for air-gapped machines, valid for the contract period. | Not included | Not included | Not included | Not included | Included |
{
"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 pick out objects by track, group, subgroup, object number or priority, then drop them, delay them, or replace their payload. Aim them at what your player relies on: the keyframe at the top of every group, or the third subgroup.
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
Every run prints the random seed it drew. Give that seed back and the run plays out the same way, so the session that broke your player can go to a colleague, a bug report or 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.
It never leaves your machine
The moqtrace Inspector opens a recording from your own disk in a page in your own browser. Nothing is uploaded and no account is needed, so a customer's capture is one you can look at.
A file you own
.moqtrace is an
open format,
implemented in 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.