ycastor

ycastor

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.

https://github.com/edlontech/quiver

Most Liked

kevinschweikert

kevinschweikert

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

ycastor

ycastor

Quiver 0.3.0 released!

What’s new:

  • Initial support for HTTP/3
  • HTTP/3 Datagrams
  • Minor stability improvements

Last Post!

ycastor

ycastor

Quiver 0.4.0 released!

What’s new:

  • Implemented Support for Early Data / 0-RTT
  • Updated erlang_quic to 1.6.3
  • Fixed HTTP/3 and HTTP/2 Pool Stability

Where Next?

Popular in Announcing Top

KronicDeth
Elixir plugin for JetBrain’s IntelliJ Platform (including Rubymine) This is a plugin that adds support for Elixir to JetBrains IntelliJ...
289 36654 110
New
mischov
import Meeseeks.CSS html = HTTPoison.get!("https://news.ycombinator.com/").body for story <- Meeseeks.all(html, css("tr.athing")) do...
New
treble37
Just looking for a little feedback on a tiny helper library I built - Sometimes I find the need to convert maps with atom keys to maps w...
New
josevalim
EDIT: since Ecto 3.0 final version is out, this post was amended to use the final versions in the instructions below. Hi everyone, We a...
New
tmbb
I’ve been working on two packages (not on hex.pm yet) to build admin interfaces for phoenix apps: bureaucrat - which contains a bunch ...
New
kevinlang
Hey all, We have made an Ecto3 Adapter for SQLite3, ecto_sqlite3! We have successfully on-boarded the full suite of integration tests (...
New
zachdaniel
Ash Framework What is Ash? Ash Framework is a declarative, resource-oriented application development framework for Elixir. A resource can...
New

Other popular topics Top

Qqwy
Update: How to use the Blogs & Podcasts section You can post links to your blog posts or podcasts either in one of the Official Blog...
3271 130286 1222
New
vertexbuffer
Hello, can anybody help here..? I have a list of players and I what to delete an element, but every for loop the list is reverting to ori...
New
grych
Hi folks, Few months ago I have announced the proof-of-concept of the library to manipulate the browsers DOM objects directly from Elixi...
639 54006 488
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
nsuchy
Hi. I’ve noticed that Windows Powershell has it’s own IEX command and you cannot access Elixir’s IEX due to the conflict. This isn’t a cr...
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New

We're in Beta

About us Mission Statement