#rfc-9204 #qpack #http-3 #quic

sys ls-qpack-rs-sys

QPACK (RFC 9204) Rust binding to C library ls-qpack

5 releases

0.2.3 Apr 7, 2025
0.2.2 Apr 6, 2025
0.2.1 Apr 6, 2025
0.2.0 Apr 4, 2025
0.1.5 Apr 4, 2025

#1022 in Compression

Download history 331/week @ 2025-04-12 335/week @ 2025-04-19 1011/week @ 2025-04-26 82/week @ 2025-05-03 103/week @ 2025-05-10 28/week @ 2025-05-17 30/week @ 2025-05-24 681/week @ 2025-05-31 125/week @ 2025-06-07 510/week @ 2025-06-14 34/week @ 2025-06-21 80/week @ 2025-06-28 28/week @ 2025-07-05 15/week @ 2025-07-12 23/week @ 2025-07-19 67/week @ 2025-07-26

134 downloads per month
Used in ls-qpack-rs

MIT/Apache

670KB
9K SLoC

C 9K SLoC // 0.0% comments Perl 340 SLoC // 0.1% comments Shell 53 SLoC // 0.1% comments Rust 46 SLoC // 0.1% comments

ls-qpack

crates.io docs.rs

QPACK: Field Compression for HTTP/3 (RFC 9204)

Rust implementation based on ls-qpack

Introduction

QPACK is a compressor for headers data used by HTTP/3. It allows correctness in the presence of out-of-order delivery, with flexibility for implementations to balance between resilience against head-of-line blocking and optimal compression ratio.

Example

use ls_qpack::decoder::Decoder;
use ls_qpack::encoder::Encoder;
use ls_qpack::StreamId;

const HEADERS: [(&str, &str); 2] = [(":status", "404"), ("foo", "bar")];

fn main() {
    let (encoded_headers, _) = Encoder::new()
        .encode_all(StreamId::new(0), HEADERS)
        .unwrap()
        .into();

    let decoded_headers = Decoder::new(0, 0)
        .decode(StreamId::new(0), encoded_headers)
        .unwrap()
        .take()
        .unwrap();

    println!("Decoded header: {:?}", decoded_headers);
}

Dependencies

~0–2.3MB
~45K SLoC