ngtcp2/nghttp3

HTTP/3 library written in C

1,137

stars

1,361

commits

C

primary language

Sep 11, 2026

updated

nghttp2.org/nghttp3/
http3
qpack
quic
rfc9114
rfc9204
rfc9218
rfc9220
rfc9297
Browse cluster: QUIC and HTTP/3 Protocol Implementations

README

nghttp3
=======

nghttp3 is an implementation of `RFC 9114
<https://datatracker.ietf.org/doc/html/rfc9114>`_ HTTP/3 mapping over
QUIC and `RFC 9204 <https://datatracker.ietf.org/doc/html/rfc9204>`_
QPACK in C.

It does not depend on any particular QUIC transport implementation.

Documentation
-------------

`Online documentation <https://nghttp2.org/nghttp3/>`_ is available.

Requirements
------------

nghttp3 requires a C11 compiler to build.  The modern compilers such
as clang >= 19, gcc >= 15, and MSVC 2022 (1944) are known to work.

Build from git
---------------

.. code-block:: shell

   $ git clone https://github.com/ngtcp2/nghttp3
   $ cd nghttp3
   $ git submodule update --init
   $ autoreconf -i
   $ ./configure
   $ make -j$(nproc) check

HTTP/3
------

This library implements `RFC 9114
<https://datatracker.ietf.org/doc/html/rfc9114>`_ HTTP/3.  It does not
support server push.

The following extensions have been implemented:

- `Extensible Prioritization Scheme for HTTP
  <https://datatracker.ietf.org/doc/html/rfc9218>`_
- `Bootstrapping WebSockets with HTTP/3
  <https://datatracker.ietf.org/doc/html/rfc9220>`_
- `The ORIGIN Extension in HTTP/3
  <https://datatracker.ietf.org/doc/html/rfc9412>`_

It can also send and receive `SETTINGS_H3_DATAGRAM` from `HTTP
Datagrams and the Capsule Protocol
<https://datatracker.ietf.org/doc/html/rfc9297>`_.

QPACK
-----

This library implements `RFC 9204
<https://datatracker.ietf.org/doc/html/rfc9204>`_ QPACK.  It supports
dynamic table.

Optimizations
-------------

This library optionally uses AVX2, if available, to optimize its
performance.  To compile with AVX2, add ``-mavx2`` to CFLAGS.  Note
that by default, CFLAGS is set to ``-g -O2``.  When specifying CFLAGS,
include them as well (e.g., ``-g -O2 -mavx2``).

Examples
--------

- client: https://github.com/ngtcp2/ngtcp2/blob/main/examples/client.cc
- server: https://github.com/ngtcp2/ngtcp2/blob/main/examples/server.cc
- curl: https://github.com/curl/curl/blob/master/lib/vquic/curl_ngtcp2.c

License
-------

The MIT License

Copyright (c) 2019 nghttp3 contributors

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

Contributors

tatsuhiro-t

1,280 commits

amirlivneh

29 commits

vszakats

8 commits

ngtcp2/nghttp3

HTTP/3 library written in C

1,137

stars

1,361

commits

C

primary language

Sep 11, 2026

updated

nghttp2.org/nghttp3/
http3
qpack
quic
rfc9114
rfc9204
rfc9218
rfc9220
rfc9297
Browse cluster: QUIC and HTTP/3 Protocol Implementations

README

nghttp3
=======

nghttp3 is an implementation of `RFC 9114
<https://datatracker.ietf.org/doc/html/rfc9114>`_ HTTP/3 mapping over
QUIC and `RFC 9204 <https://datatracker.ietf.org/doc/html/rfc9204>`_
QPACK in C.

It does not depend on any particular QUIC transport implementation.

Documentation
-------------

`Online documentation <https://nghttp2.org/nghttp3/>`_ is available.

Requirements
------------

nghttp3 requires a C11 compiler to build.  The modern compilers such
as clang >= 19, gcc >= 15, and MSVC 2022 (1944) are known to work.

Build from git
---------------

.. code-block:: shell

   $ git clone https://github.com/ngtcp2/nghttp3
   $ cd nghttp3
   $ git submodule update --init
   $ autoreconf -i
   $ ./configure
   $ make -j$(nproc) check

HTTP/3
------

This library implements `RFC 9114
<https://datatracker.ietf.org/doc/html/rfc9114>`_ HTTP/3.  It does not
support server push.

The following extensions have been implemented:

- `Extensible Prioritization Scheme for HTTP
  <https://datatracker.ietf.org/doc/html/rfc9218>`_
- `Bootstrapping WebSockets with HTTP/3
  <https://datatracker.ietf.org/doc/html/rfc9220>`_
- `The ORIGIN Extension in HTTP/3
  <https://datatracker.ietf.org/doc/html/rfc9412>`_

It can also send and receive `SETTINGS_H3_DATAGRAM` from `HTTP
Datagrams and the Capsule Protocol
<https://datatracker.ietf.org/doc/html/rfc9297>`_.

QPACK
-----

This library implements `RFC 9204
<https://datatracker.ietf.org/doc/html/rfc9204>`_ QPACK.  It supports
dynamic table.

Optimizations
-------------

This library optionally uses AVX2, if available, to optimize its
performance.  To compile with AVX2, add ``-mavx2`` to CFLAGS.  Note
that by default, CFLAGS is set to ``-g -O2``.  When specifying CFLAGS,
include them as well (e.g., ``-g -O2 -mavx2``).

Examples
--------

- client: https://github.com/ngtcp2/ngtcp2/blob/main/examples/client.cc
- server: https://github.com/ngtcp2/ngtcp2/blob/main/examples/server.cc
- curl: https://github.com/curl/curl/blob/master/lib/vquic/curl_ngtcp2.c

License
-------

The MIT License

Copyright (c) 2019 nghttp3 contributors

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

Contributors

tatsuhiro-t

1,280 commits

amirlivneh

29 commits

vszakats

8 commits

Languages

C

89.8%

M4

2.9%

Python

2.3%

CMake

2.2%

C++

1.9%