Skip to content

Releases: genmeta/dquic

v0.7.0-beta.4

v0.7.0-beta.4 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 16 Jul 06:55

dquic v0.7.0-beta.4

Path admissibility

  • Validate concrete QUIC paths before creating connection paths or accepting connectless initial packets.
  • Preserve receive-side destination and IPv6 link-local scope evidence through UDP, interface, connection, and traversal layers.
  • Keep outbound wildcard-source selection owned by the selected IO while rejecting invalid direct/link, address-family, scope, and loopback combinations.
  • Report only accepted direct paths and prevent invalid connectless packets from consuming listener backlog or registering ODCIDs.

Published crates

  • qudp 0.7.0-beta.1
  • qinterface 0.7.0-beta.2
  • qtraversal 0.7.0-beta.4
  • qconnection 0.8.0-beta.1
  • dquic 0.7.0-beta.4

Authentication and provenance

  • Tag: v0.7.0-beta.4
  • Annotated tag object: 7af14b995715a1a6fbb6fca74f0cc78c2e1c3758
  • Target commit: 388a3ec99837480f8fc0eed7e400aa3f12a11c3e
  • Workflow run: https://github.com/genmeta/dquic/actions/runs/29478110675
  • Workflow attempt: 1
  • Published by: GitHub Actions Publish crates.io workflow

v0.7.0-beta.3

v0.7.0-beta.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 15 Jul 12:12
56a82f5

dquic v0.7.0-beta.3

Changes

  • Make interface watching opt-in through the netwatcher feature across qinterface, qconnection, and dquic.
  • Move qinterface to the 0.7.0 prerelease compatibility line because its default public API no longer exposes watcher-only methods.
  • Keep the published transport dependency graph on one compatible qinterface version.

Published crates

  • qinterface v0.7.0-beta.1
  • qtraversal v0.7.0-beta.3
  • qconnection v0.7.0-beta.2
  • dquic v0.7.0-beta.3

Unchanged workspace crates remain on their existing published versions. h3-shim remains outside the dquic release surface.

Authentication and provenance

  • Tag: v0.7.0-beta.3
  • Annotated tag object: e6002165220a9d63bd33b58ba3a157d2077f6521
  • Target commit: 56a82f5a96fc38c9c54a796d057d3489fb9def68
  • Workflow run: https://github.com/genmeta/dquic/actions/runs/29414289443
  • Workflow attempt: 1
  • Published by: GitHub Actions Publish crates.io workflow

v0.7.0-beta.2

v0.7.0-beta.2 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Jul 09:17
3a00b54

dquic v0.7.0-beta.2

Changes

  • Preserve distinct DNS resolver sources for the same peer endpoint address in qtraversal, so source-specific NAT traversal constraints such as mDNS NIC affinity remain available.
  • Keep duplicate peer endpoint insertion idempotent.
  • Standardize dquic tracing/logging.
  • Mark prerelease tags as GitHub prereleases in release automation.

Published crates

  • qtraversal v0.7.0-beta.2
  • dquic v0.7.0-beta.2

Unchanged workspace crates remain on their existing published versions. h3-shim remains outside the dquic release surface.

Authentication and provenance

  • Tag: v0.7.0-beta.2
  • Annotated tag object: 54e7b4f1a4bbb9c087be3bc68dec341e247d83d6
  • Target commit: 3a00b5401402209c3783d938d8575d176486c03e
  • Workflow run: https://github.com/genmeta/dquic/actions/runs/28780925587
  • Workflow attempt: 1
  • Published by: GitHub Actions Publish crates.io workflow

v0.7.0-beta.1

v0.7.0-beta.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Jul 07:45
20253cb

Beta release for the dquic transport line.

  • Correct the qresolve::Publish abstraction boundary: publish implementations now own their wire format, packet construction, authentication, and backend-specific encoding details instead of requiring callers to construct publish packets across the trait boundary.

  • Decouple the public publish contract from a specific packet format, making future backend migrations and test/mock publisher implementations easier.

  • Advance qresolve, qtraversal, qconnection, and dquic to 0.7.0-beta.1 for the new resolver/transport compatibility line.

  • Keep unchanged workspace members on their existing release lines.

  • qresolve 0.7.0-beta.1

  • qtraversal 0.7.0-beta.1

  • qconnection 0.7.0-beta.1

  • dquic 0.7.0-beta.1

  • crates.io via tag-triggered publish CI

