Why I forked httpx
Name Confusion and Initial Reactions
- Multiple commenters initially confused httpx with htmx/htmlx, leading to misreading the article.
- Some express nostalgia for the original httpx and disappointment it hasn’t become a stable, “v1” default HTTP client for Python.
Quality and Behavior of httpx
- Some see httpx as promising but under-maintained, with long gaps between releases and ignored fixes.
- Others are strongly critical: API seen as mediocre, performance and configurability as lacking, and maintainer behavior as risky for production (e.g., behavior changes or breakages without clear justification).
- Specific complaints: thread-safety issues in production, no HTTP/3 support, awkward redirect defaults, and limited multiplexing.
Alternatives: niquests, aiohttp, pyreqwest, others
- niquests gets repeated praise: perceived as much faster, better HTTP/2+ handling, closer to
requestsAPI, and smooth migration from httpx. Some companies report successful production switches. - aiohttp is praised as stable and well-established, but criticized for being HTTP/1‑centric and async-only.
- pyreqwest is plugged as a high-performance client with an httpx compatibility layer and strong benchmarks.
- Other tools/libraries (curl cffi, httpmorph, httpcloak, etc.) are mentioned in niche crawling contexts.
Forking, Governance, and Maintainer Burnout
- Many argue that forking is appropriate when critical fixes aren’t released and maintainers block new maintainers while the project is widely depended on.
- Others emphasize that open-source authors owe no obligations beyond the license; expectations of support or responsiveness are seen as entitlement.
- A counterview holds that once a project becomes core infrastructure and takes sponsorship, there is at least a moral responsibility to delegate, transition, or communicate.
- Suggestions include foundations or ecosystem support for key packages, and tools like
modshimto layer fixes without full forks.
Python’s HTTP and Stdlib Gaps
- Broad agreement that Python lacks a “friendly, async-ready, battle-tested” HTTP client in the standard library.
- Fragmentation is seen as a consequence of HTTP complexity, async/HTTP2/HTTP3 demands, and reluctance to expand the stdlib after past “batteries included” pains.
- Comparisons to other languages show that many also struggle with ergonomic, comprehensive HTTP clients.
Security, Naming, and Drama
- Some worry the forked library could become a supply-chain target as it grows.
- Mild concern about potentially confusing, near-identical naming vs. trademark issues; others note the name is generic and no clear trademark is evident.
- Related project drama (around other Python HTTP/framework tools and MkDocs) is cited as part of a broader pattern of governance and interpersonal conflict in popular Python infrastructure.