6 releases (3 breaking)

0.13.0 Jan 28, 2025
0.12.0 Nov 4, 2024
0.11.5 Nov 4, 2024
0.11.3 Aug 15, 2024
0.10.5 May 24, 2024

#156 in Network programming

Download history 2474/week @ 2024-10-22 3234/week @ 2024-10-29 2973/week @ 2024-11-05 2938/week @ 2024-11-12 2501/week @ 2024-11-19 3513/week @ 2024-11-26 3635/week @ 2024-12-03 3588/week @ 2024-12-10 2623/week @ 2024-12-17 1021/week @ 2024-12-24 2313/week @ 2024-12-31 2335/week @ 2025-01-07 2703/week @ 2025-01-14 2057/week @ 2025-01-21 2720/week @ 2025-01-28 2599/week @ 2025-02-04

10,650 downloads per month
Used in 30 crates (12 directly)

MIT/Apache

1.5MB
27K SLoC

Quinn fork of iroh

Quinn is a pure-rust, async-compatible implementation of the IETF [QUIC][quic] transport protocol.

  • Simultaneous client/server operation
  • Ordered and unordered stream reads for improved performance
  • Works on stable Rust, tested on Linux, macOS and Windows
  • Pluggable cryptography, with a standard implementation backed by [rustls][rustls] and [ring][ring]
  • Application-layer datagrams for small, unreliable messages
  • Future-based async API
  • Minimum supported Rust version of 1.71

This is a fork incorporating some changes for use in iroh. The aim is to contribute back any generally useful changes into upstream Quinn, so it is strongly discouraged to use this fork directly.

Git branches

The upstream branches are kept unmodified and get occasionally synced (e.g. our main branch tracks upstream/main with a small delay). The iroh-specific branches are:

  • iroh-0.10.x is the branch for quinn@0.10 series.
  • iroh-0.11.x is the branch for quinn@0.11 series.

The default branch should be set the currently actively used branch by iroh.

Updating a branch

To update a branch to include the upstream changes, merge the upstream branch. E.g. when upstream is main and the current iroh branch is iroh-0.11.x:

  • Check which commits are new in main.

    Using magit: magit-cherry (Y), from main to iroh-0.11.x

  • Find the commit to merge.

    You probably want to find the last released commit on the main branch, which might not be the last commit on main. So you need to find the commit hash as you can't use "main" in this case.

  • Merge this commit: git merge abc123

  • You can check the log and cherries again to see if the right commits are left in main.

Upstream versions

Usually we only try to merge tagged upstream versions. Currently (as of the 0.13 iroh-quinn release) we've released work that hasn't been released upstream yet.

In the normal case, you'd be able to check the current matching upstream version by running:

git tag --merged

This shows all the tags which are in the ancestors of HEAD. Look for the highest quinn, quinn-proto and quinn-udp tags which are found in all the ancestor commits.

Dependencies

~3–31MB
~648K SLoC