{"id":19247940,"url":"https://github.com/litespeedtech/ls-qpack","last_synced_at":"2025-04-05T19:09:59.938Z","repository":{"id":33923387,"uuid":"141523386","full_name":"litespeedtech/ls-qpack","owner":"litespeedtech","description":"QPACK compression library for use with HTTP/3","archived":false,"fork":false,"pushed_at":"2025-03-20T21:16:14.000Z","size":2043,"stargazers_count":75,"open_issues_count":2,"forks_count":29,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-03-29T18:06:17.493Z","etag":null,"topics":["compression","compression-library","http3","qpack","quic"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/litespeedtech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-19T04:12:12.000Z","updated_at":"2025-03-20T21:16:27.000Z","dependencies_parsed_at":"2023-02-14T18:31:57.697Z","dependency_job_id":"0e6bd82b-d9ac-4eef-9d8c-1b3b6f95d88a","html_url":"https://github.com/litespeedtech/ls-qpack","commit_stats":null,"previous_names":[],"tags_count":52,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litespeedtech%2Fls-qpack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litespeedtech%2Fls-qpack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litespeedtech%2Fls-qpack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/litespeedtech%2Fls-qpack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/litespeedtech","download_url":"https://codeload.github.com/litespeedtech/ls-qpack/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247386263,"owners_count":20930618,"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":["compression","compression-library","http3","qpack","quic"],"created_at":"2024-11-09T18:05:44.619Z","updated_at":"2025-04-05T19:09:59.872Z","avatar_url":"https://github.com/litespeedtech.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/litespeedtech/ls-qpack.svg?branch=master)](https://travis-ci.org/litespeedtech/ls-qpack)\n[![Build status](https://ci.appveyor.com/api/projects/status/kat31lt42ds0rmom?svg=true)](https://ci.appveyor.com/project/litespeedtech/ls-qpack)\n[![Build Status](https://api.cirrus-ci.com/github/litespeedtech/ls-qpack.svg)](https://cirrus-ci.com/github/litespeedtech/ls-qpack)\n\n# ls-qpack\nQPACK compression library for use with HTTP/3\n\n## Introduction\n\nQPACK is the compression mechanism used by\n[HTTP/3](https://en.wikipedia.org/wiki/HTTP/3) to compress HTTP headers.\nIt is in the process of being standardazed by the QUIC Working Group.  The\n[QPACK Internet-Draft](https://tools.ietf.org/html/draft-ietf-quic-qpack-11)\nis has been stable for some time and we don't expect functional changes to\nit before the final RFC is released.\n\n## Functionality\n\nls-qpack is a full-featured, tested, and fast QPACK library.  The QPACK encoder\nproduces excellent compression results based on an [innovative mnemonic technique](https://blog.litespeedtech.com/2021/04/05/qpack-mnemonic-technique/).  It boasts the fastest Huffman\n[encoder](https://blog.litespeedtech.com/2019/10/03/fast-huffman-encoder/) and\n[decoder](https://blog.litespeedtech.com/2019/09/16/fast-huffman-decoder/).\n\nThe library is production quality.  It is used in\n[OpenLiteSpeed](https://openlitespeed.org/),\nLiteSpeed [Web Server](https://www.litespeedtech.com/products#lsws),\nand LiteSpeed [Web ADC](https://www.litespeedtech.com/products#wadc).\n\nThe library is robust:\n1. The encoder does not assume anything about usual HTTP headers such as `Server`\n   or `User-Agent`.  Instead, it uses its mnemonic compression technique to\n   achieve good compression results for any input.\n1. The decoder uses modulo arithmetic to track dynamic table insertions.  This is\n   in contrast to all other QPACK implementations, which use an integer counter,\n   meaning that at some point, the decoder will break.\n1. The decoder processes input in streaming fashion.  The caller does not have to\n   buffer the contents of HTTP/3 `HEADERS` frame.  Instead, the decoder can be\n   supplied input byte-by-byte.\n\n## Other Languages\n\nThe ls-qpack library is implemented in vanilla C99.  It makes it a good candidate\nfor wrapping into a library for a higher-level language.  As of this writing, we\nknow of the following wrappers:\n- Go: [ls-qpack-go](https://github.com/mpiraux/ls-qpack-go)\n- Python: [pylsqpack](https://github.com/aiortc/pylsqpack)\n- Rust: [ls-qpack-rs](https://github.com/BiagioFesta/ls-qpack-rs)\n- TypeScript: [quicker](https://github.com/rmarx/quicker/tree/draft-20/lib/ls-qpack)\n- Ruby: [lsqpack-ruby](https://github.com/unasuke/lsqpack-ruby)\n\n## Versioning\n\nBefore the QPACK RFC is released, the three parts of the version are:\n- MAJOR: set to zero;\n- MINOR: set to the number of QPACK Internet-Draft the lirbary supports; and\n- PATCH: set to the patch number\n\nOnce the RFC is released, MAJOR will be set to 1 and the version will follow\nthe usual MAJOR.MINOR.PATCH pattern.\n\n## API\n\nThe API is documented in the header file, [lsqpack.h](lsqpack.h).\nOne example how it is used in real code can be seen in\n[lsquic](https://github.com/litespeedtech/lsquic), a QUIC and HTTP/3 library\ndeveloped by LiteSpeed Technologies.\n\nA different API, without the use of `struct lsxpack_header`, is available\non branch-v1.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitespeedtech%2Fls-qpack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flitespeedtech%2Fls-qpack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flitespeedtech%2Fls-qpack/lists"}