Authentication and provenance

  • Tag: v0.7.0-beta.1
  • Annotated tag object: 1bcd9010d287d5085953dc6f5c3973e013dae115
  • Target commit: 20253cbd6c874301ec4d8ab7ca014c0390324c61
  • Workflow run: https://github.com/genmeta/dquic/actions/runs/28573900151
  • Workflow attempt: 1
  • Published by: GitHub Actions Publish crates.io workflow

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 25 Jun 16:55
f4946d5

dquic v0.6.0

This release moves the dquic release-surface crates to the 0.6.0 compatibility line, centered on typed local endpoints, connection-owned path discovery, and safer connection/path lifecycle handling.

Highlights:

  • Added typed local endpoint publishing in qinterface, replacing the generic location-event model.
  • Routed observed local endpoint sets through qconnection's AddressBook so connection path discovery remains connection-owned.
  • Reworked STUN endpoint advertisement in qtraversal around keyed, owned endpoint updates.
  • Preserved partial path bursts instead of dropping already-loaded burst segments on later load errors.
  • Terminated invalid pathless connections more explicitly.
  • Exposed attempted connection state for callers that need to distinguish pre-establishment failure states.
  • Reduced eager per-path allocation and lazily initialized packet-space dispatch.
  • Released dropped location observers, closed connection resources, and ready IO wakers more reliably.
  • Kept interface rebinding from reusing closed IO and avoided holding interface locks while notifying device subscribers.

Compatibility notes:

  • Release-surface workspace crates are bumped to 0.6.0.
  • qmacro intentionally remains on 0.5.1.
  • h3-shim remains on 0.5.1 and is not part of the dquic release surface.
  • qconnection local endpoint compatibility APIs were removed; callers should pass Locations at subscription sites and rely on the typed endpoint flow.

Release surface:

  • dquic 0.6.0
  • qbase 0.6.0
  • qconnection 0.6.0
  • qcongestion 0.6.0
  • qdatagram 0.6.0
  • qevent 0.6.0
  • qinterface 0.6.0
  • qprotocol 0.6.0
  • qrecovery 0.6.0
  • qresolve 0.6.0
  • qtraversal 0.6.0
  • qudp 0.6.0

Full changelog: v0.5.2-qconnection...v0.6.0

Authentication and provenance

v0.5.2-qconnection

Choose a tag to compare

@github-actions github-actions released this 17 Jun 15:44
3be3379

qconnection 0.5.2

Staged member-crate release for qconnection.

This release publishes qconnection 0.5.2 only. The wider dquic workspace and dquic crate remain at 0.5.1.

Highlights

  • Fixed connection close/termination cleanup paths so closing resources are finalized after PTO.
  • Retained connections while closing, allowing delayed cleanup to complete reliably.
  • Routed close events through connection state and termination ownership.
  • Added final closed-state tracking so Closed waits for the real terminal state.
  • Preserved silent close behavior for silent refusal paths.
  • Added coverage for close handoff cleanup and silent close forwarding.

Downstream Impact

Downstreams using normal Cargo version requirements can pick up this patch with:

cargo update -p qconnection

Projects depending on dquic = "0.5.1" can also receive qconnection 0.5.2 transitively, because the published dquic 0.5.1 dependency requirement for qconnection is compatible with 0.5.2.

This will not update consumers that pin qconnection = "=0.5.1" or use a git/path/patch override.

Release Automation

  • The publish workflow now selects only initialized crates with missing versions, so this staged tag publishes qconnection only.
  • v* tag-triggered publish runs now create a GitHub Release automatically after the crates.io publish step succeeds.

Release Surface

  • Published crate: qconnection 0.5.2
  • Tag: v0.5.2-qconnection
  • Repository target branch: main
  • Publish path: tag-triggered Publish crates.io workflow

Full changelog: v0.5.1...v0.5.2-qconnection

Authentication and provenance

  • Tag: v0.5.2-qconnection
  • Annotated tag object: 5dd832e2925066377f0c993173d641670b526f3d
  • Target commit: 3be337954640e8c91f51b95b86823a64d3ba66a3
  • Workflow run: https://github.com/genmeta/dquic/actions/runs/27701238911
  • Workflow attempt: 1
  • Published by: GitHub Actions Publish crates.io workflow

