Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
591 commits
Select commit Hold shift + click to select a range
e119718
Support multiple announce prefixes in MOQ subscriber (#1249)
kixelated Apr 9, 2026
330a9da
Add dynamic RTT-based jitter mode for adaptive buffer sizing (#1255)
kixelated Apr 9, 2026
decb823
Remove doc/spec/ and link to IETF datatracker (#1261)
kixelated Apr 9, 2026
fa0e7c5
Add import statistics tracking and reporting (#1242)
kixelated Apr 9, 2026
709b578
Increase demo wait timeout from 60s to 10 minutes
kixelated Apr 9, 2026
242fb34
Expand GStreamer plugin documentation and add convenience commands (#…
kixelated Apr 9, 2026
24043b2
Send RTT in probe messages and tune jitter buffer (#1265)
kixelated Apr 9, 2026
f022a5d
Clean up CLI publish stats output (#1263)
kixelated Apr 9, 2026
2ed4478
Tweak watch UI latency slider: 10ms steps, 4s max (#1264)
kixelated Apr 9, 2026
2f8504e
Move Python, Tofu, and Nix checks from check to ci task (#1267)
kixelated Apr 9, 2026
6d9c911
Fix MoQ Boy audio blasting on autoplay click (#1270)
kixelated Apr 9, 2026
785576e
Prevent concurrent release workflow cancellation (#1271)
kixelated Apr 9, 2026
5720a5d
Remove moq-boy-preview component documentation (#1274)
kixelated Apr 9, 2026
1f4d84f
Add per-component latency breakdown for moq-boy (#1268)
kixelated Apr 9, 2026
525fe11
Fix release-plz: remove gen/.gitignore files that were both tracked a…
kixelated Apr 9, 2026
9198f4d
Use Command signal for reactive track fanout in moq-boy (#1276)
kixelated Apr 9, 2026
83c92e3
Fix lychee CI link checker failures (#1269)
kixelated Apr 9, 2026
1dc4789
chore: release (#1236)
moq-bot[bot] Apr 10, 2026
47a4a82
Remove auto-reset timeout, preserve emulator state across pauses (#1279)
kixelated Apr 10, 2026
910f3b5
Fix audio underflow by tracking sync reference per label (#1272)
kixelated Apr 10, 2026
cdf7da9
Bump the JS pacakges. (#1281)
kixelated Apr 10, 2026
dbe54b9
Deploy the boy (#1282)
kixelated Apr 11, 2026
8bf9923
Add CDN usage documentation for @moq/watch and @moq/publish (#1283)
kixelated Apr 11, 2026
c42ee7d
Move buffer slider from Controls to StatsPanel (#1285)
kixelated Apr 11, 2026
82682c9
Remove lychee link checker from CI and dependencies (#1277)
kixelated Apr 11, 2026
6f1b147
fix(moq-lite): exit run_send_bandwidth when the session closes (#1286)
kixelated Apr 11, 2026
4ee5378
chore: release (#1278)
moq-bot[bot] Apr 11, 2026
b8689b0
Fix gstreamer. (#1289)
kixelated Apr 11, 2026
e4d2377
Refactor publish stats logging to use structured logging (#1290)
kixelated Apr 11, 2026
507d100
Miscellaneous fixes (#1291)
kixelated Apr 11, 2026
1b6ddbf
chore(@moq/watch): bump patch to 0.2.6 (#1292)
kixelated Apr 11, 2026
724f050
Execute vite with bun, not node. (#1293)
kixelated Apr 11, 2026
f892593
use generated name if no sink pad name provided (#1294)
sidsethupathi Apr 12, 2026
8025e23
fix: add `sideEffects` to some js libraries (#1298)
beeequeue Apr 14, 2026
5947f2f
Bump pytest from 9.0.2 to 9.0.3 in the uv group across 1 directory (#…
dependabot[bot] Apr 14, 2026
fdfc686
Add mTLS support for moq-relay (#1299)
kixelated Apr 15, 2026
a553ec9
chore: release (#1287)
moq-bot[bot] Apr 15, 2026
685f0d9
feat: add TrackConsumer::produce() for zero-copy track sharing (#1300)
ksletmoe-aws Apr 15, 2026
a231438
Replace postMessage with SharedArrayBuffer for lock-free audio transf…
kixelated Apr 15, 2026
02ca8e6
conducer: replace Weak<Waker> waker list with atomic-flag slots (#1301)
kixelated Apr 15, 2026
63875b5
Add macOS to Cachix build matrix (#1303)
kixelated Apr 15, 2026
5337aa1
fix: Safari/Firefox moq-boy compatibility (#1304)
kixelated Apr 15, 2026
f983da3
chore: release (#1302)
moq-bot[bot] Apr 15, 2026
c28a7c1
Add landing page for non-MoQ clients accessing relay (#1280)
kixelated Apr 15, 2026
71cee05
moq-token: default to base64url encoding for JWK output (#1309)
kixelated Apr 16, 2026
63298e6
fix: disable WebTransport on Firefox, force WebSocket fallback (#1306)
kixelated Apr 16, 2026
d8a3a85
Replace --identity with separate --cert and --key flags (#1308)
kixelated Apr 16, 2026
985f9fe
moq-relay: refactor auth error handling, add HTTP client tests (#1311)
kixelated Apr 16, 2026
0160bde
Fix keyboard input handling in GameCard component (#1312)
kixelated Apr 16, 2026
a144025
chore: bump patch versions (#1314)
kixelated Apr 16, 2026
adf92c8
moq-boy: lower default volume and add volume slider (#1313)
kixelated Apr 16, 2026
4903010
moq-relay: inline landing page HTML to fix Nix build (#1316)
kixelated Apr 16, 2026
9ae6cb8
Replace two moq-boy games (#1315)
kixelated Apr 16, 2026
d351360
chore: bump JS patch versions (#1317)
kixelated Apr 16, 2026
571d044
Change broadcast replacement strategy to queue backups instead of rea…
kixelated Apr 17, 2026
3ad0ee7
chore: release (#1305)
moq-bot[bot] Apr 17, 2026
a2b8a46
chore: release (#1320)
moq-bot[bot] Apr 17, 2026
583ab94
Remove cargo-semver-checks dependency and workflow (#1323)
kixelated Apr 17, 2026
9c915e0
Clarify group delivery semantics with recv_group and next_group_order…
kixelated Apr 17, 2026
a1fe5c6
Add back button to game controls UI (#1325)
kixelated Apr 17, 2026
7a627f3
Add TrackConsumer::read_frame as inverse of write_frame (#1326)
kixelated Apr 17, 2026
a20f85c
Adding data (aka json) to the py_lib (#1318)
lullabee Apr 17, 2026
27235d9
Fix TrackConsumer::read_frame: respect start_at, avoid premature EOF …
kixelated Apr 17, 2026
e3f0f92
Add README files for Rust crates (#1284)
kixelated Apr 19, 2026
737389d
Update fly.toml to use the hosted docker image (#1331)
mmcc Apr 19, 2026
f0bfc5c
moq-native: resolve DNS hostnames in --server-bind (#1332)
kixelated Apr 19, 2026
9f1f976
Update flake.lock dependencies (#1333)
kixelated Apr 19, 2026
0fd1aaa
chore: release (#1321)
moq-bot[bot] Apr 19, 2026
bc99603
downgrade to avoid needing Rust 1.95 (#1336)
kixelated Apr 20, 2026
68849ea
nix: align crane toolchain with devShell (rust-overlay's latest stabl…
kixelated Apr 20, 2026
683a754
chore: release (#1334)
moq-bot[bot] Apr 20, 2026
f65b1aa
Add MSF catalog format support with format negotiation (#1330)
kixelated Apr 20, 2026
9d10049
lite: raise WebSocket race head start to 500ms and skip if WebTranspo…
kixelated Apr 20, 2026
68f648c
chore: bump JS patch versions to publish recvGroup (#1339)
kixelated Apr 22, 2026
c4601b5
Add catalog format configuration to @moq/watch documentation (#1344)
kixelated Apr 23, 2026
45db108
moq-lite/moq-relay: hop-based clustering (#1322)
kixelated Apr 23, 2026
40fcaa8
Bump rustls-webpki from 0.103.12 to 0.103.13 in the cargo group acros…
dependabot[bot] Apr 25, 2026
412a143
py/moq-lite: add clock + announced examples (#1345)
kixelated Apr 25, 2026
bea9b3a
moq-lite: add OriginConsumer::wait_for_broadcast; deprecate consume_b…
kixelated Apr 26, 2026
0331db7
relay: add subdomain-based slug routing for customer isolation (#1343)
kixelated Apr 26, 2026
68b0795
moq-lite: backport Subscription model API for FETCH readiness (#1348)
kixelated Apr 28, 2026
216c9f1
Add encoder's AudioContext sampleRate override (#1355)
Qizot Apr 28, 2026
3197020
Handle relays without announcement subscription support (#1352)
kixelated Apr 29, 2026
f15635f
moq-lite: per-frame buffer + BufMut producer to cut relay memory (#1353)
kixelated Apr 29, 2026
5059b1a
@moq/watch: add static catalog format (#1349)
skirsten Apr 29, 2026
7aad09d
moq-native: relocate jemalloc helper; wire it into moq-boy (#1360)
kixelated Apr 29, 2026
2083546
moq-relay: authenticate HTTPS callers via the cluster mTLS CA (#1350)
kixelated Apr 29, 2026
019716f
moq-lite: add fetch_group API + TrackDynamic (#1357)
kixelated Apr 30, 2026
5063dbf
@moq/watch: expose AudioContext on the audio backend (#1365)
skirsten May 1, 2026
f0a842a
Update flake.lock (#1366)
github-actions[bot] May 1, 2026
fd6b072
Update Cloudflare limitation note for latency=real-time (#1368)
kixelated May 1, 2026
705a9fc
moq-gst: fix moqsink eos (#1369)
sidsethupathi May 2, 2026
d592b00
Revert moq-lite FETCH/Subscription API changes (#1372)
kixelated May 2, 2026
cbffd39
feat(player): unify Consumer across container formats (#1359)
ksletmoe-aws May 4, 2026
08a79e7
fix(config): accept single string or array for TOML list fields (#1377)
kixelated May 5, 2026
fa7966a
Fix DNS resolution to prefer matching address family (#1379)
kixelated May 5, 2026
1243c31
Update OG image with proper dimensions for social sharing (#1381)
kixelated May 5, 2026
8d4a175
moq-lite: tighten public API surface and remove deprecated methods (#…
kixelated May 5, 2026
b611acd
moq-lite: switch insert_track to take TrackConsumer (#1356)
kixelated May 5, 2026
34dc7c9
moq-mux backport + dual-API cleanup (#1341)
kixelated May 6, 2026
9e2461e
Unignore moq-mux test fixtures (#1382)
kixelated May 6, 2026
71d90d3
@moq/watch: don't tear down a broadcast when an unrelated path flaps …
kixelated May 6, 2026
9b1665f
Revert "moq-lite: switch insert_track to take TrackConsumer (#1356)" …
kixelated May 6, 2026
4576a34
Revert the revert (#1387)
kixelated May 7, 2026
bdda6bd
@moq/watch: source network stats from the connection, not navigator (…
kixelated May 7, 2026
375cbef
chore: release (#1338)
moq-bot[bot] May 9, 2026
d9878e7
moq-ffi: fix uniffi-bindgen invocation, bump to 0.2.9 (#1392)
kixelated May 9, 2026
6adf3c3
Reduce track group cache eviction timeout from 30s to 5s (#1393)
kixelated May 9, 2026
b328775
moq-gst: Fix MoqSink CAPS handling and per-pad EOS aggregation (#1402)
SteveMcFarlin May 14, 2026
7732ead
Bump package versions across JS packages (#1407)
kixelated May 14, 2026
3363c04
fix(watch): close MultiBackend's sync and sources (#1399)
skirsten May 14, 2026
2bd4409
fix: stop leaking PromiseReactions in consumer loops (#1400)
skirsten May 15, 2026
0538e55
Vite: Add alias resolver to Vite worker plugin esbuild (#1409)
danrossi May 15, 2026
6e7d918
Fix reading catalogs (#1404)
Qizot May 15, 2026
6511be3
Expose track name and used/unused activity signals (#1398)
Qizot May 15, 2026
303b25c
moq-cli: rename --output to --format, --name to --broadcast, add acce…
kixelated May 15, 2026
35134a2
audio: send each frame as its own group (#1414)
kixelated May 18, 2026
fe73828
Migrate UI from SolidJS to vanilla Web Components (#1412)
kixelated May 18, 2026
c0afeb0
Add pixel budget controls for video rendition selection (#1411)
kixelated May 18, 2026
efe47a7
Drop BEM prefixes from watch and publish UI CSS (#1419)
kixelated May 18, 2026
517505a
Add draft-ietf-moq-transport-18 support (#1418)
kixelated May 18, 2026
3284207
fix: bump web-transport-iroh to 0.4 to unbreak cargo update (#1421)
kixelated May 18, 2026
69f75aa
moq-lite: enforce cluster loop detection on announce (#1420)
kixelated May 18, 2026
c195f2f
chore: release (#1391)
moq-bot[bot] May 18, 2026
bf147ab
moq-lite: tolerate Ended for unknown paths (#1423)
kixelated May 18, 2026
6e2b6aa
chore: build and cache moq-boy on release tags (#1424)
kixelated May 18, 2026
63feeec
chore: release (#1422)
moq-bot[bot] May 18, 2026
f41a89d
moq-lite: fix AnnounceInterest.exclude_hop overflow on JS side (#1427)
kixelated May 18, 2026
d3c5c77
moq-lite: keep probe stream errors out of the session (#1426)
kixelated May 18, 2026
2991a6d
Cluster loop.
kixelated May 18, 2026
b850c9f
Merge remote-tracking branch 'origin/main'
kixelated May 18, 2026
7eeb319
rename moq-lite package to moq-net (#1428)
kixelated May 20, 2026
f2ff0c5
py: drop moq-lite shim package
kixelated May 20, 2026
9021565
chore: release (#1425)
moq-bot[bot] May 21, 2026
b3739f2
Replace mpsc with conducer for coalesced origin consumer updates (#1433)
kixelated May 21, 2026
4fd8305
fix(watch): hide buffering overlay while offline (#1410)
YogiSotho May 21, 2026
b876669
Add audio encoder reconfiguration (#1362)
Qizot May 21, 2026
e374d2c
Claude/cargo update 3 fx or (#1435)
kixelated May 21, 2026
0fcd1b1
chore: release (#1431)
moq-bot[bot] May 21, 2026
ececd8e
Add Swift and Kotlin FFI wrappers with packaging and publishing (#1432)
kixelated May 22, 2026
d7b10a3
hang: re-emit deprecated CMAF timescale/trackId in catalog (#1440)
kixelated May 22, 2026
c42187a
direnv: auto-GC stale Nix store paths once a week (#1441)
kixelated May 22, 2026
cf12478
Make reconnect timeout mandatory with 5-minute default (#1443)
kixelated May 22, 2026
6c138a8
Add stats via MoQ broadcasts (#1442)
kixelated May 22, 2026
eb8f5cc
feat: Unified CMSF/Hang pipeline (cleanup of #1429) (#1444)
kixelated May 22, 2026
a810052
Auto-detect catalog format from broadcast name extension (#1394)
kixelated May 22, 2026
cbbc2c1
Add Matroska/WebM import and export support (#1438)
kixelated May 22, 2026
1d4678d
Add Low Overhead Container (LOC) frame format support (#1388)
kixelated May 22, 2026
034410d
Tag audio sources with a kind to drive Opus encoder settings (#1446)
kixelated May 22, 2026
de7cc60
Tighten moq-ffi release pipeline ahead of first publish (#1447)
kixelated May 23, 2026
a76d9b6
Rename Python package from moq-net to moq-rs (#1450)
kixelated May 23, 2026
b2fe1d8
ci: drop depot, use native GitHub ARM runners for docker builds (#1451)
kixelated May 23, 2026
c8091bf
Package moq-gst for release via Nix-built tarballs (#1453)
kixelated May 23, 2026
357bd87
swift: wire SPM mirror publish (Phase A) (#1448)
kixelated May 23, 2026
cac583f
Remove cdn folder (#1454)
kixelated May 23, 2026
5fa6628
ci: pin all GitHub Actions to SHAs + add 7-day Dependabot cooldown (#…
kixelated May 23, 2026
352f22e
build(deps): bump docker/build-push-action from 6.19.2 to 7.1.0 (#1458)
dependabot[bot] May 23, 2026
3e1a9d1
build(deps): bump actions/download-artifact from 4.3.0 to 8.0.1 (#1459)
dependabot[bot] May 23, 2026
5db8f9e
build(deps): bump actions/setup-java from 4.8.0 to 5.2.0 (#1460)
dependabot[bot] May 23, 2026
7a27173
build(deps): bump android-actions/setup-android from 3.2.2 to 4.0.1 (…
dependabot[bot] May 23, 2026
7b1a332
build(deps): bump actions/upload-artifact from 4.6.2 to 7.0.1 (#1462)
dependabot[bot] May 23, 2026
6fbbe18
ci: disable persist-credentials on checkouts that don't push (#1463)
kixelated May 23, 2026
9b5426d
ci: opt out of Determinate Nix to fix FlakeHub-induced 401s (#1465)
kixelated May 23, 2026
e5a74fb
ci: dry-run release workflows on PRs (#1464)
kixelated May 23, 2026
0b9f427
ci: skip unchanged languages with `just changed` (#1466)
kixelated May 23, 2026
8ede8c8
Add Python MoQ server API with session acceptance and handshake (#1417)
kixelated May 23, 2026
7756dda
packaging: .deb/.rpm + apt.moq.dev / rpm.moq.dev workers (#1457)
kixelated May 23, 2026
4810e77
moq-mux: restructure into per-codec and per-container modules (#1452)
kixelated May 23, 2026
4e74ec2
docs: require LLM disclaimer on AI-authored comments (#1469)
kixelated May 23, 2026
88b9225
Homebrew tap scaffolding for moq binaries and gst plugin (#1456)
kixelated May 23, 2026
9f780fa
Tighten public APIs ahead of release: non_exhaustive + builders (#1472)
kixelated May 23, 2026
9f6ad70
feat(go): add Go bindings for moq-ffi (#1470)
kixelated May 23, 2026
87c5220
ci: replace docker .rpm builds with cargo zigbuild (#1471)
kixelated May 23, 2026
6312755
ci: fix swift toolchain and restore check-swift workflow (#1468)
kixelated May 23, 2026
bae580e
chore: release (#1467)
moq-bot[bot] May 23, 2026
21206fa
fix: update gitignore exception for moved fmp4 test fixtures (#1474)
kixelated May 23, 2026
fff4518
ci(nix): guard moq-gst postFixup against crane's deps-only stage (#1476)
kixelated May 24, 2026
2fafd5c
chore(js): bump JS package versions (#1478)
kixelated May 24, 2026
fcc9c97
ci(cachix): build only the tagged package (#1477)
kixelated May 24, 2026
cbb7f67
build(deps): bump docker/setup-buildx-action from 3.12.0 to 4.0.0 (#1…
dependabot[bot] May 24, 2026
94ed0c2
infra: reuse SIGNING_KEY for apt/rpm repo publishing (#1483)
kixelated May 24, 2026
aacba0d
docs: group language libraries under lib/ and CLIs under bin/ (#1482)
kixelated May 24, 2026
0df27a9
hang: non_exhaustive VideoConfig/AudioConfig with constructors (#1485)
kixelated May 24, 2026
0fc1704
ci(rs): add cargo-deny and resolve outstanding advisories (#1486)
kixelated May 24, 2026
e3f623f
relay(stats): allow multi-segment --stats-node values; move cargo-den…
kixelated May 24, 2026
f9eb9db
Fix Kotlin release; stop publishing moq-clock + @moq/clock (#1488)
kixelated May 24, 2026
2915730
moq-token-cli: treat `-` as stdin/stdout, not a literal file path (#1…
kixelated May 24, 2026
a2086c6
feat: add moq-audio crate, raw-audio FFI, and rename moq-codec to moq…
kixelated May 24, 2026
6849212
fix(lite): update in-flight group priorities on SUBSCRIBE_UPDATE (#1397)
metapox May 24, 2026
12aa714
relay(stats): fix TOML stats config silently clobbered by clap update…
kixelated May 24, 2026
609eb14
feat(lite): implement SUBSCRIBE_UPDATE API for JS subscriber and publ…
metapox May 24, 2026
42219bf
Remove moq-lite stub crate (#1492)
kixelated May 24, 2026
b3f3f48
build(deps): bump gradle/actions from 4.4.3 to 6.1.0 (#1481)
dependabot[bot] May 24, 2026
9568550
chore: release (#1475)
moq-bot[bot] May 24, 2026
7489ae6
moq-clock: convert to a moq-native example (#1494)
kixelated May 25, 2026
3a4201a
chore: release (#1493)
moq-bot[bot] May 25, 2026
d81b250
ci(rpm): skip rclone bucket probe when publishing to R2 (#1497)
kixelated May 25, 2026
42f6c50
js: re-export @moq/net as Net (deprecate Lite/Moq aliases) (#1498)
kixelated May 25, 2026
7a8616d
ci(swift): decouple release manifest from dev Package.swift and gate …
kixelated May 25, 2026
a66b534
docs(claude): tighten conventions for cross-package sync, tests, comm…
kixelated May 25, 2026
6365a0d
moq-ffi: bump to 0.2.14 (#1505)
kixelated May 25, 2026
568838a
ci(swift): reference staged package by its SPM identity in verify smo…
kixelated May 26, 2026
8f257a7
moq-native(jemalloc): drop runtime activation; fixes moq-boy startup …
kixelated May 26, 2026
1430897
fix(changelog): repair malformed CHANGELOGs blocking release-plz (#1511)
kixelated May 26, 2026
173618b
moq-native: advertise QUIC preferred_address in the server config (#1…
kixelated May 26, 2026
b6e7f4c
docs: update GStreamer text (#1510)
diegonieto May 26, 2026
e9a1086
moq-mux: add seek(sequence) on importers for explicit group boundarie…
kixelated May 27, 2026
23b4e4d
moq-relay: restore gossip-style cluster discovery via --cluster-mesh …
kixelated May 27, 2026
6f91a6f
moq-net: add Lite05Wip version variant (unadvertised) (#1518)
kixelated May 27, 2026
51e1d61
ci: lint shell, workflows, TOML, Nix, and justfiles via nix devShell …
kixelated May 27, 2026
1092fe3
moq-ffi: bump to 0.2.15 (#1520)
kixelated May 28, 2026
efbe468
moq-net: cap frame size at 16 MiB on the receive path (#1521)
kixelated May 28, 2026
d55d11e
docs: route breaking changes and major features to a dev branch (#1522)
kixelated May 28, 2026
012695a
moq-relay: stop downgrading WebSocket clients to moq-lite-02 (#1523)
kixelated May 28, 2026
be70da4
moq-net(stats): aggregate per-node into a single gzipped broadcast (#…
kixelated May 28, 2026
60ac378
moq-gst: assert no /nix/store leaks in postFixup + load-test in CI (#…
kixelated May 28, 2026
ad5b3ed
swift+kt: re-export FFI, session.shutdown(); explicit Origin wiring (…
kixelated May 28, 2026
e35a9b2
Add libmoq catalog producer + raw moq-net track API (#1533)
kixelated May 29, 2026
b7bfc31
moq-relay: scope mTLS grants to the connection URL path (#1535)
kixelated May 29, 2026
ce245f6
moq-net(stats): take a StatsConfig value type in Stats::new (#1537)
kixelated May 29, 2026
1fed416
flake: use nixfmt instead of deprecated nixfmt-rfc-style (#1538)
kixelated May 29, 2026
50620cf
moq-ffi: streaming media import + cross-language interop smoke test (…
kixelated May 29, 2026
ab08b0c
chore(js): bump JS package versions to publish pending changes (#1539)
kixelated May 29, 2026
6c11084
claude: load direnv/nix env on session start so Bash uses pinned tool…
kixelated May 29, 2026
414a10b
test/browser: headless-browser smoke client (phase 2) (#1542)
kixelated May 29, 2026
cf5dfd6
kio: rename conducer crate to kio (#1547)
kixelated May 29, 2026
2755526
libmoq: auto-reconnect sessions; conducer-based Reconnect notificatio…
kixelated May 29, 2026
72c8aeb
libmoq: terminal-callback lifetime contract for C consumers (#1546)
kixelated May 29, 2026
4d46f73
stats: retain entries by liveness instead of a tick retention window …
kixelated May 29, 2026
853ddde
go: ship moq.h and linux staticlibs so the Go module builds for consu…
kixelated May 30, 2026
37252c6
chore: release (#1496)
moq-bot[bot] May 30, 2026
1982dd4
moq-ffi: route Android logs to logcat (#1541)
Qizot May 30, 2026
ad71591
libmoq: add moq_origin_consume_announced to wait for a broadcast (#1552)
kixelated May 30, 2026
9e9cd02
chore: release (#1550)
moq-bot[bot] May 30, 2026
4833e5c
ci: pin released cachix paths so consumers don't fall back to buildin…
kixelated May 30, 2026
ef1d540
stats: count viewers as distinct per-session subscriptions (#1553)
kixelated May 30, 2026
18ede9f
ci: scrub nix-store libiconv from macOS release binaries (#1558)
kixelated May 30, 2026
820d1a1
py: split moq-ffi bindings from the moq-rs ergonomic wrapper into two…
kixelated May 30, 2026
d28ee8e
test: drop the in-repo cross-language smoke test (#1556)
kixelated May 30, 2026
4fefe2e
moq-net: wire session stats into the IETF protocol path (#1560)
kixelated May 30, 2026
3298e98
nix: declare the Cachix cache in the flake and document the tagged-re…
kixelated May 31, 2026
0f85129
relay: dedup mesh dials with a URL-order tiebreaker (#1569)
kixelated May 31, 2026
ffccd45
build(deps): bump DeterminateSystems/flake-checker-action from ba1df9…
dependabot[bot] May 31, 2026
5fb3398
build(deps): bump docker/setup-buildx-action from 4.0.0 to 4.1.0 (#1568)
dependabot[bot] May 31, 2026
a764c17
build(deps): bump docker/build-push-action from 7.1.0 to 7.2.0 (#1565)
dependabot[bot] May 31, 2026
e641add
moq-net: deterministic route tie-break for equal-length paths (#1570)
kixelated May 31, 2026
a1a5fce
moq-relay: add --cluster-connect-api and split cluster identity from …
kixelated Jun 1, 2026
ee55bb5
moq-relay: simplify cluster-connect-api polling onto the HTTP cache (…
kixelated Jun 1, 2026
9e9f324
moq-relay: count connected sessions per auth root for billing (#1574)
kixelated Jun 1, 2026
3c6002a
chore: release (#1557)
moq-bot[bot] Jun 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
31 changes: 31 additions & 0 deletions .claude/hooks/direnv.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/usr/bin/env bash
# Load the project's direnv/nix dev shell into the Claude Code session so Bash
# tool commands resolve flake-pinned tools (bun, nixfmt, ...) instead of system
# ones. No-op for anyone without direnv or an .envrc, so non-nix setups are
# unaffected.
#
# direnv only *approves* the .envrc; the actual env is exported into
# $CLAUDE_ENV_FILE, which Claude Code sources for every later Bash command.

set -u

# Nothing to export into without this; older Claude Code versions won't set it.
[ -n "${CLAUDE_ENV_FILE:-}" ] || exit 0

command -v direnv >/dev/null 2>&1 || exit 0

# Require an explicit project dir so we never approve/export a stray .envrc from
# some unrelated working directory.
[ -n "${CLAUDE_PROJECT_DIR:-}" ] || exit 0
cd "$CLAUDE_PROJECT_DIR" || exit 0
[ -f .envrc ] || exit 0

# Clear any inherited direnv state so `export` recomputes the full diff. Without
# this, a stale DIRENV_DIFF from the parent process makes direnv assume the env
# is already loaded and emit nothing.
unset DIRENV_DIR DIRENV_DIFF DIRENV_WATCHES DIRENV_FILE DIRENV_LAYOUT

direnv allow . 2>/dev/null
direnv export bash >>"$CLAUDE_ENV_FILE" 2>/dev/null

exit 0
33 changes: 20 additions & 13 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -1,23 +1,30 @@
{
"$schema": "https://json.schemastore.org/claude-code-settings.json",
"hooks": {
"SessionStart": [
{
"hooks": [
{
"type": "command",
"command": "${CLAUDE_PROJECT_DIR}/.claude/hooks/direnv.sh"
}
]
}
]
},
"permissions": {
"allow": [
"Bash(ls:*)",
"Bash(grep:*)",
"Bash(find:*)",
"Bash(git status:*)",
"Bash(git diff:*)",
"Bash(git log:*)",
"Bash(git add:*)",
"Bash(git commit:*)",
"Bash(git push:*)",
"Bash(git pull:*)",
"Bash(git checkout:*)",
"Bash(git branch:*)",
"Bash(just *)",
"Bash(cargo *)",
"Bash(bun *)",
"WebSearch"
"Bash(ffprobe:*)",
"Bash(rs/libmoq/build.sh:*)",
"WebFetch(domain:www.ietf.org)",
"WebFetch(domain:datatracker.ietf.org)",
"WebFetch(domain:docs.rs)",
"WebFetch(domain:moq-wg.github.io)",
"WebFetch(domain:moq.dev)",
"WebFetch(domain:doc.moq.dev)"
]
}
}
16 changes: 16 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,19 @@ indent_size = 2
[**.nix]
indent_style = space
indent_size = 2

# shfmt reads these natively. Match existing script style to keep
# the format pass minimal.
[*.sh]
indent_style = space
indent_size = 4
switch_case_indent = true

[demo/throttle/enable]
indent_style = space
indent_size = 4
switch_case_indent = true

# Skip vendored / build output trees when shfmt walks the repo.
[{node_modules,target,dist,.venv}/**]
ignore = true
2 changes: 2 additions & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
RUST_BACKTRACE=1
RUST_LOG="debug"
10 changes: 10 additions & 0 deletions .envrc
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,13 @@ if ! has nix_direnv_version || ! nix_direnv_version 3.1.0; then
source_url "https://raw.githubusercontent.com/nix-community/nix-direnv/3.1.0/direnvrc" "sha256-yMJ2OVMzrFaDPn7q8nCBZFRYpL/f0RcHzhmw/i6btJM="
fi
use_flake

# Reclaim stale Nix store paths in the background, at most once per week.
# nix-direnv pins the current dev shell, so only older versions are freed.
if has nix-collect-garbage; then
_gc_stamp="$PWD/.direnv/nix-gc-stamp"
if [ ! -f "$_gc_stamp" ] || [ -n "$(find "$_gc_stamp" -mtime +7 2>/dev/null)" ]; then
touch "$_gc_stamp"
(nix-collect-garbage --delete-older-than 7d >/dev/null 2>&1 &)
fi
fi
16 changes: 16 additions & 0 deletions .github/actions/setup-packaging/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Set up packaging tools
description: Install Nix and prepend the .#packaging output bin/ to $PATH.

runs:
using: composite
steps:
- uses: DeterminateSystems/nix-installer-action@00199f951aeb9404028a6e4b95ad42546f73296a # main
with:
determinate: false
- uses: DeterminateSystems/magic-nix-cache-action@908b263ff629f4cc17666315b7fd3ec127c6244d # main

- name: Build packaging tools from flake
shell: bash
run: |
out=$(nix build --no-link --print-out-paths .#packaging)
echo "$out/bin" >> "$GITHUB_PATH"
2 changes: 2 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ updates:
directory: "/"
schedule:
interval: "weekly"
cooldown:
default-days: 7
36 changes: 36 additions & 0 deletions .github/homebrew/Formula/moq-cli.rb.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
class MoqCli < Formula
desc "CLI for publishing and subscribing to Media over QUIC broadcasts"
homepage "https://moq.dev"
version "__VERSION__"
license any_of: ["MIT", "Apache-2.0"]

on_macos do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-cli-v#{version}/moq-cli-#{version}-aarch64-apple-darwin.tar.gz"
sha256 "__SHA256_AARCH64_APPLE_DARWIN__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-cli-v#{version}/moq-cli-#{version}-x86_64-apple-darwin.tar.gz"
sha256 "__SHA256_X86_64_APPLE_DARWIN__"
end
end

on_linux do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-cli-v#{version}/moq-cli-#{version}-aarch64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_AARCH64_UNKNOWN_LINUX_GNU__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-cli-v#{version}/moq-cli-#{version}-x86_64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_X86_64_UNKNOWN_LINUX_GNU__"
end
end

def install
bin.install "bin/moq-cli"
end

test do
system bin/"moq-cli", "--help"
end
end
54 changes: 54 additions & 0 deletions .github/homebrew/Formula/moq-gst.rb.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
class MoqGst < Formula
desc "GStreamer plugin for publishing and subscribing to Media over QUIC"
homepage "https://moq.dev"
version "__VERSION__"
license any_of: ["MIT", "Apache-2.0"]

depends_on "gstreamer"

on_macos do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-gst-v#{version}/moq-gst-#{version}-aarch64-apple-darwin.tar.gz"
sha256 "__SHA256_AARCH64_APPLE_DARWIN__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-gst-v#{version}/moq-gst-#{version}-x86_64-apple-darwin.tar.gz"
sha256 "__SHA256_X86_64_APPLE_DARWIN__"
end
end

on_linux do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-gst-v#{version}/moq-gst-#{version}-aarch64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_AARCH64_UNKNOWN_LINUX_GNU__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-gst-v#{version}/moq-gst-#{version}-x86_64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_X86_64_UNKNOWN_LINUX_GNU__"
end
end

def install
lib.install Dir["lib/libgstmoq.*"]
end

def caveats
<<~EOS
The moq GStreamer plugin is installed at:
#{opt_lib}/libgstmoq.#{OS.mac? ? "dylib" : "so"}

For GStreamer to discover it, add this prefix to GST_PLUGIN_PATH:
export GST_PLUGIN_PATH="#{opt_lib}:$GST_PLUGIN_PATH"

Then verify with:
gst-inspect-1.0 moq
EOS
end

test do
plugin = OS.mac? ? "libgstmoq.dylib" : "libgstmoq.so"
assert_predicate lib/plugin, :exist?
ENV["GST_PLUGIN_PATH"] = lib
system Formula["gstreamer"].opt_bin/"gst-inspect-1.0", "moq"
end
end
36 changes: 36 additions & 0 deletions .github/homebrew/Formula/moq-relay.rb.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
class MoqRelay < Formula
desc "Clusterable relay server for Media over QUIC"
homepage "https://moq.dev"
version "__VERSION__"
license any_of: ["MIT", "Apache-2.0"]

on_macos do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-relay-v#{version}/moq-relay-#{version}-aarch64-apple-darwin.tar.gz"
sha256 "__SHA256_AARCH64_APPLE_DARWIN__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-relay-v#{version}/moq-relay-#{version}-x86_64-apple-darwin.tar.gz"
sha256 "__SHA256_X86_64_APPLE_DARWIN__"
end
end

on_linux do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-relay-v#{version}/moq-relay-#{version}-aarch64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_AARCH64_UNKNOWN_LINUX_GNU__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-relay-v#{version}/moq-relay-#{version}-x86_64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_X86_64_UNKNOWN_LINUX_GNU__"
end
end

def install
bin.install "bin/moq-relay"
end

test do
system bin/"moq-relay", "--help"
end
end
36 changes: 36 additions & 0 deletions .github/homebrew/Formula/moq-token-cli.rb.tmpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
class MoqTokenCli < Formula
desc "JWT token generator and validator for moq-relay"
homepage "https://moq.dev"
version "__VERSION__"
license any_of: ["MIT", "Apache-2.0"]

on_macos do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-token-cli-v#{version}/moq-token-cli-#{version}-aarch64-apple-darwin.tar.gz"
sha256 "__SHA256_AARCH64_APPLE_DARWIN__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-token-cli-v#{version}/moq-token-cli-#{version}-x86_64-apple-darwin.tar.gz"
sha256 "__SHA256_X86_64_APPLE_DARWIN__"
end
end

on_linux do
on_arm do
url "https://github.com/moq-dev/moq/releases/download/moq-token-cli-v#{version}/moq-token-cli-#{version}-aarch64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_AARCH64_UNKNOWN_LINUX_GNU__"
end
on_intel do
url "https://github.com/moq-dev/moq/releases/download/moq-token-cli-v#{version}/moq-token-cli-#{version}-x86_64-unknown-linux-gnu.tar.gz"
sha256 "__SHA256_X86_64_UNKNOWN_LINUX_GNU__"
end
end

def install
bin.install "bin/moq-token-cli"
end

test do
system bin/"moq-token-cli", "--help"
end
end
9 changes: 9 additions & 0 deletions .github/justfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
set fallback

# Lint GitHub Actions workflows. Silently skipped if actionlint is not installed.
check:
@if command -v actionlint >/dev/null 2>&1; then actionlint; fi

# CI variant: actionlint is required (provided by the nix devShell).
ci:
actionlint
Loading
Loading