Skip to content

Changelog

Complete changelog documenting all QuicD releases, features, bug fixes, and breaking changes.

Features and changes in development.

  • Media over QUIC (MOQ) framework (experimental)
  • QUIC datagram support (partial)
  • Enhanced telemetry metrics
  • Performance improvements in stream management
  • Updated to latest Quiche upstream
  • Connection migration edge cases
  • Memory leak in connection cleanup

Major release with HTTP/3 support and performance improvements.

  • HTTP/3 Server: Complete implementation via quicd-h3 crate
    • QPACK header compression
    • Custom request handler trait
    • Static file serving example
    • Streaming response support
  • Worker Architecture: Multi-threaded worker pool
    • CPU affinity support
    • NUMA-aware memory allocation
    • Per-worker event loops
  • eBPF Routing: Hardware-accelerated connection routing
    • XDP program for packet steering
    • Connection table in eBPF maps
    • Reduced cache thrashing
  • OpenTelemetry Integration: Comprehensive observability
    • Prometheus metrics endpoint
    • Distributed tracing
    • Custom span attributes
  • Configuration System: Flexible configuration
    • TOML file support
    • Environment variable overrides
    • CLI argument parsing
    • Validation and defaults
  • Breaking: Refactored QuicAppFactory trait interface
    • Now takes ConnectionHandle instead of raw connection
    • Async trait with BoxFuture return type
  • Performance: 3x throughput improvement over v0.2
    • Zero-copy buffer management
    • Batch packet processing
    • Optimized stream state machine
  • API: Simplified event stream API
    • AppEvent enum for all connection events
    • Stream-based event delivery
    • Better backpressure handling
  • Connection ID collision handling
  • Stream flow control edge cases
  • Idle timeout calculation
  • ACK frame generation
  • Memory leaks in error paths
  • Updated TLS dependencies
  • Fixed potential DoS vector in connection handling
  • Improved rate limiting

Application interface and custom protocol support.

  • Application Interface (quicd-x crate)
    • QuicAppFactory trait for custom protocols
    • ConnectionHandle API
    • Event-driven stream management
    • Send/Recv stream handles
  • Echo Example: Complete echo server implementation
  • Documentation: Initial architecture docs
  • Testing: Integration test suite
  • Breaking: Moved from connection callbacks to factory pattern
  • Architecture: Separated transport from application layer
  • Improved error handling with QuicError enum
  • Stream state synchronization
  • Connection closure race conditions
  • Flow control window updates
  • Old callback-based connection handling (removed in v0.3)

Initial release with basic QUIC transport.

  • QUIC v1 Transport: RFC 9000 compliant
    • Connection establishment
    • Stream management
    • Flow control
    • Congestion control (CUBIC)
    • Loss recovery
  • TLS 1.3: Cloudflare Quiche integration
    • Handshake handling
    • Key derivation
    • 1-RTT handshake
  • Single-threaded Runtime: Basic event loop
    • UDP socket I/O
    • Connection state machine
    • Timer management
  • Basic Configuration: Command-line arguments
  • Examples: Simple echo client/server
  • No HTTP/3 support yet
  • Single-threaded limits performance
  • Limited observability
VersionRelease DateSupport StatusEnd of Support
0.3.x2024-12-15✅ ActiveTBD
0.2.x2024-09-15🔧 Maintenance2025-03-15
0.1.x2024-06-01❌ Unsupported2024-12-01

Breaking Changes:

  1. QuicAppFactory trait changed:

    // Old (0.2)
    impl QuicAppFactory for MyApp {
    fn create_app(&self, conn: Connection) {
    // ...
    }
    }
    // New (0.3)
    #[async_trait]
    impl QuicAppFactory for MyApp {
    async fn create_app(&self, handle: ConnectionHandle) -> Result<(), QuicError> {
    // ...
    Ok(())
    }
    }
  2. Configuration format changed:

    # Old (0.2)
    [server]
    bind = "0.0.0.0:4433"
    workers = 4
    # New (0.3)
    [runtime]
    bind_addr = "0.0.0.0:4433"
    worker_count = 4
  3. Event handling:

    // Old (0.2)
    conn.on_stream(|stream| { /* ... */ });
    // New (0.3)
    let mut events = handle.event_stream();
    while let Some(event) = events.next().await {
    match event {
    AppEvent::NewStream { stream_id, .. } => { /* ... */ }
    // ...
    }
    }