v0.5.1

Choose a tag to compare

@eareimu eareimu released this 15 Jun 03:56

dquic v0.5.1

This release focuses on traversal correctness, interface/bind semantics,
connection lifecycle cleanup, and workspace publish readiness across the
dquic stack.

Traversal and NAT maintenance

  • qtraversal now refreshes receive-side routing dependencies correctly during
    reinit and interface rebind.
  • NAT mappings are refreshed sooner to reduce stale external-address state.
  • Local endpoints are now tracked in the traversal address book.
  • STUN probe handling now uses typed errors instead of looser classification.
  • Traversal verification was tightened to wait explicitly for STUN data.

These changes make punching, rebinding, and long-lived traversal sessions more
predictable under interface churn and mapping refresh.

Interface and UDP bind semantics

  • qinterface no longer treats transient interface statistics (rx / tx
    counters and timestamps) as meaningful interface changes.
  • Interface-bound UDP sockets are now bound to their devices more explicitly.
  • qudp now treats inet://[::]:PORT as strict IPv6-only behavior.

Downstreams that need dual-stack exposure should bind IPv4 and IPv6
explicitly instead of relying on an IPv6 wildcard bind to cover both.

Connection lifecycle and timers

  • dquic::common no longer blocks Network::bind on synchronous STUN
    resolution.
  • qconnection now exposes Arc<Connection> directly and breaks the strong
    reference cycle that could keep connections alive after external owners were
    dropped.
  • qconnection now exposes local punch endpoints.
  • qbase idle-timer handling was corrected, including path-creation start
    behavior and incorrect send-side renewal.
  • TLS terminology was normalized from agent to authority.
  • connection auth log copy was normalized accordingly.

Resolver, protocol, and TLS surface

  • a new qprotocol crate now carries routing / control protocol pieces
  • qresolve resolver traits are now downcastable
  • qresolve can distinguish H3 DNS sources more explicitly
  • qresolve publish metadata now declares the required tokio/net feature set
  • custom server certificate verification gained OCSP support

Workspace publish readiness

  • the workspace publish surface was prepared for 0.5.1
  • qprotocol publishing metadata now uses the workspace README
  • unused dependencies were removed across workspace crates
  • release workflow naming was normalized to publish
  • the workspace publish workflow now supports sequential publish handling for
    the full crate set

Upgrade notes

  • QuicClient / QuicListeners connection-returning APIs now expose
    Arc<Connection> directly
  • inet://[::]:PORT is now IPv6-only
  • TLS naming has been normalized from agent to authority
  • the workspace now includes the new qprotocol crate

Full changelog: v0.5.0...v0.5.1

v0.5.0

Choose a tag to compare

@eareimu eareimu released this 17 Apr 14:01

dquic v0.5.0

The project has been renamed from gm-quic to dquic.

The private gm-quic-traversal fork is now merged into the main tree,
contributing two new crates:

  • qtraversal — STUN client/server, hole punching, port prediction.
  • qresolve — DNS resolver trait and implementation.

qunreliable has been renamed to qdatagram.

qinterface has been reworked around a BindUri-based identifier and
a component-oriented core, replacing the previous iface/local/factory layout.

Connection is now Clone, and the client connect path does multi-path
probing with async resolution. A new qconnection::traversal module
wires things into qtraversal. qbase gains frames for address management
and hole punching (add_address, remove_address, punch_hello,
punch_done, punch_me_now); ReceiveFrame/SendFrame move into frame::io;
*_FRAME_TYPE constants are replaced by WriteFrameType;
PacketContains is renamed to PacketContent.

The top-level dquic crate exposes per-interface STUN / relay configuration,
on-demand NAT detection, extended ToCertificate / ToPrivateKey
implementations, and a Router::close() for clean shutdown.
New traversal-client / traversal-server examples demonstrate the flow,
and the old inline tests have been extracted into tests/{auth,echo,traversal}.rs.

Notable fixes include STUN agent filtering by iface family,
a puncher deadlock resolved around address_book,
reliable direct PunchDone confirmation, client-only 0-RTT logging,
and renewed localhost test certificates.
Dependencies netdev, rand, reqwest, and nix were bumped.
CI gains traversal, commitlint, and feishu-bot workflows;
interop.yml is removed; the Docker image builds with cache.

