Skip to content

feat(moq-native): default QUIC backend to noq instead of quinn#1891

Merged
kixelated merged 1 commit into
devfrom
claude/friendly-wright-c6dc9f
Jun 23, 2026
Merged

feat(moq-native): default QUIC backend to noq instead of quinn#1891
kixelated merged 1 commit into
devfrom
claude/friendly-wright-c6dc9f

Conversation

@kixelated

@kixelated kixelated commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

Summary

Switches the default-compiled and default-selected QUIC backend from quinn to noq across moq-native and all binaries. quinn stays available as an opt-in --features quinn escape hatch, so nothing is removed.

  • Backend selection (client.rs, server.rs): flipped the auto-detect priority so noq wins when multiple backends are compiled (was quinn > noq > quiche, now noq > quinn > quiche).
  • Feature defaults flipped to noq, adding a noq feature where it was missing: moq-relay, moq-cli, moq-boy, moq-bench, moq-hls, moq-rtc, moq-srt, moq-rtmp. moq-ffi, libmoq, and moq-gst inherit the new default via default-features = true.
  • Crypto-provider wiring fix (latent bug): quinn routed its provider through quinn?/rustls-aws-lc-rs / quinn?/rustls-ring, but noq had no equivalent. web-transport-noq forced aws-lc-rs via its own default features, so a --features noq,ring build silently pulled in aws-lc-rs anyway. Set web-transport-noq default-features = false (workspace root) and route the provider through moq-native's aws-lc-rs/ring features, exactly mirroring quinn.
  • Logging/docs: added a noq=info tracing directive alongside quinn=info; updated doc/lib/rs/... to name noq as the default.

Behavioral notes

  • Congestion control changes to BBR3. noq explicitly configures BBR3; quinn ran default CUBIC (it carried a TODO: validate BBR before enabling). So the effective default congestion controller for the project is now BBR3.
  • Maturity is the real trade-off, not capability: web-transport-noq is 0.2.0 and noq is 1.0.0, both younger than the battle-tested web-transport-quinn 0.11 / quinn. Functionality is at parity (mTLS, preferred_address, QUIC-LB CID generation, bloom/retry, platform-verifier all present and tested).

Public API / breaking-change notes

No public Rust API signatures change. This is a default-feature + wire-stack swap, hence targeting dev: release binaries (moq-relay, moq-cli) now ship noq by default, and the default congestion controller changes.

Test plan

  • cargo check --workspace (default = noq) clean
  • moq-native quinn opt-in still builds (--no-default-features --features quinn,aws-lc-rs,websocket)
  • --features noq,ring,websocket now builds correctly (previously mis-wired)
  • noq backend integration tests pass: noq_raw_quic, noq_webtransport, noq_mtls
  • taplo format --check + cargo fmt --check (via nix) clean

(Written by Claude)

Switch the default-compiled and default-selected QUIC backend from quinn
to noq across moq-native and all binaries. quinn stays available as an
opt-in `--features quinn` escape hatch.

- moq-native: `default` feature -> noq; auto-detect priority now prefers
  noq over quinn when multiple backends are compiled.
- Binaries (relay, cli, boy, bench, hls, rtc, srt) default to noq, each
  gaining a `noq` feature where it was missing. moq-ffi/libmoq/moq-gst
  inherit the new default via `default-features = true`.
- Fix crypto-provider feature wiring: quinn routed its provider through
  `quinn?/rustls-aws-lc-rs` / `quinn?/rustls-ring`, but noq had no
  equivalent. web-transport-noq forced aws-lc-rs via its own defaults, so
  a `--features noq,ring` build silently pulled aws-lc-rs anyway. Set
  web-transport-noq `default-features = false` and route the provider
  through moq-native's aws-lc-rs/ring features, mirroring quinn.
- Add a `noq=info` tracing directive alongside `quinn=info`; update docs.

noq uses BBR3 congestion control by default (quinn ran default CUBIC
with a TODO to validate BBR), so the effective default congestion
controller changes to BBR3.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@kixelated kixelated force-pushed the claude/friendly-wright-c6dc9f branch from 766ccc6 to 126ee01 Compare June 23, 2026 18:44
@kixelated kixelated enabled auto-merge (squash) June 23, 2026 18:45
@kixelated kixelated merged commit ec405f5 into dev Jun 23, 2026
2 checks passed
@kixelated kixelated deleted the claude/friendly-wright-c6dc9f branch June 23, 2026 18:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant