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

Read the draft

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:

But moq-lite is also a testing ground, extending moq-transport with new functionality:

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.

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:

JS Only Stuff:

Rust Only Stuff:

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.

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.

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. @kixelated