Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 73 additions & 23 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 7 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ moq-rtmp = { version = "0.3.9", path = "rs/moq-rtmp" }
moq-sock = { version = "0.2.0", path = "rs/moq-sock" }
moq-srt = { version = "0.3.9", path = "rs/moq-srt" }
moq-stats = { version = "0.2.9", path = "rs/moq-stats" }
moq-tokio = { version = "0.19.20", path = "rs/moq-tokio", default-features = false }
moq-tokio = { version = "0.19.20", path = "rs/moq-tokio", default-features = false, features = ["aws-lc-rs"] }
# Default features off on moq-transcode and moq-video so each workspace consumer
# chooses native codecs, OpenH264, and rendering explicitly. Both crates still
# provide working native plus software defaults when depended on directly.
Expand Down Expand Up @@ -229,17 +229,20 @@ usage = { package = "usage-rs", version = "6.11.1" }
uuid = { version = "1.26", features = ["v7"] }
web-async = { version = "0.1.5", features = ["tracing"] }
web-transport-iroh = "0.8"
# default-features off so the QUIC crypto provider is chosen by moq-tokio's
# aws-lc-rs / ring features.
# The WebTransport adapter released with moq-noq, from the same repository.
# The WebTransport adapter used by the experimental io_uring backend.
web-transport-moq = { version = "2.0", default-features = false }
web-transport-proto = "0.6"
web-transport-quinn = { version = "0.13", default-features = false }
web-transport-trait = "0.5"
web-transport-wasm = "0.7"
x11rb = { version = "0.14.0", features = ["randr", "xfixes"] }
zeroize = { version = "1", features = ["derive"] }

[patch.crates-io]
# Preserve raw QUIC close codes until moq-dev/web-transport#409 is released.
web-transport-quinn = { git = "https://github.com/moq-dev/web-transport", rev = "c979d8c237753fae08086acd8c357e6ae385739a" }
# The adapter's workspace dependency must share the trait identity with registry consumers.
web-transport-trait = { git = "https://github.com/moq-dev/web-transport", rev = "c979d8c237753fae08086acd8c357e6ae385739a" }
# web-transport-iroh depends on kio from crates.io. Without
# this, the lock carries a second kio whose pin drifts behind the member, and the
# next publish that reaches both fails to resolve a single version (#3551).
Expand Down
2 changes: 1 addition & 1 deletion doc/bin/cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ behind the `play` feature, since it pulls in windowing and audio-device
dependencies:

```bash
cargo install moq-cli --no-default-features --features "iroh,noq,websocket,play"
cargo install moq-cli --no-default-features --features "iroh,websocket,play"
```

