Conversation
Adds an explicit, opt-in unreliable delivery path on Track, parallel to groups, gated behind a new wire version Lite05 / DRAFT_05 (ALPN moq-lite-05). Subscribers open a new DATAGRAMS bidi stream (0x6) for the tracks they want; QUIC datagram bodies carry `subscribe_id | sequence | payload`. Payload is capped at 1200 bytes and the publisher caches ~33 ms for late subscribers; each subscriber's `max_latency` filters stale entries on forward (`0` is strict, no congestion-delayed retries). Spec draft (datagrams section + Lite05 changelog) lives in moq-drafts. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The default Versions::all() advertises moq-lite-05 in the ALPN list, but the client/server match arms only handled up through moq-lite-04, so any peer that picked moq-lite-05 would error with UnknownAlpn. Mirror the 04 arm for 05 in both Rust (client.rs/server.rs) and TypeScript (connect.ts/accept.ts), and include ALPN_05 in the WebTransport protocols list. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Resolves merge conflicts in version.rs, lite/subscriber.rs, and model/track.rs. Renames the experimental wire version `Lite05` / `moq-lite-05` to `Lite04Datagrams` / `moq-lite-04-datagrams` per request — this variant will not be released as Draft05; it remains an experimental opt-in DATAGRAMS extension on top of Draft04. Wire code 0xff0dad05 is left unchanged for now since it only matters internally. Drops the cascading-abort-to-groups loop added on this branch (per the no-cascade rule for child handles); the parallel datagrams channel abort/finish cascade is kept since it is internal to the same TrackProducer, not a shared child entity. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Lite05/DRAFT_05(ALPNmoq-lite-05, code0xff0dad05) gating an opt-in unreliable delivery path.DATAGRAMSbidi control stream (0x6) parallel toSUBSCRIBE. Sharing the samesubscribe_idnamespace lets a single QUIC datagram body be routed by ID alone.subscribe_id (i) | sequence (i) | payload (b), payload capped at 1200 B. The sequence number is preserved on the wire (ignored by Lite05 semantics) so a future moq-transport adapter can reuse the same encoding.max_latencyfilters stale entries on forward.max_latency = 0is strict: only fresh arrivals (no congestion-delayed retries).TrackProducer.write_datagram/append_datagram,TrackConsumer.subscribe_datagrams→DatagramsConsumer. JS exposesTrack.writeDatagram/appendDatagram/recvDatagram/skipDatagramsToLatest.Files
lite/datagram.rs(wire) andmodel/datagram.rs(model) added;model/track.rs,lite/publisher.rs,lite/subscriber.rs, version +ControlTypeenums updated.lite/datagram.ts(wire) anddatagram.ts(model) added;track.ts,lite/connection.ts,lite/publisher.ts,lite/subscriber.ts, version +StreamIdupdated.Test plan
cd rs/moq-lite && cargo test(302 tests, 17 new)cd js/lite && bun test(252 tests, 12 new)just checkclean across all crates and JS workspacesmoq-lite-05peers exchange datagrams viamoq-relay; verify 33 ms cache evictionLite04↔Lite05peer never opens aDatagramsstream and never sends/receives datagram bodiesWebTransport.datagramsexercised in a watch demo against a Lite05 relayOut of scope
hang/publish/watchlayers to use datagrams🤖 Generated with Claude Code