Repository navigation
moq-relay v0.15.0
·
2771 commits
to main
since this release
What's Changed
- fix(js/net): bump @moq/qmux to 0.3.1 for two WebSocket fallback bugs by @fperex in #2521
- feat(hang,mux,hls): rework the timeline as a single track of complete segments by @kixelated in #2547
- refactor(net, relay): reshape the GOAWAY API and move migration into Reconnect by @kixelated in #2542
- feat(js/publish): publish files by demuxing them, not by capturing a MediaStreamTrack by @kixelated in #2541
- feat(js/publish): fan captured media out to every consumer by @kixelated in #2561
- feat(net): start and end subscriptions and fetches at a specific frame by @kixelated in #2537
- feat(moq-hls): serve DASH manifests from the timeline by @kixelated in #2566
- chore: merge main into dev by @kixelated in #2576
- feat(mux)!: leave audio group boundaries to the caller, group fMP4 by segment by @kixelated in #2568
- refactor(net)!: carry subscription bounds as positions by @kixelated in #2569
- feat(net): prune spliced segments, advertise drains, and treat SUBSCRIBE_START as a drop signal by @kixelated in #2575
- fix(net): keep parked groups across a prune and revive a buried route by @kixelated in #2582
- test(net): name the spin the misaligned-copy test actually guards by @kixelated in #2586
- feat(demo): add a copy-logs button to the console overlay by @fperex in #2633
- feat(moq-mux)!: rename consumer latency methods by @kixelated in #2682
- feat(moq-net): specify the error code registries and split SessionError from StreamError by @kixelated in #2620
- fix!: reject a catalog whose broadcast reference escapes the root by @kixelated in #2630
- refactor(js/net)!: drop transport from ReloadProps by @kixelated in #2665
- chore(js/net): defer version bump by @kixelated in #2691
- feat(moq-native): make connect return a reconnecting Connection handle by @kixelated in #2614
- fix(net): support Chromium WebTransportError constructor by @kixelated in #2698
- fix(moq-net): name a broadcast by where its reader found it by @kixelated in #2694
- feat(moq-ffi): sessions reconnect automatically by @kixelated in #2618
- feat(relay): configure fallback cache retention by @kixelated in #2702
- feat(moq-net)!: add a Latency type and standardize on latency_max by @kixelated in #2688
- feat(native): mesh MoQ peers over the LAN with mDNS by @kixelated in #2585
- refactor(moq-native)!: split Server into a builder and a Listener by @kixelated in #2700
- feat(rtmp,srt,rtc): honor
--latency-maxon the gateway ingest paths by @kixelated in #2660 - refactor(moq-mux)!: split the fMP4 init segment out of Fragment by @zshenker in #2692
- fix(net): remove linger; a broadcast closes with its last source by @kixelated in #2704
- chore: update web-transport dependencies by @kixelated in #2717
- fix(watch)!: move rendition jitter to decoder by @kixelated in #2747
- fix(js/net): resolve nextGroup as finished when the track closes above the cap by @kixelated in #2766
- fix(moq-cli): follow the decode latency rename in play by @kixelated in #2777
- fix(net): transmit groups in sequence order for ordered subscriptions by @kixelated in #2767
- refactor(moq-mux)!: scope mp4-atom re-export to fmp4 by @kixelated in #2781
- Merge main into dev by @kixelated in #2790
- fix(moq-net): drop every empty subscription range, not just group 0 by @kixelated in #2791
- fix(relay): give a peer one key across both discovery paths by @kixelated in #2793
- refactor(net)!: require the poll-based transport interface by @kixelated in #2736
- fix(js/net): stop dropping a prefetched group when the cap drops by @kixelated in #2796
- feat(js/net)!: route publish and consume through Origins, share one connection per relay by @kixelated in #2705
- fix(js/net): honor frame floor for a held group by @kixelated in #2818
- refactor(moq-native)!: name the endpoint roles connect and listen by @kixelated in #2750
- fix(js/net): serialize subscription updates with group pops by @kixelated in #2820
- feat(js)!: default standalone components to enabled by @kixelated in #2872
- Merge main into dev by @kixelated in #2852
- fix(cli): serve TCP and Unix listeners without QUIC by @kixelated in #2879
- Merge main into dev by @kixelated in #2883
- refactor(libmoq)!: replace the client setters with a config struct by @kixelated in #2880
- feat(rs)!: rename moq-native to moq-tokio by @kixelated in #2896
- feat(libmoq)!: configure and label media renditions by @sreejon in #2831
- feat(kio): Tasks, the poll-native FuturesUnordered by @kixelated in #2901
- refactor(net)!: make the origin lifecycle caller-driven by @kixelated in #2897
- feat(mux)!: carry standalone SI on per-table snapshot tracks by @kixelated in #2909
- test(ts): reach the sparse EIT schedule and pending-version cases by @t0ms in #2920
- fix(cli)!: refuse the renamed flags with a migration instead of ignoring them by @kixelated in #2915
- refactor(bindings)!: split media publishing by kind by @kixelated in #2927
- feat(moq-net): enforce the subscriber latency budget by @kixelated in #2890
- feat(mux): proxy TDT/TOT as a latest-value SI slot by @kixelated in #2929
- fix(moq-mux)!: let a Rendition be the only thing that writes its catalog slot by @kixelated in #2869
- feat(ffi): decode video inside the bindings by @kixelated in #2930
- fix(ffi)!: carry the rendition's broadcast reference across the FFI by @kixelated in #2936
- fix(ffi): release the state when a handle is cancelled by @kixelated in #2935
- test(mux): read the SI history with a latency budget that keeps it by @kixelated in #2948
- docs: scope the LAN mesh to the LAN, and document the firewall case by @kixelated in #2942
- chore: merge main into dev by @kixelated in #2951
- fix(tokio)!: leave process signals to the owner of the accept loop by @kixelated in #2952
- feat(go)!: publish the wrapper as moq.dev/moq by @kixelated in #2957
- fix(js/net)!: separate session and stream errors by @kixelated in #2794
- refactor(net)!: replace the Latency type with a plain
max_ageduration by @kixelated in #2955 - feat(relay): serve QUIC from pinned per-core workers, steered by connection ID (M1) by @kixelated in #2921
- feat(net)!: price a route warm and cold so warm relays can be ranked by @kixelated in #2925
- fix(moq-mux): emit SI when the snapshot changes, floor the repeats by @kixelated in #2971
- fix(tokio): refuse a listen address an existing reuseport group holds by @kixelated in #2977
- feat(uring): add the M3 UDP batching spike by @kixelated in #3003
- feat(js/net): enforce the subscriber latency budget by @kixelated in #2926
- Compile the udp_tokio bench stub off Linux by @kixelated in #3010
- refactor!: hide media backend error types by @dependabot[bot] in #3019
- feat(hang): define segment-addressed recordings by @kixelated in #2574
- feat(moq-tokio): identify peers by certificate fingerprint by @kixelated in #2944
- fix(moq-tokio): enforce peer identity configuration by @kixelated in #3040
- feat(net)!: inject an explicit Runtime for session timers and machines by @kixelated in #3007
- feat(uring): add the thread-per-core worker skeleton by @kixelated in #3014
- feat(net)!: sever Session from the transport by @kixelated in #3027
- feat(kio): let Tasks hold named machines, unboxing the protocol children by @kixelated in #3028
- feat(net)!: run moq-lite machines unboxed over any transport by @kixelated in #3031
- feat(uring): run moq-lite sessions over quiche on the worker by @kixelated in #3033
- feat(net)!: divide one connection's bandwidth estimate among its tracks by @kixelated in #2854
- feat(cli)!: migrate command-line parsing to usage-rs by @kixelated in #3030
- refactor(watch)!: let Sync own the instant latency by @kixelated in #3068
- feat(uring): serve many QUIC connections per socket with an Endpoint by @kixelated in #3073
- fix(net)!: enforce the loop-free hop chain where chains are built by @kixelated in #3066
- feat(sock): extract the shared listener plumbing and steer the uring endpoint by @kixelated in #3078
- fix(net): record the placeholder-rewrite decline like every other by @kixelated in #3091
- feat(uring): speak WebTransport for browser peers by @kixelated in #3081
- feat(relay): serve QUIC from io_uring workers by @kixelated in #3082
- fix(relay): give the io_uring listener its certificate and mTLS by @kixelated in #3116
- fix(uring): close abandoned handshakes and stop conflating H3 codes by @kixelated in #3110
- feat: build every quiche consumer from the moq-dev/quiche fork by @kixelated in #3117
- perf(uring): skip event sweeps between GSO trains by @kixelated in #3134
- feat(uring): serve QUIC from quinn-proto as well as quiche by @kixelated in #3131
- fix: restore upstream quiche dependencies by @kixelated in #3148
- perf(uring): use fast hashes for trusted packet maps by @kixelated in #3135
- fix(moq-tokio): check isolated feature builds by @kixelated in #3150
- perf(uring): use fast hashes for the quinn backend's trusted maps by @kixelated in #3155
- perf(uring): grow the UDP pools when a socket starves by @kixelated in #3133
- fix(relay)!: make Config embeddable by deriving Args, not Cli by @kixelated in #3118
- feat(net)!: resolve the subscribe start from max age, with Group Start as an absolute floor by @kixelated in #3158
- feat(cli): complete broadcast, track, and capture-source names at the prompt by @kixelated in #3156
- feat(json): let a snapshot publisher cut a group by @kixelated in #3146
- Remove the Ended announce flag from moq-lite by @kixelated in #3034
- refactor(net)!: make group delivery order a handle, and retire the Ordered wire field by @kixelated in #3099
- fix(net): bound reach by the immediate successor, and collapse snapshots mid-roll by @kixelated in #3167
- fix(nix): resolve third-party kio from crates.io by @kixelated in #3162
- test(uring): pin down what a send staged on the way out is owed by @kixelated in #3153
- fix(js): validate fanout queue limits by @kixelated in #3176
- fix(publish): apply audio gain before the first frame by @kixelated in #3178
- fix(uring): cancel staged receives on worker drop by @kixelated in #3180
- perf(net): avoid repeated live-edge scans by @kixelated in #3196
- feat(net): move wall-clock LRU expiry to the cache pool by @kixelated in #3169
- fix(tokio): require explicit QUIC crypto providers by @kixelated in #3210
- test(net): cover subscriber catch-up lifecycle by @kixelated in #3213
- perf(net): bound group expiry scans by @kixelated in #3223
- fix(js/net): stop Reload after terminal failure by @kixelated in #3177
- refactor(rs)!: keep dependency errors out of public APIs by @kixelated in #3243
- feat(mux): defer timeline publication by @kixelated in #3240
- refactor(net)!: name the hop identifier Hop, and fix three API shapes the review found by @kixelated in #3252
- refactor(net): finish the Hop rename in test names and log fields by @kixelated in #3264
- feat(hang): add json and binary data tracks to the catalog by @kixelated in #3109
- fix(net): shed a stale backlog on the ordered cursor, not just a blocking read by @kixelated in #3251
- feat(net)!: announcements are prefix routes by @kixelated in #3225
- fix(rtc): migrate round-trip test to routed origins by @kixelated in #3284
- fix: complete post-merge API migrations by @kixelated in #3285
- bench: compare relay runtime topologies by @kixelated in #3272
- chore(quest): abandon kio wake optimization by @kixelated in #3299
- fix: repair draft-20 merge regressions by @kixelated in #3301
- fix(moq-mux): wait for late groups within the max age budget by @kixelated in #3270
- fix(stream): detect a rolled log without waiting for the group to end by @kixelated in #3282
- perf(uring): reuse egress driver allocations by @kixelated in #3292
- docs(drafts): drop the warm discount and adoption rank from moq-lite by @kixelated in #3278
- feat(net)!: resume subscriptions across routes sharing a first hop by @kixelated in #3312
- perf(net): reuse cache ticks for settlement by @kixelated in #3296
- perf(net): coalesce priority queue reorders by @kixelated in #3298
- perf(uring): send owned stream buffers without copying by @kixelated in #3293
- chore(quest): track the priority queue follow-ups from #3298 by @kixelated in #3318
- chore(quest): truncate the group send order instead of rebasing it by @kixelated in #3319
- fix(net): stamp the parallel write clock after the writers are ready by @kixelated in #3321
- feat(tokio)!: run local futures on pinned workers by @kixelated in #3303
- refactor(net): route datagrams in place and cover delivery end to end by @kixelated in #3306
- chore(quest): settle the send order scalar, split out the scheduler by @kixelated in #3320
- perf(net): unnest group locks from track delivery by @kixelated in #3295
- feat: default QUIC backends to noq by @kixelated in #3342
- perf(net): coalesce relay ingest notifications by @kixelated in #3294
- chore(quest): plan the web P2P questline by @kixelated in #3390
- fix: repair dev, which the last main merge left uncompilable by @kixelated in #3399
- feat!: split moq-watch latency into delay + buffer, and rename --latency-max by @kixelated in #3396
- chore(quest): plan the native playout clock by @kixelated in #3398
- fix(moq-hls): stop rebuilding renditions on catalog estimate churn by @kixelated in #3406
- fix(relay): make the web listeners share one socket-capturing acceptor by @kixelated in #3415
- fix(moq-video): make moq-video compile on dev again by @kixelated in #3423
- docs(quest): fold the stream scheduler prototype into the noq scheduler quest by @kixelated in #3430
- feat(uring): report per-worker io_uring counters at /metrics by @kixelated in #3408
- fix(js/net): key the publisher's TRACK_INFO cache by broadcast, not path by @kixelated in #3422
- fix(moq-audio): give the publish-then-read tests an age budget by @kixelated in #3441
- feat(go)!: make every blocking operation cancellable with context by @kixelated in #3412
- feat(uring): write qlog traces from the io_uring workers by @kixelated in #3420
- fix(net): reclaim an idle open group without waiting for a write by @kixelated in #3419
- feat(net)!: fold serving into origin::Producer::dynamic and let broadcasts announce themselves by @kixelated in #3400
- feat(moq-tokio): give the quiche backend the shared certificate semantics by @kixelated in #3418
- test(moq-net): drive a late group through the IETF uni dispatch loop by @kixelated in #3437
- refactor(moq-sock)!: centralize reuseport group formation by @kixelated in #3414
- feat(relay)!: add --auth-api-mode proxy, where the endpoint decides by @kixelated in #3044
- docs: abandon fMP4 export timestamp rebasing quest by @kixelated in #3451
- docs(drafts): specify standalone pattern advertisements and cluster routing by @kixelated in #3457
- fix(ffi)!: carry Opus frame durations in microseconds by @kixelated in #3410
- feat(moq-tokio): expose the QUIC flow-control windows by @kixelated in #3446
- fix(moq-tokio): default the GOAWAY redirect policy to same-host by @kixelated in #3448
- fix(js/net): send the stream code a locally raised error means by @kixelated in #3449
- feat(net): add path patterns to moq_net::path and @moq/net by @kixelated in #3458
- fix(moq-hls): bind a named sibling rendition when it is created by @kixelated in #3445
- fix(tokio): compile every subset of the transport features by @kixelated in #3439
- fix(moq-net): map stream reset codes to the negotiated moq-transport draft by @kixelated in #3450
- fix(net): commit an unused-driven track teardown atomically by @kixelated in #3455
- test(obs): put the libmoq stubs in the merge gate by @kixelated in #3463
- refactor(tokio): one abort-on-drop guard per crate instead of five by @kixelated in #3472
- fix(uring): name the backend crate directly in the connection tests by @kixelated in #3502
- fix(moq-relay): judge credential expiry against the deadline, not a span by @kixelated in #3503
- feat(cli): a real playout clock for moq play, with a --delay offset by @kixelated in #3528
- fix(publish)!: restore Firefox hardware encoding and scale screen sources by @kixelated in #3535
- fix(moq-net): send registered moq-transport request error codes by @kixelated in #3531
- docs(quest): groom m1 against dev and keep only what the merge needs by @kixelated in #3564
- fix(moq-mux)!: retain publisher burst jitter and reject invalid catalog edits by @kixelated in #3513
- fix(moq-mux)!: make an fMP4 export fragment a group, on every track by @kixelated in #3573
- docs(quest): plan the LAN app id, one LAN mesh, and the relay verb by @kixelated in #3590
- docs(hang): specify range-addressed archive recording objects by @kixelated in #3571
- feat(tokio): support pinned connection targets by @kixelated in #3595
- feat(hang)!: empty frames close the previous frame's duration by @kixelated in #3575
- docs(quest): fold gap discontinuity into the monotonic timeline by @kixelated in #3611
- docs(quest): groom m0 into release blockers and m1 into merge gates by @kixelated in #3628
- test(smoke): detect a leaked player that reuses a pooled transport by @kixelated in #3610
- feat(cli): accept several adaptive import stages on one connection by @kixelated in #3578
- fix(moq-stats): keep a departed node's traffic in the merged total by @kixelated in #3625
- feat(net): createBroadcast, announce(route), and a dynamic handle by @kixelated in #3581
- feat(relay): merge config with recorded provenance by @kixelated in #3587
- feat(relay)!: construct the cluster origin once by @kixelated in #3582
- feat(moq-net): assign NOT_FOUND, OLD, and EVICTED stream codes by @kixelated in #3586
- fix(moq-tokio): hold feature-extreme builds to -D warnings by @kixelated in #3584
- feat(hang)!: replace the catalog timeline with archive by @kixelated in #3612
- fix(hls): rebind a replaced sibling instead of serving its old rows by @kixelated in #3620
- feat(moq-ffi): expose the reconnect epoch and QUIC stream cap by @kixelated in #3627
- feat(net)!: collapse Reload and Shared into one Connection class by @kixelated in #3614
- feat(hang): publishers set stalled on lagging video renditions by @kixelated in #3630
- feat(net)!: split a connection's send estimate among JS publishers by @kixelated in #3616
- fix(watch): handle stream resets at playback boundaries by @kixelated in #3580
- feat(mux): passthrough imports reserve peak-hold bitrate by @kixelated in #3617
- feat(tokio)!: partition LAN discovery by application by @kixelated in #3621
- feat(archive): store versioned recording objects by @kixelated in #3613
- feat(ffi)!: follow the connection's bandwidth share by @kixelated in #3622
- feat(moq-net)!: abort an oversized group instead of shedding its head by @kixelated in #3585
- feat(ffi)!: align create_broadcast, announce, and dynamic across bindings by @kixelated in #3577
- feat(ffi)!: preserve session and stream protocol error details by @kixelated in #3615
- feat(e2ee): add the moq-e2ee-01 profile and shared vectors by @kixelated in #3629
- feat(pattern): extract matcher into moq-pattern and @moq/pattern by @kixelated in #3631
- docs(quest): abandon JSON/binary wrapper lifecycle by @kixelated in #3637
- fix(net)!: recover a Connection by replacing its URL after auth failure by @kixelated in #3636
- docs(quest): abandon publisher finish ownership by @kixelated in #3646
- fix(signals)!: accept any conforming Getter as a readable input by @kixelated in #3639
- feat(json)!: give JSON and binary wrappers a single options object by @kixelated in #3640
- docs(quest): borrow publisher finish so abort can follow by @kixelated in #3650
- fix(ffi): let group and datagram reads progress independently by @kixelated in #3645
- fix(net)!: refuse unencodable timescale and track delivery properties by @kixelated in #3643
- feat(relay): mesh CLI and relay LAN peers through Cluster by @kixelated in #3648
- feat(ffi)!: fail configuration setters that cannot apply by @kixelated in #3642
- fix(ffi): keep the lane guard alive for the whole read by @kixelated in #3651
- fix(json)!: fallible modify(), abort the track when a dropped edit fails by @kixelated in #3644
- feat(net)!: advertise wildcard routes with Pattern events by @kixelated in #3649
- quest: auth API to m1, IETF on the ring, wildcard docs by @kixelated in #3658
- docs(quest): move A/V clock from m1 to m2 by @kixelated in #3659
- docs(quest): scope parallel M2 work and pre-release API groundwork by @kixelated in #3652
- feat(net)!: make reader group and frame limits explicit by @kixelated in #3647
- feat(net)!: rename writeDatagram to insertDatagram by @kixelated in #3666
- test(net): prove anonymous publisher handoff by @kixelated in #3662
- docs(quest): keep aggregate closure counters monotonic by @kixelated in #3668
- docs(quest): plan SRT rejection reasons and track priority scoping by @kixelated in #3667
- docs: path patterns and wildcard advertisements by @kixelated in #3661
- feat(e2ee): add the Rust moq-e2ee-01 core by @kixelated in #3665
- feat(libmoq)!: select decoded pixel format and size from C by @kixelated in #3674
- feat(relay)!: own listeners and workers for embedders by @kixelated in #3638
- feat(ffi)!: replace MoqAudioCodec enum with opus() object by @kixelated in #3671
- test(libmoq): run the C decoder fixture outside cargo test by @kixelated in #3691
- fix(ffi): keep the first-frame cursor across empty groups and cancel by @kixelated in #3641
- feat(ffi)!: carry the route cold cost through MoqRoute by @kixelated in #3669
- feat(auth): moq-auth and @moq/auth own the contract and the token by @kixelated in #3684
- feat(auth): moq auth serve is the reference auth server by @kixelated in #3686
- docs(e2ee): moq-e2ee-00 with a path epoch, plus the core reshape quests by @kixelated in #3690
- quest(m1): audit the dev API and plan the release gates by @kixelated in #3700
- feat(relay): admit every session through a moq-auth lease by @kixelated in #3688
- chore(quest): joining FETCH for pre-draft-20 peers by @kixelated in #3701
- quest: track the synchronous MoqServer close by @kixelated in #3716
- chore: merge main into dev by @kixelated in #3726
- feat(tokio)!: rename ConnectionStatsReader to connection::Monitor by @kixelated in #3705
- docs(drafts): note that each draft is AI generated from the implementation by @kixelated in #3728
- chore(quest): drop the external API proof gate by @kixelated in #3709
- docs(drafts): add the AI attribution note to the e2ee and pattern drafts by @kixelated in #3729
- draft(flate): specify group-scoped DEFLATE as an IETF draft by @kixelated in #3715
- feat(net)!: name stats counter edges started and ended by @kixelated in #3712
- feat(js)!: mirror Rust names in @moq/net and @moq/pattern by @kixelated in #3710
- feat(hang)!: timelines only move forward by @kixelated in #3711
- feat(drafts): specify the MPEG-TS catalog extension and carry it over MSF by @kixelated in #3720
- feat(ffi)!: use microseconds and matching origin verbs by @kixelated in #3713
- feat(net): join pre-draft-20 peers with Largest Object plus FETCH by @kixelated in #3727
- feat(tokio)!: own the worker split group by @kixelated in #3673
- feat(ffi)!: drop MoqCancel; Go cancels through context.Context by @kixelated in #3723
- feat!: refuse released spellings and drop unused deprecated APIs by @kixelated in #3719
- feat(relay): put the client's address on the conn and ws spans by @gquintard in #3706
- feat(hang)!: one continuous broadcast clock at the catalog root by @kixelated in #3675
- feat(json)!: Config means the same thing in json and binary by @kixelated in #3718
- feat(relay): put the moq-auth session id on the ws span by @kixelated in #3736
- feat(net)!: one name per announce, request, and origin config concept by @kixelated in #3725
- feat(net)!: scope origins with pattern unions by @kixelated in #3672
- feat!: borrow publisher finish so abort can still run by @kixelated in #3714
- quest(m2): plan the intra-refresh GOPs questline by @kixelated in #3738
- feat(net)!: rank anonymous hop chains last by @kixelated in #3724
- fix(obs): let each dock tab scroll instead of forcing the dock's height by @kixelated in #3732
- doc: show GitHub stars and Discord members in the navbar by @kixelated in #3677
- fix(msf): compile the extension collision check in release builds by @kixelated in #3733
- fix(nix): give the moq-cli check phase a trust store by @kixelated in #3734
- feat(relay): let the embedder admit sessions in process by @kixelated in #3735
- feat(relay)!: public modules and typed cluster peer config by @kixelated in #3670
- quest(m2): plan the WebSocket to QUIC upgrade questline by @kixelated in #3750
- feat(auth)!: the lease reports what it ended with, and the relay Lease owns the recheck by @kixelated in #3739
- fix(relay): compile the io_uring listener after the auth module move by @kixelated in #3749
- fix(hang): refuse a malformed text catalog section in JS too by @kixelated in #3740
- feat(net): negotiate the cluster extension with HOP_ID by @kixelated in #3747
- feat(net)!: register the four placeholder stream codes by @kixelated in #3742
- fix(smoke): build the Go client without VCS stamping by @kixelated in #3754
- test(mux): stop copies_share_one_epoch racing the clock by @kixelated in #3752
- quest: plan the follow-ups from the m0 and m1 spawn run by @kixelated in #3753
- feat(native): default the QUIC backend to noq by @kixelated in #3757
- quest(m1): move the one-auth-path quest onto the dev line by @kixelated in #3751
- feat!: name every rate estimate estimated_*_rate by @kixelated in #3744
- fix(libmoq): build on the noq backend like the rest of dev by @kixelated in #3758
- fix(tokio): fail a connect on auth only once every transport has by @kixelated in #3741
- fix(js/net): a rejected request skips the route that refused it by @kixelated in #3756
- feat(rtmp): report the connect tcUrl on a publish or play request by @kixelated in #3743
- quest(m2): drop the link to the landed connect auth race quest by @kixelated in #3763
- quest(m2): plan network-only bindings and release size hygiene by @kixelated in #3761
- feat(net)!: fold the session placeholders into PROTOCOL_VIOLATION by @kixelated in #3755
- quest(m2): plan C++ and C# bindings generated from moq-ffi by @kixelated in #3765
- quest(m2): plan a pushed re-check for live sessions by @kixelated in #3764
- quest(m2): plan clean host exit for libmoq/OBS and Kotlin/JVM by @kixelated in #3768
- quest: plan the dev-to-main API review follow-ups by @kixelated in #3760
- feat(net)!: reprice a PUBLISH_NAMESPACE with REQUEST_UPDATE by @kixelated in #3762
- quest(m1): move session revalidate onto the dev line by @kixelated in #3767
- fix(ffi): stop the runtime thread at Python exit so it never dies mid-callback by @kixelated in #3766
- feat(tokio)!: settle moq-tokio names under their modules by @kixelated in #3745
- feat(libmoq): track demand and dynamic track requests by @kixelated in #3748
- quest(m2): rewrite P2P as product work and plan the one-port demux by @kixelated in #3772
- feat(net)!: announce prefixes on every wire; consumers read paths by @kixelated in #3770
- feat(net)!: slim the moq-net public surface by @kixelated in #3779
- feat(auth)!: one type per contract concept by @kixelated in #3776
- fix(net): drop origin source track when last reader leaves by @kixelated in #3777
- feat(relay): push a re-check to live sessions by @kixelated in #3778
- fix(net): emit ReloadDelay and ReloadStatus in published types by @kixelated in #3775
- feat(auth)!: reshape @moq/auth around Key and KeySet by @kixelated in #3773
- fix(auth): end a session when a re-check no longer grants by @kixelated in #3774
- fix(net): wake the demand aggregate when its widest subscriber changes by @kixelated in #3785
- chore(ci): add Muse Spark PR reviewer side-by-side with Codex by @kixelated in #3786
- docs: slim agent guidance and sync rules by @kixelated in #3787
- quest(e2ee): plan the opaque broadcast path from #3717 by @kixelated in #3782
- quest(m2): plan the TS mux-rate quest from #3731 by @kixelated in #3781
- quest(m1): plan the Admissions fold and route cost constructors by @kixelated in #3783
- fix(moq-mux): rejoin fenced TS tracks once the program clock passes them by @kixelated in #3784
- chore(quest): abandon JSON config unification by @kixelated in #3780
- fix(net): every malformed REQUEST_UPDATE is a protocol violation in js by @kixelated in #3771
- quest(quic): one backend, a noq fork, and the transport roadmap by @kixelated in #3789
- docs(quest): plan administrative routing cost domains by @kixelated in #3788
- quest(perf): plan io_uring enter and wake batching by @kixelated in #3790
- chore(net): format the merged track test by @kixelated in #3791
- quest(quic): propose BBR3 as noq's default controller by @kixelated in #3792
- feat(net)!: scope origins with any pattern union and report announce matches by @kixelated in #3746
- feat!: merge dev into main by @kixelated in #3793
- quest(quic): correct the ECN plan; noq already does classic ECN by @kixelated in #3796
- fix(ci): repair nightly and meta-review failures by @kixelated in #3799
- chore(deps-dev): bump the uv group with 2 updates by @dependabot[bot] in #3806
- chore(deps): bump the gradle group in /kt with 3 updates by @dependabot[bot] in #3809
- chore(deps): bump the github-actions group with 3 updates by @dependabot[bot] in #3810
- chore(deps): bump the cargo group with 20 updates by @dependabot[bot] in #3812
- quest(video): plan GPU-only CARLA media support by @kixelated in #3808
- fix(net): retain spliced warm cache by @kixelated in #3814
- quest(quic): split ECN into the uring fix, a study, and L4S by @kixelated in #3820
- feat(net): simplify JavaScript API by @kixelated in #3815
- refactor(js)!: unify watch and publish APIs by @kixelated in #3817
- refactor(relay): route auth through admissions by @kixelated in #3800
- refactor(tokio): make API shapes type-safe by @kixelated in #3816
- fix(hls): advertise only playable renditions by @kixelated in #3824
- feat(hang)!: unify catalog APIs by @kixelated in #3813
- refactor(net): expose route cost fields by @kixelated in #3802
- feat(libmoq)!: finalize release API by @kixelated in #3819
- feat(net)!: simplify origin scoping by @kixelated in #3804
- feat(gateway)!: align embedding APIs by @kixelated in #3818
- refactor(quic)!: keep only the noq backend by @kixelated in #3811
- chore(quest): retire completed announce event work by @kixelated in #3797
- docs: plan moq installer and public install URL by @kixelated in #3795
- quest: ship a prebuilt Linux obs-moq bundle by @kixelated in #3794
- docs(quest): plan media API stabilization before 0.1 by @kixelated in #3803
- docs(quest): settle 0.0.x package APIs before release by @kixelated in #3801
- docs(libmoq): demand no longer waits for the origin cache linger by @pwrwpw in #3827
- refactor(net)!: drive time and cache cleanup explicitly by @kixelated in #3825
- feat(uring): carry ECN on the io_uring UDP path by @kixelated in #3821
- refactor(net)!: return the next deadline from driver polls by @kixelated in #3828
- refactor(net)!: name path roles without new types by @kixelated in #3826
- Update index.md by @HenzMiguel in #3847
- fix(moq-audio,moq-video): build capture and Android again, and gate both on PRs by @Frando in #3850
- chore: move PR workflow skills into repository by @kixelated in #3853
- refactor(moq-sock)!: complete groups before serving by @kixelated in #3832
- fix(alert): handle Bun YAML on-to-true coercion by @kixelated in #3854
- feat(e2ee): derive opaque broadcast paths by @kixelated in #3830
- refactor(archive)!: use inclusive group ranges by @kixelated in #3829
- docs(quest): scope the v4l fork that unblocks capture-by-default by @kixelated in #3852
- chore(quest): mirror branches in the quest tree by @kixelated in #3855
- feat(moq-net): add moq-transport draft-22 (moqt-22) by @kixelated in #3858
- refactor(archive)!: scope listing queries to recordings by @kixelated in #3833
- feat(moq-mux): record the TS mux rate and pad export to it by @kixelated in #3831
- fix(video)!: confine synchronous codecs to their thread by @kixelated in #3837
- feat(video): import retained Vulkan images into CUDA by @kixelated in #3836
- fix(nvenc)!: retain resources through completion by @kixelated in #3835
- quest(quic): plan BBR correctness fixes and Google comparison by @kixelated in #3859
- quest(future): restore the Go docs' vanity paths after the mirrors republish by @kixelated in #3851
- fix(relay): match the uring driver's terminal error by @kixelated in #3860
- fix(video): convert CUDA device UUID bytes portably by @kixelated in #3861
- quest(quic): plan app-limited BBR fixes and media experiments by @kixelated in #3862
- fix(moq-nvenc): roll back failed resource mapping by @kixelated in #3834
- refactor(audio)!: remove ineffective FEC flag by @kixelated in #3841
- chore(just): consolidate full-suite actions by @kixelated in #3823
- fix(nvenc)!: make driver loading fallible by @kixelated in #3838
- feat(ffi)!: scope announcement streams with patterns by @kixelated in #3856
- refactor(mux)!: share media rate policy by @kixelated in #3840
- refactor(video)!: type frame conversions by @kixelated in #3846
- Make media backends optional by @kixelated in #3839
- feat: preserve video capture timing by @kixelated in #3849
- Unify mux track and rendition ownership by @kixelated in #3857
- refactor(audio)!: expose demand without track authority by @kixelated in #3842
- chore(quest): retire the published cluster -01 and merged dev quests by @kixelated in #3872
- fix(just): pass smoke arguments to the shebang recipe by @kixelated in #3870
- feat(e2ee)!: implement moq-e2ee-00 with epoch-scoped generations by @kixelated in #3863
- refactor(audio)!: separate configuration contracts by @kixelated in #3843
- refactor(uring)!: derive worker and steering identity from the socket by @kixelated in #3865
- feat(video)!: type the group configuration and make cut fallible by @kixelated in #3876
- fix(audio)!: enforce exclusive AEC ownership by @kixelated in #3844
- Report dropped playback sample frames by @kixelated in #3845
- feat(video): GPU color conversion and NVENC for imported Vulkan frames by @kixelated in #3869
- fix(video): compile the macOS capture backends after the Frame reshape by @kixelated in #3877
- fix(just): pass smoke args through to smoke.sh by @kixelated in #3873
- fix(moq-gst): Drain subscriptions whose track was removed from catalog by @kidq330 in #3864
- refactor(video)!: separate decoder output from subscription policy by @kixelated in #3875
- chore(quest): groom next after the dev merge by @kixelated in #3868
- chore(quest): complete the media release review by @kixelated in #3878
- fix(mux): read the inline SI form every published moq-cli writes by @kixelated in #3871
- fix(moq-json): a snapshot edit fails on a shape mismatch instead of seeding a default by @kixelated in #3874
- quest: plan GPU pool reservations and the io_uring handshake flush by @kixelated in #3880
- perf(net): build a route's prefix claim once, not per cursor visit by @kixelated in #3881
- feat(quic)!: build on moq-noq, the MoQ fork of noq by @kixelated in #3866
- perf(net): key the origin route table by prefix by @kixelated in #3882
- feat(json): edit a snapshot value through a closure by @kixelated in #3889
- test(video): validate the GPU conversion and NVENC path on NVIDIA hardware by @kixelated in #3890
- perf(net): wake a front only when a covering route changes by @kixelated in #3884
- fix(dart): refresh the moq lockfile so --enforce-lockfile resolves by @kixelated in #3894
- quest: plan the origin failover state machine by @kixelated in #3891
- test(bindings): prove the Opus frame duration and throwing setters each binding exposes by @kixelated in #3885
- feat(moq-ffi): the decode pixel format reaches every uniffi binding by @kixelated in #3892
- test(moq-gst): decide the cancelled pump race instead of sleeping on it by @kixelated in #3898
- fix(dart): stop pretending Dependabot covers dart/moq by @kixelated in #3896
- fix(srt): keep the listener alive until a rejected caller sees the verdict by @kixelated in #3887
- chore(deps): bump the github-actions group with 2 updates by @dependabot[bot] in #3903
- feat(bindings): close the additive half of binding parity by @kixelated in #3888
- chore(deps): bump the cargo group with 3 updates by @dependabot[bot] in #3905
- chore(deps): bump the bun group across 4 directories with 15 updates by @dependabot[bot] in #3902
- feat(video): fork v4l in-tree with checked-in V4L2 bindings by @kixelated in #3867
- refactor(rs): read constant-size chunks with as_chunks by @kixelated in #3899
- fix(moq-mux): keep a group's last frame duration at its own scale by @kixelated in #3906
- build: pin rust 1.98.1 so macOS 27 loads our stripped dylibs by @kixelated in #3904
- fix(moq-json): a lost snapshot group is not fatal by @kixelated in #3907
- feat(net): origin failover as a state machine by @kixelated in #3895
- chore(quest): plan allocation-free binary stats and moq-json churn cuts by @kixelated in #3917
- chore(rs): report the crate version, drop the git-describe build scripts by @kixelated in #3912
- perf(json): skip the snapshot baseline parse when deltas are disabled by @kixelated in #3916
- fix(tokio): start jemalloc sampling on demand instead of at startup by @kixelated in #3919
- test(net): sweep duplicate routes at one prefix by @kixelated in #3922
- fix(moq-ffi): cancel waits for the listening socket to close by @kixelated in #3914
- fix(moq-relay): compile the io_uring feature in the per-PR check by @kixelated in #3911
- quest: plan local announcements and front-side request parking by @kixelated in #3921
- docs(quest): plan
moq lsandmoq fetchfor inspecting a relay by @kixelated in #3915 - refactor(net): routed_broadcast waits on the watch alone by @kixelated in #3901
- test(net): sweep the idle serve poll over a session's routes by @kixelated in #3924
- chore(moq-ffi): move the bindgen CLI out of the library build by @kixelated in #3908
- feat(moq-net): reset an unanswered control request with CONTROL_TIMEOUT by @kixelated in #3913
- quest(audio-jitter-target): the audio playout target line by @kixelated in #3883
- test: keep a failing harness run and its browser trace by @kixelated in #3909
- fix: tighten release APIs and preserve Lite compatibility by @kixelated in #3933
- quest: allocation-free binary stats by @kixelated in #3918
- feat(watch): add headless Player pipeline by @kixelated in #3931
- docs(lib): document connection stats on every binding page by @kixelated in #3910
- fix(smoke): make media log names portable by @kixelated in #3936
- perf(json): bound snapshot update allocations by @kixelated in #3929
- fix(net): announce local broadcasts on origin cursors by @kixelated in #3928
- docs(quest): retire local announcements roadmap entry by @kixelated in #3930
- feat(relay): expose reusable embedding lifecycle and test fixture by @kixelated in #3927
- feat(net)!: promote moq-lite-06 ALPN on main by @kixelated in #3941
- chore: remove Meta Muse Spark review workflow by @kixelated in #3942
- chore: release by @moq-bot[bot] in #3730
- fix(auth): enable tokio macros feature for select! by @kixelated in #3957
New Contributors
- @sreejon made their first contribution in #2831
- @pwrwpw made their first contribution in #3827
- @HenzMiguel made their first contribution in #3847
Full Changelog: moq-relay-v0.14.18...moq-relay-v0.15.0