// the find
elixir-mint/mint
Functional HTTP client for Elixir with support for HTTP/1 and HTTP/2 🌱
Mint is a low-level HTTP/1 and HTTP/2 client for Elixir built around a stateless, immutable connection struct instead of a process — you own the socket and the message loop. It's for Elixir developers who want to build their own connection pooling/process architecture (or are already using something built on top, like Finch) rather than people who just want to call `get(url)` and get a response back.
The functional, process-less design is genuinely different from typical Erlang/Elixir HTTP clients (hackney, httpc) and lets you compose it into whatever architecture you need — one process per connection, one process managing many connections, etc. HTTP/2 support is real, with a dedicated frame-level implementation and its own fuzz tests, not just HTTP/1.1 with a protocol flag. Dependency footprint is tiny (optional castore for CA certs on older OTP), and the test suite includes fuzz testing for both the HTTP/1 and HTTP/2 parsers plus Dockerized proxy integration tests, which is more rigor than most HTTP libraries bother with.
No connection pooling, retries, or timeouts out of the box — that's explicitly pushed onto Finch, so if you reach for Mint directly you're probably going to end up rebuilding a chunk of what Finch already does. Active-mode socket handling means the caller has to manually pattern-match raw `:tcp`/`:ssl` messages and feed them through `stream/2`; it's a real jump from anything that returns a plain response struct. The stateless API (must thread the returned `conn` through every call) is a sharp edge the README itself has to call out with a wrong/correct example — nothing in the type system stops you from reusing a stale connection. No WebSocket support in the core package, you need the separate `mint_web_socket` library.