Skip to content

Releases: bojieli/queqiao

v0.6.3

Choose a tag to compare

@github-actions github-actions released this 07 Sep 05:38
496ca62

What's Changed

Full Changelog: v0.6.2...v0.6.3

v0.6.2

Choose a tag to compare

@github-actions github-actions released this 05 Sep 12:28
168ff4b

What's Changed

  • fix(pep): free wedged lane-admission slots at the rescue ceiling by @bojieli in #101
  • release: v0.6.2 by @bojieli in #102

Full Changelog: v0.6.1...v0.6.2

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 04 Sep 14:46
8e644d4

What's Changed

  • test(pep): look for the rescue lane, not for the lowest-numbered one by @bojieli in #98
  • fix(pep): resolve a named endpoint over a bound socket by @bojieli in #99
  • release: v0.6.1 by @bojieli in #100

Full Changelog: v0.6.0...v0.6.1

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 19:12
2e86d56

What's Changed

  • feat(portmux): reactive UDP port hopping, fixed to actually hop by @bojieli in #90
  • fix(portmux): CI and review follow-ups for port hopping by @bojieli in #91
  • fix(pep): detect flow stalls at 3x minRTT and race parallel rescue dials by @bojieli in #92
  • fix(pep): do not fall back on lane-capacity refusals in rescue races by @bojieli in #93
  • Locate a deployment's loss to a path segment, measured from both ends by @bojieli in #94
  • release: v0.6.0 by @bojieli in #95
  • docs: update download links to v0.6.0 by @bojieli in #96
  • fix(portmux): skip a hop port the host will not bind by @bojieli in #97

Full Changelog: v0.5.1...v0.6.0

v0.5.1

Choose a tag to compare

@bojieli bojieli released this 02 Sep 03:01
d36e02f

v0.5.1 - 2026-09-02

Changed

  • When --local-address if:NAME or --local-address auto is used, the outer
    UDP and TCP sockets now call IP_BOUND_IF (IPv4) and IPV6_BOUND_IF (IPv6)
    in addition to binding to the resolved IP address. This sets the kernel
    INP_BOUND_IF flag, which is what NEAppProxyFlow.isBound reflects in the
    macOS Network Extension API.

    The practical effect is that transparent proxy software on macOS that honours
    isBound — including Tunless with its default --capture-bound-flows=false
    setting — will now automatically bypass queqiaod's outer transport sockets
    without any per-process exclusion rule. The outer connection to the upstream
    gateway routes directly via the named interface as before; the only change is
    that the intent is now declared at the OS socket level rather than implied by
    the IP address alone.

    A literal --local-address 192.0.2.1 is unchanged: the interface is inferred
    from routing, not declared, so IP_BOUND_IF is not set.

Fixed

  • The bundled China preset keeps Chinese services direct by name, not only by
    address, and the registry set is refreshed to APNIC serial 88964. The address
    set records where a block was delegated, which is not where it is used, so a
    Chinese service answering from a CDN in space delegated elsewhere never
    matched GEOIP,CN and took the tunnel while the toggle said direct: ip138.com
    answers 138.113.x and bilibili.com 148.153.x, and a Chinese resolver returns
    those same addresses, so nothing was being mis-resolved and no fresher list
    could have helped. The preset now names the major Chinese services on TLDs
    that a .cn rule cannot reach, together with the CDN and asset domains they
    load from, and keeps GEOIP,CN last so the names are reached first. It is a
    starting point rather than coverage: a geosite-derived list pasted into the
    rule editor is still the way to be thorough. Refreshing the registry set moved
    three blocks in ten days, which is the measure of how little staleness was
    ever the problem.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 28 Aug 15:32
1486d43

What's Changed

  • fix(ios): keep the packet tunnel inside the memory ceiling iOS enforces by @bojieli in #82
  • feat: ask whether the gateway is on the useful side of the path by @bojieli in #83
  • feat: a routing rule matcher, and a reader for the set it asks by @bojieli in #80
  • feat: route by rule, including by name by @bojieli in #81
  • refactor(ios): make routing one setting, changeable while connected by @bojieli in #85
  • docs: assemble v0.5.0 from the pending fragments by @bojieli in #86

Full Changelog: v0.4.0...v0.5.0

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 27 Aug 02:35
cb720f1