Migration Steps:

  1. Update Cargo.toml dependencies:

    quicd-x = "0.3"
    quicd-h3 = "0.3" # If using HTTP/3
  2. Update trait implementations (see above)

  3. Migrate configuration files to new format

  4. Update event handling code

  5. Test thoroughly - behavior changes in stream management

Breaking Changes:

  1. Connection handling completely redesigned
  2. New quicd-x crate for application interface

Migration: Recommend starting fresh with 0.2 API as changes are extensive.

Our release process ensures quality and predictability:

  1. Development: Features developed in feature branches
  2. Testing: Comprehensive test suite must pass
  3. Review: Code review by maintainers
  4. Documentation: Docs updated for new features
  5. Changelog: This file updated with changes
  6. Tagging: Version tagged in git
  7. Announcement: Release announced on GitHub

QuicD follows Semantic Versioning 2.0.0:

  • MAJOR (1.0.0): Breaking API changes
  • MINOR (0.x.0): New features, backward compatible
  • PATCH (0.0.x): Bug fixes, no API changes

During pre-1.0 development (0.x.y):

  • Minor versions (0.x) may include breaking changes
  • Patch versions (0.0.x) are backward compatible
  • We aim for stability but prioritize getting APIs right

After 1.0.0 release (planned Q2 2025):

  • Strict SemVer adherence
  • Breaking changes only in major versions
  • Deprecation warnings in minor versions
  • LTS support for major versions

Security vulnerabilities are tracked separately. See SECURITY.md for:

  • Supported versions
  • Reporting process
  • Security advisories

Current Advisories: None

  • None currently
  • Old connection callback API (deprecated in 0.2)
    • Replaced with QuicAppFactory trait
    • Migration guide available
  • 0.3.0: Minimum kernel version increased to 5.1 (io_uring requirement)
  • 0.2.0: Kernel 4.18+ supported
  • 0.1.0: Kernel 4.4+ supported

Key dependency versions:

Dependency0.3.00.2.00.1.0
Rust1.70+1.65+1.60+
Quiche0.190.180.17
Tokio1.351.321.28
io_uring0.6--

Performance improvements across versions:

Metric0.3.00.2.00.1.0
Throughput (Gbps)1242
Latency (μs p99)150500800
Connections (max)100K50K10K
CPU efficiency90%70%60%
  • 0.3.0: 85% code coverage
  • 0.2.0: 75% code coverage
  • 0.1.0: 60% code coverage

Tested against:

  • Clients: quiche, ngtcp2, msquic, quinn
  • Servers: Cloudflare QUIC, nginx-quic, h2o
  • Test suite: QUIC Interop Runner
  • 0.3.0: Complete documentation website (this site!)
  • 0.2.0: API docs and basic README
  • 0.1.0: README only

Thank you to all contributors! See GitHub contributors page.

  • Total commits: 450+
  • Contributors: 8
  • GitHub stars: 120+
  • Open issues: 15
  • Closed issues: 85

See Roadmap for planned features and release timeline.

  • Media over QUIC (MOQ) stable release
  • QUIC datagrams API
  • Connection migration improvements
  • Performance optimizations
  • WebTransport support
  • BBR congestion control
  • Advanced observability features
  • Stable API (SemVer guarantees)
  • Production-ready for all use cases
  • Comprehensive documentation
  • Performance targets met

This changelog is maintained following Keep a Changelog principles.

Last updated: December 2024