A functional, low-level HTTP client for Elixir with support for HTTP/1 and HTTP/2.
Mint is a functional, low-level HTTP client for Elixir designed with a process-less, immutable architecture. It provides a foundational layer for building custom HTTP communication layers, offering fine-grained control over connections and streaming responses. It transparently supports both HTTP/1 and HTTP/2 protocols.
Elixir developers building custom HTTP clients, communication layers, or higher-level libraries like connection pools, who need low-level control over HTTP connections without the overhead of processes.
Developers choose Mint for its process-less, stateless API that allows flexible connection management patterns, such as handling multiple connections in a single process, unlike traditional Erlang/Elixir HTTP clients. It serves as a foundational layer similar to `:gen_tcp` and `:ssl` but with HTTP protocol awareness, prioritizing simplicity and composability.
Functional HTTP client for Elixir with support for HTTP/1 and HTTP/2 🌱
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
The process-less, immutable design allows custom patterns like handling multiple connections in a single process, offering more control than traditional process-based clients.
Transparently handles both HTTP/1 and HTTP/2, automatically choosing the appropriate protocol during connection establishment, simplifying protocol selection.
Streams HTTP responses through discrete parts (:status, :headers, :data, :done), enabling efficient handling of large or streaming data without buffering entire bodies.
Supports custom CA certificate stores or uses the system store, with easy integration of dependencies like :castore for compatibility with older Erlang/OTP versions.
Requires developers to actively receive and process TCP/SSL messages, adding complexity and error-prone state management compared to higher-level clients.
Lacks features like connection pooling, retries, and metrics, necessitating the use of additional libraries like Finch for production-ready setups.
Does not support WebSockets natively; implementing them requires integrating the separate mint_web_socket library, increasing dependency overhead.