wojtekmach/req
Elixir Apache-2.0Req is a batteries-included HTTP client for Elixir.
1.3k
Stars
166
Forks
60
Open issues
5
Contributors
AI Analysis
Req is a comprehensive HTTP client library for Elixir that provides automatic response decoding, redirect handling, retry logic, and extensive customization through a composable step-based architecture. It's ideal for developers building Elixir applications that need robust HTTP communication with minimal boilerplate. The library benefits anyone working with REST APIs or HTTP services in the Elixir ecosystem.
Inferred from signals mentioned in the README (tests, CI, type safety) — not a review of the actual code.
AI's overall editorial judgment — not an average of the bars above, can weigh other factors too.
Elixir HTTP client with batteries included, built on composable steps and plugin architecture
Req is a modern HTTP client library for Elixir that emphasizes developer ergonomics through a step-based architecture. It provides high-level convenience (automatic decompression, retry logic, authentication) while remaining fully extensible. Built primarily by Wojtek Mach, it appears to serve Elixir developers who want sensible defaults without sacrificing control. Adoption appears concentrated within the Elixir ecosystem; real-world scale is not well documented.
Req was created in March 2021 as an alternative to existing Elixir HTTP clients. It emerged during a period when the Elixir ecosystem was consolidating around Finch (the low-level HTTP adapter) and seeking higher-level abstractions. The project represents an attempt to create a cohesive, feature-complete HTTP client comparable to libraries in other languages.
Req gained approximately 1,316 stars over ~5 years, averaging modest growth. It sits between HTTPoison (2,296 stars, older, more established) and Finch (1,358 stars, lower-level). The 1 star gained in the last 7 days (as of June 2026) suggests growth has plateaued or stabilized. README documents a mature feature set and plugin ecosystem (req_easyhtml, req_s3, req_hex, req_github_oauth), indicating some community adoption, though scale is unclear.
Adoption not verified. README demonstrates example usage but does not cite deployed production systems, user organizations, or scale metrics. The existence of at least 4 community plugins (req_easyhtml, req_s3, req_hex, req_github_oauth) suggests some real-world usage, but quantity of deployments is undocumented. GitHub star count (1,316) is modest relative to HTTPoison (2,296) and below Finch (1,358), suggesting narrower adoption than some alternatives.
Based on README, Req uses a step-based pipeline architecture where requests flow through composable request, response, and error steps. This appears inspired by middleware patterns seen in web frameworks. The adapter layer (defaulting to Finch) allows pluggable HTTP backends. Core steps documented include compression, encoding, authentication, redirect handling, retry logic, and caching. Actual implementation complexity and performance characteristics cannot be verified from README alone.
README mentions `Req.Test` for creating test stubs and references CI/CD badges, suggesting automated testing is practiced. Specific test coverage percentages not documented in README.
Last push was 2026-06-10 (20 days before analysis date), indicating recent activity. Project is 5 years old. The Apache-2.0 license and active CI pipeline visible in README badges suggest ongoing maintenance. Frequency of maintenance cannot be precisely determined from metadata alone, but recent commits indicate the project is not abandoned.
ADOPT IF: You are building HTTP-dependent Elixir applications and value a cohesive, well-documented API with sensible defaults, built-in retry/redirect/auth logic, and a plugin ecosystem. The step architecture allows customization without forking. AVOID IF: You need proven, extensively documented real-world production usage metrics; adoption is not well-publicized. Also avoid if you require the lowest possible overhead or prefer minimalist libraries over batteries-included design. MONITOR IF: You are evaluating Elixir HTTP clients and want to track whether Req gains broader adoption over HTTPoison/Finch; current evidence suggests it has found a stable niche but mainstream dominance is not evident.
Independent dimensions
Mainstream potential
4/10
Technical importance
6/10
Adoption evidence
3/10
- Adoption not well-documented: No public case studies, deployment metrics, or production user testimonials identified. Scale relative to HTTPoison and Finch remains unclear.
- Single maintainer visibility: Repository associated with Wojtek Mach; limited evidence of multi-maintainer model. Long-term sustainability depends on continued engagement.
- Plugin ecosystem size appears modest: Four named plugins visible in README, suggesting ecosystem is young. Network effects may be limited compared to more established clients.
- Competitive position uncertain: Sits between low-level (Finch) and legacy (HTTPoison) with similar star counts to both. May struggle to achieve dominant mindshare if developers fragment across all three.
- Real-world validation gaps: No documented performance benchmarks, error handling analysis in production conditions, or comparison with competitors on latency/reliability.
Req is likely to remain a stable, actively maintained niche choice within the Elixir ecosystem, appealing to developers who value batteries-included ergonomics and extensibility. It will probably not achieve dominant market share relative to HTTPoison or Finch, but may continue to grow slowly via adoption by new Elixir projects and through its plugin ecosystem. The step architecture positions it well for long-term evolution.
Explore similar
Newsletter
Get analyses like this every Monday
Free weekly digest of the most interesting open-source discoveries.
Languages
Information
- Website
- https://hexdocs.pm/req
- Language
- Elixir
- License
- Apache-2.0
- Last updated
- 4w ago
- Created
- 64mo ago
- Analyzed with
- anthropic/claude-haiku-4-5
Stars over time
Contributors over time
Top 100 contributors only — repos with more will plateau at 100.
Open issues
Proposal: Support string keys in `path_params`?
Streaming decompression?
`redirect`: Drop cookie header?
Add update_header
Does not handle relative `:url` paths, even though `URI.merge/2` does
Top contributors
Similar repos
akira/exq
Exq is a job processing library for Elixir that uses Redis as a backend and is...
ex-aws/ex_aws
ExAws is a flexible Elixir client library for AWS APIs that modularizes...
| Repository | Stars | Week Δ | Language | Score | Updated |
|---|---|---|---|---|---|
|
|
1.3k | — | Elixir | 8/10 | 4w ago |
|
|
1.5k | — | Elixir | 8/10 | 4mo ago |
|
|
1.3k | — | Elixir | 8/10 | 3w ago |
|
|
2.3k | — | Elixir | 8/10 | 5d ago |
|
|
1.4k | — | Elixir | 8/10 | 4w ago |
|
|
6.5k | — | Elixir | 9/10 | 6d ago |
Older, more established (2,296 stars). HTTPoison is simpler but offers fewer batteries. Req appears positioned as a modernized, more feature-rich successor with better defaults, though both libraries coexist.
Lower-level HTTP adapter; Req actually uses Finch as default backend. Finch is about connection pooling and HTTP mechanics; Req adds convenience layers. They serve different abstraction levels, not direct substitutes.
Built-in Erlang HTTP client. Req offers far better ergonomics but requires additional dependency. Choice depends on whether batteries-included convenience justifies the dependency.
AWS-specific SDK (1,336 stars). Req includes AWS V4 Signature step, positioning it as capable of AWS interactions but more general-purpose than ex-aws.
Functional HTTP client mentioned in README docs. More low-level and minimal than Req; users typically layer abstractions on top. Req is higher-level and more prescriptive.