## Capture
Expand Down
9 changes: 3 additions & 6 deletions doc/bin/relay/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ send_window = 33554432
qlog = "/var/log/moq/qlog" # Existing directory. Needs the `qlog` build feature.
```

The native QUIC stack uses BBRv3 for delay-based congestion control. Iroh also
uses noq and the same congestion controller.
The native QUIC stack always uses Quinn, with BBRv1 for delay-based
congestion control. Iroh and the experimental io\_uring runtime use noq and BBRv3.

Raise the receive windows when a fat, long path idles below the link rate: a
window under the bandwidth-delay product stalls the sender waiting for credit.
Expand All @@ -79,10 +79,7 @@ io_uring = false # Drive them with io_uring instead of tokio
Packets are steered by connection ID, so a client that migrates stays with its
worker. The group shares one port, including an ephemeral (zero) port, which is
resolved once and joined by every worker. Use an explicit port unless
something reads the bound address at startup. `workers` needs the `noq`
feature and real certificate files rather than `tls.generate`. A build without
QUIC rejects `workers` instead of
ignoring it. An embedding process leaves this group inside `Relay::run`;
something reads the bound address at startup. `workers` needs real certificate files rather than `tls.generate`. An embedding process leaves this group inside `Relay::run`;
taking the sockets out and driving them yourself is how a later library
update can drop QUIC while still compiling. `io_uring` additionally needs Linux 6.12+, the `io-uring` cargo
feature, and exactly one certificate read at startup; it serves moq-lite only,
Expand Down
2 changes: 1 addition & 1 deletion doc/lib/rs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ The reference implementation. Every crate is on
| --- | --- |
| [moq-net](/lib/rs/moq-net) | The pub/sub layer: sessions, origins, broadcasts, tracks, groups, frames. Transport-agnostic. |
| [moq-pattern](https://docs.rs/moq-pattern) | Exact path patterns: grammar, matching, and set algebra. Re-exported by moq-net and moq-auth. |
| [moq-tokio](https://docs.rs/moq-tokio) | Stands up QUIC with noq, TLS, WebSocket fallback, and iroh, from config or CLI flags. |
| [moq-tokio](https://docs.rs/moq-tokio) | Stands up QUIC with Quinn, TLS, WebSocket fallback, and iroh, from config or CLI flags. |
| [moq-sock](https://docs.rs/moq-sock) | Dual-stack socket binding, `SO_REUSEPORT` groups steered by QUIC connection ID, and CPU pinning for thread-per-core listeners. |
| [moq-uring](https://docs.rs/moq-uring) | Experimental Linux io\_uring worker: one pinned thread per ring serving moq-lite over its own QUIC stack. |
| [hang](/lib/rs/hang) | The media layer: catalog, containers, ordered frame delivery. |
Expand Down
2 changes: 1 addition & 1 deletion doc/lib/rs/moq-net.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ above ([hang](/lib/rs/hang)); relays and CDNs implement only this.
- **Routes** record the relay hops and a cost, which is what the relay [cluster](/bin/relay/cluster) routes on. A hop of 0 marks the chain anonymous: `Route::is_anonymous()` is true, and that route ranks below every fully identified one. `Route::source()` says where a delivered route entered: `Source::Local`, or `Source::Peer(hop)` when a handle marked `origin::Producer::peer()` announced it. `origin::Consumer::local()` sees only the local ones.
- **Stats** counters per broadcast and session, drained by [`moq-stats`](https://docs.rs/moq-stats).

It runs over anything implementing `web_transport_trait::poll::Session`: noq, the
It runs over anything implementing `web_transport_trait::poll::Session`: Quinn, noq, the
browser, iroh, or qmux over TCP, Unix sockets, and
WebSockets. [`moq-tokio`](https://docs.rs/moq-tokio) wires those up.

Expand Down
6 changes: 4 additions & 2 deletions doc/setup/upgrade.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,10 @@ Other changes to a deployment:
frame. `moq auth serve --key` takes a file, not an https or JWKS URL.
`moq auth sign --root` is the token root and JS `verify --root` the dialed
path. `/.cluster*` roots are reserved. `--auth-public a,b` splits on commas.
- **noq is the only QUIC stack** (#3811). The `quinn` and `quiche` cargo
features and the backend setting are gone.
- **Quinn is the native QUIC stack**. Remove `noq` and `quinn` from Cargo feature
lists; QUIC is always available. The backend setting and `quiche` feature
remain removed. Other moq-tokio features remain optional. Iroh and the
experimental io\_uring runtime still use noq.
- **Stats counters** are `*_started` / `*_ended` (`sessions_started`,
`announces_ended`, ...). This release still writes the old `announced` /
`*_closed` names beside them, so move consumers now.
Expand Down
2 changes: 1 addition & 1 deletion rs/hang/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ features = ["from", "display", "debug"]
[dev-dependencies]
anyhow = { workspace = true }
moq-mux = { path = "../moq-mux" }
moq-tokio = { path = "../moq-tokio", default-features = false, features = ["noq", "aws-lc-rs", "websocket"] }
moq-tokio = { path = "../moq-tokio", default-features = false, features = ["aws-lc-rs", "websocket"] }
tokio = { workspace = true, features = ["macros", "fs"] }
tracing = { workspace = true }
url = { workspace = true }
7 changes: 1 addition & 6 deletions rs/justfile
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,6 @@ wasm-fix *args:
audit:
cargo deny check --show-stats

# Verify relay startup validation without a QUIC backend.
relay-minimal:
cargo nextest run --locked -p moq-relay --no-default-features --lib -E 'test(workers_require_a_quic_backend)'

# Outside nextest because the staticlib link alone outlasts its hang budget.

# Compile and run moq-c's C fixtures, and the C doc samples, against libmoq.a. Must run on Unix.
Expand All @@ -171,9 +167,8 @@ c-tests:
# Compile the workspace at the feature extremes.
features:
cargo check --locked --workspace {{ no_fuzz }} --all-targets --no-default-features
cargo hack check --locked -p moq-tokio --each-feature --exclude-features _transport --features aws-lc-rs
cargo hack check --locked -p moq-tokio --each-feature --features aws-lc-rs
cargo check --locked -p moq-relay --no-default-features
just rs relay-minimal
cargo check --locked -p moq-cli --no-default-features
cargo check --locked -p moq-bench --no-default-features
cargo check --locked -p moq-boy --no-default-features
Expand Down
Loading
Loading