A high-performance HTTP client for Elixir built on Mint and NimblePool, featuring efficient connection pooling.
Finch is an HTTP client for Elixir designed with a primary focus on performance. It achieves this by leveraging efficient connection pooling strategies and minimizing memory copying, making it suitable for high-throughput applications. While many developers may prefer the user-friendly Req client, Finch provides the underlying pooling infrastructure that powers such higher-level tools.
Elixir developers building high-throughput applications that require efficient HTTP communication, such as microservices, APIs, or data-intensive systems. It is also suitable for those who need fine-grained control over connection pooling and performance tuning.
Developers choose Finch for its performance-oriented design, built on robust lower-level libraries like Mint and NimblePool, offering efficient connection pooling and minimal memory overhead. Its unique selling point is providing the foundational pooling infrastructure that powers higher-level HTTP clients like Req, while allowing advanced configurations such as pool tagging and user-managed pools for specific use cases.
Elixir HTTP client, focused on performance
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Manages pools per {scheme, host, port} combination to reuse connections and reduce overhead, as shown in configurable pool sizes and counts for specific URLs.
Provides instrumentation through Telemetry events for monitoring request performance and behavior, detailed in the Finch.Telemetry module.
Supports logging TLS secrets to files for debugging HTTPS sessions with tools like Wireshark, enabled via ssl_key_log_file configuration or environment variables.
Allows creating separate pools for the same origin with different configurations, useful for isolating traffic like API vs web requests, as demonstrated with Finch.Pool.new/2.
Requires explicit pool configuration and integration into Elixir supervision trees, which can be overwhelming for simple HTTP tasks compared to drop-in clients.
Pools are not automatically terminated by default, necessitating manual configuration of options like pool_max_idle_time to prevent resource leaks, adding operational overhead.
Does not include built-in conveniences like automatic retries, response decoding, or streaming, forcing developers to implement these separately or use a wrapper like Req.