libhpack implements the “Header Compression for HTTP/2.0 protocol” specification
C Python Other
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


libhpack implements HPACK “Header Compression for HTTP/2.0”, a format adapted to efficiently represent HTTP header fields in the context of the upcoming HTTP/2.0 protocol.

Build Status Coverage Status Coverity Scan Build Status

Getting Started

Build requirements include Cmake, and Check.

git clone --recursive
cd libhpack

To render the documentation you'd have to execute make doc afterwards. That specific target depends on Sphinx and Doxygen.


Keep track of community news and rub shoulders with the developers:

  • Follow @http2d on Twitter
  • On server, in the #cherokee channel
  • Bug Tracker: Issues and RFEs


libhpack is distributed under the Simplified BSD License. See the LICENSE file for more info.


You can help this project by reporting problems, suggestions, or contributing to the code.

Report a problem or suggestion

Go to our issue tracker and check if your problem/suggestion is already reported. If not, create a new issue with a descriptive title and detail your suggestion or steps to reproduce the problem.

Contribute to the code

If you know how to code, we welcome you to send fixes and new features, but in order to be efficient we ask you to follow the following procedure:

  • Fork this repo using the button at the top.
  • Clone your forked repo locally.

$ git clone

  • Don't modify or work on the master branch, we'll use it to always be in sync with libhpack upstream.
$ git remote add upstream
$ git fetch upstream
  • Always create a new issue when you plan to work on a bug or new feature and wait for other devs input before start coding.
  • Once the new feature is approved or the problem confirmed, go to your local copy and create a new branch to work on it. Use a descriptive name for it, include the issue number for reference.

$ git checkout -b bug-33

  • Do your coding and push it to your fork. Include as few commits as possible (one should be enough) and a good description. Always include a reference to the issue with "Fix #number".
$ git add .
$ git commit -m "Improved header decoding. Fix #33"
$ git push origin bug-33
  • Do a new pull request from your "bug-33" branch to libhpack "master".

How do changes suggested on a pull request

Some times when you do a PR, you will be asked to correct some code. You can do it on your work branch and commit normally, PR will be automatically updated.

$ git commit -am "Ops, fixing typo"

Once everything is okay, you will be asked to merge all commit messages into one to keep history clean.

$ git rebase -i master

Edit the file and mark as fixup (f) all commits you want to merge with the first one:

pick 1c85e07 Improved header decoding. Fix #33
f c595f79 Ops, fixing typo

Once rebased you can force a push to your fork branch and the PR will be automatically updated.

$ git push origin bug-33 --force

How to keep your local branches updated

To keep your local master branch updated with upstream master, regularly do:

$ git fetch upstream
$ git checkout master
$ git pull --rebase upstream master

To update the branch you are coding in:

$ git checkout bug-33
$ git rebase master


The current 10,000 foot view of the project is: Libraries

  • libchula: Utility library that provides a wide variaty of basic classes.
  • libchula-qa: Bits and pieces necessary to build a QA bench for a libchula based project. Among different things, it includes the "Out of Memory" (OoM) emulator that is used to ensure memory management corner cases as correctly handled.
  • libhpack: The HTTP2 header parsing library. It's a libchula based library implementing the encoding and decoding of HTTP2 headers.


-- Alvaro Lopez Ortega