What's Changed

  • fix: record whether a replacement lane was ever attempted by @bojieli in #71
  • Measure and build a datacenter profile by @bojieli in #77
  • release: v0.4.0 by @bojieli in #78
  • fix: a burst is what the path holds, not an addition to it by @bojieli in #79

Full Changelog: v0.3.1...v0.4.0

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 25 Aug 15:12
010e9f7

What's Changed

Full Changelog: v0.3.0...v0.3.1

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 13:16
62b5dbb

What's Changed

  • fix: make two release checks report what they actually know by @bojieli in #49
  • fix: recover stale QUIC paths without restart by @Rhiks in #50
  • fix: count QUIC connection telemetry once per connection by @bojieli in #51
  • fix: record what a flow's lane replacements actually did by @bojieli in #54
  • fix: export the loss the path caused, not only the share charged as congestion by @bojieli in #55
  • fix: let the bandwidth estimate come down by @bojieli in #56
  • fix: size the code for the erasure the path is measured to be doing by @bojieli in #52
  • test: prove the code follows a channel that changes under a live flow by @bojieli in #58
  • feat: publish the erasure the code is actually sized from by @bojieli in #59
  • feat: publish the erasure an endpoint receives, and what the code left of it by @bojieli in #60
  • feat: emulate a burst allowance, and record what it showed about the estimate by @bojieli in #62
  • fix: detect same-address uplink reconnects by @Rhiks in #57
  • fix: enforce bulk isolation connection budget by @Rhiks in #61
  • feat: hold the sender back when the path is carrying a queue by @bojieli in #63
  • change: stop reading loss as congestion by @bojieli in #64
  • test: record that a policed path is unbraked, and bound one of its two causes by @bojieli in #65
  • docs: record two rejected approaches to the sustained-rate estimate by @bojieli in #66
  • fix: measure the sampler, then bound the bet that was actually wrong by @bojieli in #67
  • fix: spend one lane replacement grace per outage, not per waiter by @bojieli in #68
  • fix: a data race on main, and the instrumentation to read a real path by @bojieli in #69
  • fix: do not put back a peak the filter has already forgotten by @bojieli in #70
  • fix: escape Windows reserved port bands instead of walking into them by @bojieli in #72
  • release: v0.3.0 by @bojieli in #74

New Contributors

  • @Rhiks made their first contribution in #50

Full Changelog: v0.2.0...v0.3.0

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 23 Aug 15:49
5018f1b

What's Changed

  • chore: publish without a deployment approval prompt by @bojieli in #18
  • fix: stop dead flows freezing the exported RTT estimate by @bojieli in #24
  • fix: keep local casualties out of the measured erasure rate by @bojieli in #25
  • fix: end the replacement grace when nothing will replace the lane by @bojieli in #27
  • docs: define the contract for adding an external benchmark transport by @bojieli in #28
  • fix: make refused lane joins visible on the endpoint refusing them by @bojieli in #26
  • feat: add kcptun to the benchmark matrix by @bojieli in #29
  • docs: complete the external-transport contract by @bojieli in #30
  • fix: make one telemetry record answer the question it raises by @bojieli in #31
  • fix: keep provider state owned by the account that reads it by @bojieli in #33
  • deploy: one-command gateway and client installers, and the capability the unit was missing by @bojieli in #32
  • fix: say which enrollment failed, and why, where an operator can see it by @bojieli in #34
  • Limit accounts by device, not by connection count by @bojieli in #35
  • fix: report how stale the authorization state actually is by @bojieli in #36
  • chore: write the changelog once, at release, from one file per change by @bojieli in #38
  • fix: restore the analysis job on main by @bojieli in #39
  • fix: build the staleness test against the account limits it merged into by @bojieli in #40
  • fix: read the changelog label when the job runs, not when the PR opened by @bojieli in #41
  • docs: give v0.1.1 the release notes it shipped without by @bojieli in #43
  • docs: start from a published binary, not from a build by @bojieli in #44
  • test: take the shared test port from the allocator that was refusing it by @bojieli in #47
  • One rate limiter behind all three storm-suppressed records by @bojieli in #42
  • fix: let the installed client read its own interfaces by @bojieli in #46
  • release: v0.2.0 by @bojieli in #45
  • release: record the two fixes that landed after v0.2.0 was cut by @bojieli in #48

Full Changelog: v0.1.1...v0.2.0