Upgrade notes

  • Rename dependencies: gm-quicdquic, qunreliableqdatagram.
  • Migrate from the old qinterface::iface / local / factory modules
    to the new BindUri + component API.
  • Replace *_FRAME_TYPE constants with WriteFrameType.
  • Rename PacketContains to PacketContent.

Full changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@eareimu eareimu released this 19 Dec 08:30

Summary

Core & Network
Rewrote interface monitoring and packet assembly for better stability. Improved connection lifecycle management, added connection metrics, and implemented Sink/Stream traits for stream IO.

Identity
Introduced identity-based signing and verification mechanisms, enabling secure identity authentication and verification for both client and server.

Client and Server
Enhanced client capabilities with built-in DNS resolution support and optimized interface binding logic for better connectivity. Optimize QuicListeners API

Community
Added support for R2CN.

Toolchain
Modernized the codebase by adopting Rust 2024 edition and upgrading the Minimum Supported Rust Version (MSRV) to 1.88.

Improvements
Improved TLS state handling and Windows compatibility. Implemented various performance optimizations around buffer management and idle timer handling.

What's Changed

  • fix: remove TooManyPart error for parsing BindUri by @huster-zhangpeng in #613
  • fix: compatibility with windows interface names by @huster-zhangpeng in #614
  • fix: use the interface's ip to test liveness at first by @huster-zhangpeng in #615
  • feat: rewrite quic packets assembly by @eareimu in #616
  • fix: remove incorrect assertions and boundary judgments by @eareimu in #618
  • docs: fix typo in README_CN.md by @ytlm in #617
  • fix(qinterface): recreate the path when its interface is rebound by @eareimu in #619
  • fix: compatible with traversal by @eareimu in #620
  • ci: rename gm-quic-multi-path to fix benchmark ci by @eareimu in #621
  • feat: publish endpoint address when binding interface by @metah3m in #622
  • build(deps): update x509-parser requirement from 0.17 to 0.18 by @dependabot[bot] in #623
  • build(deps): update windows-sys requirement from 0.60 to 0.61 by @dependabot[bot] in #624
  • fix: correct typo in builder function name for crypto provider by @stevefan1999-personal in #629
  • feat: fine-grained control over client auth behavior, remove or downgrade logs, fix the definition of error that violates the standard library design by @eareimu in #628
  • feat: miscellaneous by @eareimu in #635
  • feat: support R2CN by @huster-zhangpeng in #634
  • build(deps): update netdev requirement from 0.31 to 0.39 by @dependabot[bot] in #632
  • Replace u8 with Dir enum in FrameType for stream direction by @Copilot in #637
  • docs: add Dependencies and MSRV badge by @huster-zhangpeng in #638
  • Add connection-level metrics for QUIC stream data volumes by @Copilot in #640
  • fix(readme): code examples by @eareimu in #644
  • Replace raw u8 flags with typed enums in FrameType by @Copilot in #643
  • feat: agent, client builtin dns by @eareimu in #646
  • build(deps): update darling requirement from 0.21 to 0.23 by @dependabot[bot] in #645
  • feat: release v0.4.0 by @eareimu in #647

New Contributors

Full Changelog: v0.3.0...v0.4.0

v0.3.0

Choose a tag to compare

@eareimu eareimu released this 29 Jul 12:19

Summary

Multipath Transport Support

  • Support multipath data transmission, improving transport capacity and reliability
  • Implement multipath handshaking while maintaining compatibility with traditional QUIC implementations

0-RTT Support

  • Implement 0-RTT feature with simple API usage

Security Enhancements

  • Add client authentication mechanism (AuthClient)
  • Implement anti-port-scanning functionality to enhance server security

Timeout Mechanism Improvements

  • Implement comprehensive handshake timeout and idle timeout control
  • Active heartbeat packet mechanism to maintain connection liveness, optimizing long-connection scenarios

BindURI Abstraction

  • Support binding to network interfaces rather than just IP addresses
  • Enhanced network interface dynamic adaptation capability, significantly improving mobility support

In addition, there are numerous architectural optimizations and bug fixes, including parameters system refactoring, error handling mechanism optimization, and multiple critical bug fixes.

What's Changed

Read more