{"id":13472421,"url":"https://github.com/aws/s2n-quic","last_synced_at":"2026-03-03T00:06:29.377Z","repository":{"id":37077858,"uuid":"274987572","full_name":"aws/s2n-quic","owner":"aws","description":"An implementation of the IETF QUIC protocol","archived":false,"fork":false,"pushed_at":"2025-05-09T16:28:13.000Z","size":14619,"stargazers_count":1230,"open_issues_count":237,"forks_count":129,"subscribers_count":24,"default_branch":"main","last_synced_at":"2025-05-10T20:11:53.033Z","etag":null,"topics":["cryptography","quic","rust","s2n"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/s2n-quic","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/aws.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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}},"created_at":"2020-06-25T18:27:25.000Z","updated_at":"2025-05-09T10:41:35.000Z","dependencies_parsed_at":"2023-10-13T09:32:45.687Z","dependency_job_id":"3c8daffc-c894-4a3a-8cea-aceb1d17ecba","html_url":"https://github.com/aws/s2n-quic","commit_stats":{"total_commits":1111,"total_committers":40,"mean_commits":27.775,"dds":0.6084608460846085,"last_synced_commit":"5ff5edd88c93ee71ebd4ed4cbabbc1450fac13b4"},"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Fs2n-quic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Fs2n-quic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Fs2n-quic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aws%2Fs2n-quic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aws","download_url":"https://codeload.github.com/aws/s2n-quic/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253474233,"owners_count":21914230,"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":["cryptography","quic","rust","s2n"],"created_at":"2024-07-31T16:00:54.519Z","updated_at":"2026-03-03T00:06:29.355Z","avatar_url":"https://github.com/aws.png","language":"Rust","funding_links":[],"categories":["Rust","Libraries","Implementations"],"sub_categories":["Network programming"],"readme":"# s2n-quic\n\n`s2n-quic` is a Rust implementation of the [IETF QUIC protocol](https://quicwg.org/), featuring:\n\n- a simple, easy-to-use API. See [an example](https://github.com/aws/s2n-quic/blob/main/examples/echo/src/bin/quic_echo_server.rs) of an s2n-quic echo server built with just a few API calls\n- high configurability using [providers](https://docs.rs/s2n-quic/latest/s2n_quic/provider/index.html) for granular control of functionality\n- extensive automated testing, including fuzz testing, integration testing, unit testing, snapshot testing, efficiency testing, performance benchmarking, interoperability testing and [more](https://github.com/aws/s2n-quic/blob/main/docs/dev-guide/ci.md)\n- integration with [s2n-tls](https://github.com/aws/s2n-tls), AWS's simple, small, fast and secure TLS implementation, as well as [rustls](https://crates.io/crates/rustls)\n- thorough [compliance coverage tracking](https://github.com/aws/s2n-quic/blob/main/docs/dev-guide/ci.md#compliance) of normative language in relevant standards\n- and much more, including [CUBIC congestion controller](https://www.rfc-editor.org/rfc/rfc8312.html) support, [packet pacing](https://www.rfc-editor.org/rfc/rfc9002.html#name-pacing), [Generic Segmentation Offload](https://lwn.net/Articles/188489/) support, [Path MTU discovery](https://www.rfc-editor.org/rfc/rfc8899.html), and unique [connection identifiers](https://www.rfc-editor.org/rfc/rfc9000.html#name-connection-id) detached from the address\n\nSee the [API documentation](https://docs.rs/s2n-quic), [examples](https://github.com/aws/s2n-quic/tree/main/examples), and [s2n-quic Guide](https://aws.github.io/s2n-quic/index.html) to get started with `s2n-quic`.\n\n[![Crates.io][crates-badge]][crates-url]\n[![docs.rs][docs-badge]][docs-url]\n[![Apache 2.0 Licensed][license-badge]][license-url]\n[![Build Status][actions-badge]][actions-url]\n[![Dependencies][dependencies-badge]][dependencies-url]\n[![MSRV][msrv-badge]][msrv-url]\n\n## Installation\n\n`s2n-quic` is available on `crates.io` and can be added to a project like so:\n\n```toml\n[dependencies]\ns2n-quic = \"1\"\n```\n\n**NOTE**: On unix-like systems, [`s2n-tls`](https://github.com/aws/s2n-tls) will be used as the default TLS provider.\nOn linux systems, [`aws-lc-rs`](https://github.com/awslabs/aws-lc-rs) will be used for cryptographic\noperations. A C compiler and CMake may be required on these systems for installation.\n\n## Example\n\nThe following implements a basic echo server and client. The client connects to the server and pipes its `stdin` on a stream. The server listens for new streams and pipes any data it receives back to the client. The client will then pipe all stream data to `stdout`.\n\n### Server\n\n```rust\n// src/bin/server.rs\nuse s2n_quic::Server;\nuse std::{error::Error, path::Path};\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn Error\u003e\u003e {\n    let mut server = Server::builder()\n        .with_tls((Path::new(\"cert.pem\"), Path::new(\"key.pem\")))?\n        .with_io(\"127.0.0.1:4433\")?\n        .start()?;\n\n    while let Some(mut connection) = server.accept().await {\n        // spawn a new task for the connection\n        tokio::spawn(async move {\n            while let Ok(Some(mut stream)) = connection.accept_bidirectional_stream().await {\n                // spawn a new task for the stream\n                tokio::spawn(async move {\n                    // echo any data back to the stream\n                    while let Ok(Some(data)) = stream.receive().await {\n                        stream.send(data).await.expect(\"stream should be open\");\n                    }\n                });\n            }\n        });\n    }\n\n    Ok(())\n}\n```\n\n### Client\n\n```rust\n// src/bin/client.rs\nuse s2n_quic::{client::Connect, Client};\nuse std::{error::Error, path::Path, net::SocketAddr};\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn Error\u003e\u003e {\n    let client = Client::builder()\n        .with_tls(Path::new(\"cert.pem\"))?\n        .with_io(\"0.0.0.0:0\")?\n        .start()?;\n\n    let addr: SocketAddr = \"127.0.0.1:4433\".parse()?;\n    let connect = Connect::new(addr).with_server_name(\"localhost\");\n    let mut connection = client.connect(connect).await?;\n\n    // ensure the connection doesn't time out with inactivity\n    connection.keep_alive(true)?;\n\n    // open a new stream and split the receiving and sending sides\n    let stream = connection.open_bidirectional_stream().await?;\n    let (mut receive_stream, mut send_stream) = stream.split();\n\n    // spawn a task that copies responses from the server to stdout\n    tokio::spawn(async move {\n        let mut stdout = tokio::io::stdout();\n        let _ = tokio::io::copy(\u0026mut receive_stream, \u0026mut stdout).await;\n    });\n\n    // copy data from stdin and send it to the server\n    let mut stdin = tokio::io::stdin();\n    tokio::io::copy(\u0026mut stdin, \u0026mut send_stream).await?;\n\n    Ok(())\n}\n```\n\n## Minimum Supported Rust Version (MSRV)\n\n`s2n-quic` will maintain a rolling MSRV (minimum supported rust version) policy of at least 6 months. The current s2n-quic version is not guaranteed to build on Rust versions earlier than the MSRV.\n\nThe current MSRV is [1.88.0][msrv-url].\n\n## Supported Operating Systems\n\n`s2n-quic` can be built on Linux, MacOS, and Windows. `s2n-quic` requires Linux kernel version 5.0 or later. Earlier Linux kernel versions are not supported as they lack the Generic Segmentation Offload (GSO) capabilities required by `s2n-quic`.\n\n## Security issue notifications\n\nIf you discover a potential security issue in s2n-quic we ask that you notify\nAWS Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue.\n\nIf you package or distribute s2n-quic, or use s2n-quic as part of a large multi-user service, you may be eligible for pre-notification of future s2n-quic releases. Please contact s2n-pre-notification@amazon.com.\n\n## License\n\nThis project is licensed under the [Apache-2.0 License][license-url].\n\n[crates-badge]: https://img.shields.io/crates/v/s2n-quic.svg\n[crates-url]: https://crates.io/crates/s2n-quic\n[license-badge]: https://img.shields.io/badge/license-apache-blue.svg\n[license-url]: https://aws.amazon.com/apache-2-0/\n[actions-badge]: https://github.com/aws/s2n-quic/workflows/ci/badge.svg\n[actions-url]: https://github.com/aws/s2n-quic/actions/workflows/ci.yml?query=branch%3Amain\n[docs-badge]: https://img.shields.io/docsrs/s2n-quic.svg\n[docs-url]: https://docs.rs/s2n-quic\n[dependencies-badge]: https://img.shields.io/librariesio/release/cargo/s2n-quic.svg\n[dependencies-url]: https://crates.io/crates/s2n-quic/dependencies\n[msrv-badge]: https://img.shields.io/badge/MSRV-1.88.0-green\n[msrv-url]: https://blog.rust-lang.org/2025/06/26/Rust-1.88.0/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faws%2Fs2n-quic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faws%2Fs2n-quic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faws%2Fs2n-quic/lists"}