Quiver - An Efficient HTTP Client in Elixir

A couple weeks ago i decided to learn a bit more about HTTP and got the urges of starting a new http client from scratch, so i built Quiver, the idea was pretty much a toy project, albeit there are still some RFC stuff missing, the results are pretty good. I inspired myself quite a bit in hackney and finch, but with some pet peeves of my own. I tried to benchmark it as fair as possible against Finch, the benchee results are in the repo.

Features

  • HTTP/1.1 and HTTP/2 – automatic protocol handling with TLS+ALPN
  • Connection pooling – NimblePool for HTTP/1, GenStateMachine coordinator for HTTP/2
  • Streaming responses – lazy body streams for large payloads and SSE
  • Origin-based routing – exact, wildcard, and default pool rules per origin
  • Structured errors – three error classes (transient, invalid, unrecoverable)
  • Telemetry – request spans, connection lifecycle, and pool queue depth events
  • Supervised – pools start lazily and live under your application’s supervision tree

Now, the next item in my roadmap is to implement HTTP/3 support, maybe starting with quicer.

4 Likes

I recommend using GitHub - benoitc/erlang_quic: Pure Erlang QUIC implementation (RFC 9000) · GitHub because it’s not using any NIFs which quicer does. It’s also used for the QUIC implementation in Hackney

5 Likes