Changes for version 0.02 - 2026-10-02

  • Simplify the public documentation for readers who are new to QUIC, event-loop integration, and the native implementation.
  • Add ECN metadata plumbing between UDP adapters and ngtcp2.
  • Add Datagram->ecn with the outgoing two-bit IP-header ECN codepoint.
  • Add an optional ECN argument to Endpoint->receive_datagram and Driver->receive while preserving the existing three-argument API.
  • Pass received ECN markings into ngtcp2 so ACK ECN counts and native per-path ECN validation work correctly.
  • Preserve ECN markings on normal output and connection-close packets.
  • Verify that preserved ECN feedback keeps ECT(0) active and stripped ECN feedback makes ngtcp2 fall back to Not-ECT.
  • Add full client/server QUIC v2 transport support.
  • Add RFC 9368 Compatible Version Negotiation for v1 and v2.
  • Add client version => 1|2 and server preferred_version => 1|2.
  • Add Connection->version and Connection->client_chosen_version.
  • Bind TLS session tickets and NEW_TOKEN address tokens to the QUIC version that issued them while keeping their public values opaque.
  • Automatically select and lock the correct version when saved session, address-token, or 0-RTT state is reused.
  • Verify that ngtcp2 PMTU discovery is active on established paths and restarts after validated path migration.
  • Add Connection->path_max_udp_payload_size for the discovered current-path UDP payload ceiling.
  • Add NEW_TOKEN address-validation reuse for future client connections.
  • Add Connection->address_token and client address_token => $token.
  • Automatically issue NEW_TOKEN after validated server handshakes and after validated peer path changes that request a fresh token.
  • Accept valid NEW_TOKEN on the stateless front door without another Retry.
  • Treat invalid NEW_TOKEN as an unvalidated address and fall back to Retry.
  • Add validated client connection migration to a new local network path.
  • Add Connection->path, Connection->path_validation, and Connection->path_validation_status.
  • Wire ngtcp2 path-validation start/result callbacks for clients and servers.
  • Add optional server preferred_address advertisement and automatic client validation/selection for a matching address family.
  • Keep migration event-loop neutral: Datagram continues to carry the exact local and peer addresses selected by QUIC.
  • Add path tests for successful migration, unreachable-path failure with fallback, preferred-address CID routing, and existing-stream continuity.
  • Split stream aborts into independent RESET_STREAM and STOP_SENDING operations.
  • Make Stream->reset abort only the local send side, matching its documented behavior.
  • Add Stream->stop_sending for aborting the local receive side.
  • Expose local and peer STOP_SENDING application error codes.
  • Preserve the opposite direction of bidirectional streams after either directional abort.
  • Add TLS 1.3 session resumption with opaque client session tickets.
  • Add Connection->session_ticket and Connection->resumed.
  • Protect server session tickets with a per-server AES-256-GCM key.
  • Fall back to a full handshake when a saved ticket is expired, invalid, or belongs to a different server ticket key.
  • Add explicit QUIC 0-RTT / early-data support on top of session resumption.
  • Add Connection->early_data_state as one opaque ticket-plus-transport blob.
  • Add Connection->early_data_status with none/pending/accepted/rejected state.
  • Add Stream->early_data so servers can retain replay-sensitive origin.
  • Require explicit client early_data and server accept_early_data opt-in.
  • Roll rejected 0-RTT streams back through ngtcp2 and invalidate stale Stream objects without disturbing the continuing TLS handshake.
  • Add conservative single-use 0-RTT ticket replay protection; the first successful ticket use consumes its 0-RTT allowance, while later uses can still resume TLS with early application data rejected.

Documentation

Modules

QUIC transport for Perl
one QUIC connection
one UDP packet Net::QUIC wants sent
connect Net::QUIC to an event loop
lower-level QUIC engine
one reliable QUIC byte stream