Skip to content

Replace Hackney with Req as HTTP client#165

Open
ry4n1m3 wants to merge 1 commit into
lau:masterfrom
mechanical-orchard:replace-hackney-with-req
Open

Replace Hackney with Req as HTTP client#165
ry4n1m3 wants to merge 1 commit into
lau:masterfrom
mechanical-orchard:replace-hackney-with-req

Conversation

@ry4n1m3
Copy link
Copy Markdown

@ry4n1m3 ry4n1m3 commented Feb 11, 2026

Addresses security concerns with Hackney (CVE-2018-1000007, AIKIDO-2026-10122). Req provides a modern, actively maintained HTTP client built on Mint.

Changes:

  • Add Req as required dependency, remove Hackney
  • Implement Tzdata.HTTPClient.Req with redirect support
  • Set Req as default HTTP client in configuration
  • Hackney implementation remains available for backward compatibility
  • Update README with migration information

Licensing: This contribution is made by employees of Mechanical Orchard, Inc. under the terms of the project's license.

Addresses security concerns with Hackney (CVE-2018-1000007,
AIKIDO-2026-10122). Req provides a modern, actively maintained
HTTP client built on Mint.

Changes:
- Add Req as required dependency, remove Hackney
- Implement Tzdata.HTTPClient.Req with redirect support
- Set Req as default HTTP client in configuration
- Hackney implementation remains available for backward compatibility
- Update README with migration information

Co-Authored-By: Matt Wynne <matt.wynne@mechanical-orchard.com>
@cdhagmann
Copy link
Copy Markdown

This would be great!

@mhsdef
Copy link
Copy Markdown

mhsdef commented May 4, 2026

Plus one. @lau, any chance this could get merged and released?

metabren added a commit to Finger-Ink/notifiex that referenced this pull request May 13, 2026
Internal HTTP/JSON client swap. Public API unchanged. Motivated by
Hackney's security history; mirrors lau/tzdata#165.

Also bumps Elixir floor to 1.15, modernises ex_doc/credo/dialyxir, and
moves CI to OTP 26 / Elixir 1.17. Adds Bypass-backed tests for the
Slack and Discord services (0% → 85%/100% on those modules).

Caller-visible breaking change: transport-error reasons are now strings
("connection refused") rather than atoms (:econnrefused). Tuple shape
{:error, {:error, reason}} is unchanged. See CHANGELOG.md and
guides/upgrading_to_v2.md.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants