{"id":13504025,"url":"https://github.com/quinn-rs/quinn","last_synced_at":"2025-05-12T03:49:40.649Z","repository":{"id":37211970,"uuid":"127870944","full_name":"quinn-rs/quinn","owner":"quinn-rs","description":"Async-friendly QUIC implementation in Rust","archived":false,"fork":false,"pushed_at":"2025-05-08T14:42:14.000Z","size":10560,"stargazers_count":4225,"open_issues_count":131,"forks_count":430,"subscribers_count":62,"default_branch":"main","last_synced_at":"2025-05-08T15:37:08.553Z","etag":null,"topics":["hacktoberfest","protocol","quic","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quinn-rs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE-APACHE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"open_collective":"quinn-rs"}},"created_at":"2018-04-03T07:47:41.000Z","updated_at":"2025-05-08T14:42:18.000Z","dependencies_parsed_at":"2023-09-22T20:43:49.815Z","dependency_job_id":"98c06e13-9cd3-46de-b983-88619e230ba4","html_url":"https://github.com/quinn-rs/quinn","commit_stats":{"total_commits":3677,"total_committers":147,"mean_commits":25.01360544217687,"dds":0.5588795213489257,"last_synced_commit":"a5d9bd1154b7644ff22b75191a89db9687546fdb"},"previous_names":[],"tags_count":64,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quinn-rs%2Fquinn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quinn-rs%2Fquinn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quinn-rs%2Fquinn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quinn-rs%2Fquinn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quinn-rs","download_url":"https://codeload.github.com/quinn-rs/quinn/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253239425,"owners_count":21876459,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hacktoberfest","protocol","quic","rust"],"created_at":"2024-07-31T23:00:52.631Z","updated_at":"2025-05-12T03:49:40.581Z","avatar_url":"https://github.com/quinn-rs.png","language":"Rust","funding_links":["https://opencollective.com/quinn-rs"],"categories":["Rust","Libraries","库 Libraries","hacktoberfest","Implementations"],"sub_categories":["Network programming","网络编程 Network programming"],"readme":"\u003ch1 align=\"center\"\u003e\u003cimg width=\"500\" src=\"https://raw.githubusercontent.com/quinn-rs/quinn/51a3cea225670757cb844a342428e4e1341d9f13/docs/thumbnail.svg\" /\u003e\u003c/h1\u003e\n\n[![Documentation](https://docs.rs/quinn/badge.svg)](https://docs.rs/quinn/)\n[![Crates.io](https://img.shields.io/crates/v/quinn.svg)](https://crates.io/crates/quinn)\n[![Build status](https://github.com/quinn-rs/quinn/workflows/CI/badge.svg)](https://github.com/djc/quinn/actions?query=workflow%3ACI)\n[![codecov](https://codecov.io/gh/quinn-rs/quinn/branch/main/graph/badge.svg)](https://codecov.io/gh/quinn-rs/quinn)\n[![Chat](https://img.shields.io/badge/chat-%23quinn:matrix.org-%2346BC99?logo=matrix)](https://matrix.to/#/#quinn:matrix.org)\n[![Chat](https://img.shields.io/discord/976380008299917365?logo=discord)](https://discord.gg/SGPEcDfVzh)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE-MIT)\n[![License: Apache 2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE-APACHE)\n\nQuinn is a pure-Rust, async-compatible implementation of the IETF [QUIC][quic] transport protocol.\nThe project was founded by [Dirkjan Ochtman](https://github.com/djc) and\n[Benjamin Saunders](https://github.com/Ralith) as a side project in 2018, and has seen more than\n30 releases since then. If you're using Quinn in a commercial setting, please consider\n[sponsoring](https://opencollective.com/quinn-rs) the project.\n\n## Features\n\n- Simultaneous client/server operation\n- Ordered and unordered stream reads for improved performance\n- Works on stable Rust, tested on Linux, macOS and Windows\n- Pluggable cryptography, with a standard implementation backed by\n  [rustls][rustls] and [*ring*][ring]\n- Application-layer datagrams for small, unreliable messages\n- Future-based async API\n- Minimum supported Rust version of 1.71\n\n## Overview\n\n- **quinn:** High-level async API based on tokio, see [examples][examples] for usage. This will be used by most developers. (Basic benchmarks are included.)\n- **quinn-proto:** Deterministic state machine of the protocol which performs [**no** I/O][sans-io] internally and is suitable for use with custom event loops (and potentially a C or C++ API).\n- **quinn-udp:** UDP sockets with ECN information tuned for the protocol.\n- **bench:** Benchmarks without any framework.\n- **fuzz:** Fuzz tests.\n\n# Getting Started\n\n**Examples**\n\n```sh\n$ cargo run --example server ./\n$ cargo run --example client https://localhost:4433/Cargo.toml\n```\n\nThis launches an HTTP 0.9 server on the loopback address serving the current\nworking directory, with the client fetching `./Cargo.toml`. By default, the\nserver generates a self-signed certificate and stores it to disk, where the\nclient will automatically find and trust it.\n\n**Links**\n\n- Talk at [RustFest Paris (May 2018) presentation][talk]; [slides][slides]; [YouTube][youtube]\n- Usage [examples][examples]\n- Guide [book][documentation]\n\n## Usage Notes\n\n\u003cdetails\u003e\n\u003csummary\u003e\nClick to show the notes\n\u003c/summary\u003e\n\n### Buffers\n\nA Quinn endpoint corresponds to a single UDP socket, no matter how many\nconnections are in use. Handling high aggregate data rates on a single endpoint\ncan require a larger UDP buffer than is configured by default in most\nenvironments. If you observe erratic latency and/or throughput over a stable\nnetwork link, consider increasing the buffer sizes used. For example, you could\nadjust the `SO_SNDBUF` and `SO_RCVBUF` options of the UDP socket to be used\nbefore passing it in to Quinn. Note that some platforms (e.g. Linux) require\nelevated privileges or modified system configuration for a process to increase\nits UDP buffer sizes.\n\n### Certificates\n\nBy default, Quinn clients validate the cryptographic identity of servers they\nconnect to. This prevents an active, on-path attacker from intercepting\nmessages, but requires trusting some certificate authority. For many purposes,\nthis can be accomplished by using certificates from [Let's Encrypt][letsencrypt]\nfor servers, and relying on the default configuration for clients.\n\nFor some cases, including peer-to-peer, trust-on-first-use, deliberately\ninsecure applications, or any case where servers are not identified by domain\nname, this isn't practical. Arbitrary certificate validation logic can be\nimplemented by enabling the `dangerous_configuration` feature of `rustls` and\nconstructing a Quinn `ClientConfig` with an overridden certificate verifier by\nhand.\n\nWhen operating your own certificate authority doesn't make sense, [rcgen][rcgen]\ncan be used to generate self-signed certificates on demand. To support\ntrust-on-first-use, servers that automatically generate self-signed certificates\nshould write their generated certificate to persistent storage and reuse it on\nfuture runs.\n\n\u003c/details\u003e\n\u003cp\u003e\u003c/p\u003e\n\n## Contribution\n\nAll feedback welcome. Feel free to file bugs, requests for documentation and\nany other feedback to the [issue tracker][issues].\n\nThe quinn-proto test suite uses simulated IO for reproducibility and to avoid\nlong sleeps in certain timing-sensitive tests. If the `SSLKEYLOGFILE`\nenvironment variable is set, the tests will emit UDP packets for inspection\nusing external protocol analyzers like Wireshark, and NSS-compatible key logs\nfor the client side of each connection will be written to the path specified in\nthe variable.\n\nThe minimum supported Rust version for published releases of our\ncrates will always be at least 6 months old at the time of release.\n\n[quic]: https://quicwg.github.io/\n[issues]: https://github.com/djc/quinn/issues\n[rustls]: https://github.com/ctz/rustls\n[ring]: https://github.com/briansmith/ring\n[talk]: https://paris.rustfest.eu/sessions/a-quic-future-in-rust\n[slides]: https://github.com/djc/talks/blob/ff760845b51ba4836cce82e7f2c640ecb5fd59fa/2018-05-26%20A%20QUIC%20future%20in%20Rust/Quinn-Speaker.pdf\n[animation]: https://dirkjan.ochtman.nl/files/head-of-line-blocking.html\n[youtube]: https://www.youtube.com/watch?v=EHgyY5DNdvI\n[letsencrypt]: https://letsencrypt.org/\n[rcgen]: https://crates.io/crates/rcgen\n[examples]: https://github.com/djc/quinn/tree/main/quinn/examples\n[documentation]: https://quinn-rs.github.io/quinn/networking-introduction.html\n[sans-io]: https://sans-io.readthedocs.io/how-to-sans-io.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquinn-rs%2Fquinn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquinn-rs%2Fquinn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquinn-rs%2Fquinn/lists"}