published 7/30/2026
Update 01
sup nerds.
I hit the merge button on the dev branch: +129k -24k
yes it was a pain to test/validate everything.
moq-lite-05
For those unawares, moq-lite is my subset of the official moq-transport draft.
It’s dramatically simpler and honest about supported functionality.
You know exactly what the peer will support, unlike the sprawling and perpetually optional moq-transport draft.
Anyway, here’s the new stuff (partially) cherry-picked from moq-transport:
- FETCH: Request a single group from the past. Intended for VOD/DVR, similar to HTTP.
- DATAGRAMS: Unreliable and lossy. I still claim you should never use datagrams but they’re now an option.
- PATH: For underlying transports without a path: TLS/TCP/UDS.
But moq-lite is also a testing ground, extending moq-transport with new functionality:
- TIMESTAMPS: Timestamp/timescale is now part of the transport, so relays know accurate expiration times.
- HOPS: Each announcement includes the previous hops, which identifies the shortest path and prevents cycles.
- PROBE: The sender can report/probe the estimated send rate, used for ABR.
I’ve made IETF extensions for these if anybody cares. Knock yourself out lul.
Export/Import
I want to help you support your crappy legacy formats. So you can get one foot in the MoQ door.
- moq-rtmp: Import/export RTMP streams.
- moq-rtc: WebRTC support via WHIP and WHEP.
- moq-srt: A gross protocol, please stop using it…
- moq-hls: HLS export to disk.
I’m working on supporting HLS as a live origin, so you could ingest to MoQ and serve it via an HTTP CDN.
But in order to do so, we need a timeline track to record old segments.
I AM WORKING ON IT STAY TUNED.
Stats
Each relay (or client) can now publish metrics, producing a .stats/node/<node> broadcast.
That means you can subscribe to the the (JSON) metrics like any other MoQ track.
We dog food in this bitch.
We publish cumulative metrics for each broadcast once per second.
We use JSON Merge Patch and DEFLATE to minimize the size of each update, served as a .json.z sibling of each plain track.
You don’t need to care; there’s a moq-stats crate to do all of the heavy lifting.
You might need some aggregation service, since each node publishes their own metrics independently. That’s how moq.pro works.
There’s also /metrics for Prometheus if you want to integrate with other stuff.
Boring.
moq-net API
I got the feedback that there were too many breaking API changes. That’s why I’m making one massive breaking change instead. ur welcome.
Rust + JS Stuff:
- Moved into modules: ex.
BroadcastConsumer->broadcast::Consumer. track::Consumer::subscribe()returns atrack::Subscriber, soFETCHdoesn’t require an active subscription.- And of course you can
.fetch()old groups now.
JS Only Stuff:
- Signals split into
inandoutsections, whereoutis read-only.
Rust Only Stuff:
- Global LRU to maximize cache usage, instead of a 5s hard expiration.
- Seamless subscription resumption during route changes.
The last one is cool, although kind of niche. If you establish multiple connections that can both serve broadcast A, any subscriptions will prefer the shortest path but seamlessly switch to the other path if the first one fails (or becomes higher cost).
So like… you could connect to both moq.pro and any nearby P2P peers. The P2P route is shorter so that will be preferred. If you get disconnected, the other route (moq.pro) will take over SEAMLESSLY; no need to resubscribe.
Language Bindings
Rust and TypeScript are the official languages we support, but we’re adding more languages to the party.
It’s Rust under the hood of course.
Zero chance that I would vibe code write a full implementation in other language.
We use uniffi and moq-ffi to generate the bindings. But the raw APIs are gross, so there are some “ergonomic” wrappers that feel more native. These APIs are vibe coded (I don’t know best practices in these languages) so please raise a stink if any API is gross.
- Python:
moq-rson PyPI (docs). - Go:
github.com/moq-dev/moq-go. - Kotlin:
dev.moq:moqon Maven Central (docs). - Swift:
moq-swiftvia SPM. - C:
libmoq.
Full docs for each language: doc.moq.dev/lib.
Native Media
I got tired of ffmpeg and figured I’d REWRITE IT IN RUST.
Disclaimer: this stuff is mostly vibe coded and not battle tested yet. Don’t trust it lul.
- moq-video: Capture, encode, decode, and render video. Uses hardware acceleration via OS/GPU-specific APIs. For example: moq-nvenc and moq-vaapi.
- moq-audio: Capture, encode, decode, and render audio. Duh.
- moq-transcode: On-demand transcoding utilizing FETCH.
We’re merging in relevant stuff from iroh-live so more features are coming soon. These crates will keep evolving as they actually turn into products (and get reviewed…).
FIN
IDK what else to say. Join the discord u nerd.
Written by @kixelated.
![]()