{"slug": "httpx", "name": "httpx", "category": "dev-libs", "category_name": "Libraries and frameworks", "description": "", "recommenders": 3, "commenters": 22, "warners": 11, "score": -5.397, "rising": 0.35, "first": "2025-12-14", "latest": "2026-09-11", "why": "I personally find the httpx API is much cleaner and more composable", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 2, "neutral": 7, "compare": 1, "warn": 13}, "spark": [0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "I personally find the httpx API is much cleaner and more composable", "kind": "", "icon": false, "domain": null, "github_repo": "github.com/encode/httpx", "official_url": "https://www.python-httpx.org", "pricing": "", "aliases": ["httpx", "HTTPX"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 791769344, "item_id": 49485584, "url": "https://news.ycombinator.com/item?id=49485584", "by": "12_throw_away", "date": "2026-08-28", "stance": "recommend", "quote": "I personally find the httpx API is much cleaner and more composable", "excerpt": "Async. And it comes with WSGI and ASGI transport adapters [1], which are amazing for testing/debugging with the client and server in a single process. And I personally find the httpx API is much cleaner and more composable, but ymmv. [1] https://www.python-httpx.org/advanced/transports/#wsgi-transport", "context": "", "use_case": "Async HTTP client", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 760242672, "item_id": 47515167, "url": "https://news.ycombinator.com/item?id=47515167", "by": "localuser13", "date": "2026-03-25", "stance": "recommend", "quote": "modern problems (async, http2) required modern solutions (httpx)", "excerpt": ">Honestly the thing that consistently surprises me is that requests hasn't been standardised and brought into the standard library Instead, official documentation seems comfortable with recommending a third party package: https://docs.python.org/3/library/urllib.request.html#module-urllib.request >The Requests package is recommended for a higher-level HTTP client interface. Which was fine when requests were the de-fa", "context": "", "use_case": "", "switched_from": "", "story": "I Forked Httpx"}, {"id": 742870690, "item_id": 46429418, "url": "https://news.ycombinator.com/item?id=46429418", "by": "BonoboIO", "date": "2025-12-29", "stance": "recommend", "quote": "httpx over requests", "excerpt": "Different approach: I continuously refine my global CLAUDE.md (~/.claude/CLAUDE.md) instead of external memory systems. I work primarily in Python and maintain extensive coding conventions there - patterns allowed/forbidden, preferred libs, error handling, etc. Custom slash commands like `/use-recommended-python` (loads my curated libs: pendulum over datetime, httpx over requests) and `/find-reinvented-the-wheel` to ", "context": "", "use_case": "Python HTTP client", "switched_from": "", "story": "Stop Claude Code from forgetting everything"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 794628752, "item_id": 49664297, "url": "https://news.ycombinator.com/item?id=49664297", "by": "clickety_clack", "date": "2026-09-11", "stance": "warn", "quote": "isn't really maintained anymore", "excerpt": "One of the 2 dependencies, httpx, isn't really maintained anymore. Pydantic picked it up as httpx2: https://pydantic.dev/docs/httpx2", "context": "", "use_case": "", "switched_from": "", "story": "Litelm: LiteLLM Without the Bloat"}, {"id": 791733136, "item_id": 49483321, "url": "https://news.ycombinator.com/item?id=49483321", "by": "jelenzelen", "date": "2026-08-28", "stance": "warn", "quote": "Biggest problem with httpx I see is authors sanity", "excerpt": "Biggest problem with httpx I see is authors sanity https://github.com/encode/httpx/discussions/3784. I do not even understand what is his problem (too much or too little woke internet?).", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791695745, "item_id": 49480984, "url": "https://news.ycombinator.com/item?id=49480984", "by": "karpetrosyan", "date": "2026-08-28", "stance": "warn", "quote": "Better migrate to https://zapros.dev from httpx maintainer", "excerpt": "Better migrate to https://zapros.dev from httpx maintainer", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791668480, "item_id": 49479280, "url": "https://news.ycombinator.com/item?id=49479280", "by": "t098i3", "date": "2026-08-28", "stance": "warn", "quote": "Read for yourself: https://github.com/encode/httpx/discussions/3784", "excerpt": "Read for yourself: https://github.com/encode/httpx/discussions/3784 They also effectively killed off MkDocs: https://github.com/mkdocs/mkdocs/discussions/3677", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}]}], "who": [], "tags": [], "use_cases": ["python http client", "async http client", "http client dependency", "http client", "http probing"], "compared": [{"slug": "niquests", "name": "niquests", "co": 5, "switched_from": 0, "switched_to": 2}, {"slug": "httpx2", "name": "httpx2", "co": 3, "switched_from": 0, "switched_to": 1}, {"slug": "requests", "name": "Requests", "co": 4, "switched_from": 0, "switched_to": 0}, {"slug": "mkdocs", "name": "MkDocs", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=49477212", "title": "Migrating to HTTPX2", "mentions": 9}, {"url": "https://news.ycombinator.com/item?id=47514603", "title": "I Forked Httpx", "mentions": 5}, {"url": "https://news.ycombinator.com/item?id=48077924", "title": "Reverting the incremental GC in Python 3.14 and 3.15", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=47193563", "title": "Httpx closing down issues and discussions due to \"skewed gender representation\"", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46264491", "title": "Ask HN: What Are You Working On? (December 2025)", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49662767", "title": "Litelm: LiteLLM Without the Bloat", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"warn": 1, "recommend": 1}, "2026-01": {"neutral": 2}, "2026-02": {"warn": 1}, "2026-03": {"warn": 2, "neutral": 3}, "2026-04": {"neutral": 1}, "2026-05": {"warn": 2}, "2026-06": {}, "2026-07": {}, "2026-08": {"warn": 6, "compare": 1, "recommend": 1, "neutral": 1}, "2026-09": {"warn": 1}, "2026-10": {}}, "quotes": [{"id": 794628752, "item_id": 49664297, "url": "https://news.ycombinator.com/item?id=49664297", "by": "clickety_clack", "date": "2026-09-11", "stance": "warn", "quote": "isn't really maintained anymore", "excerpt": "One of the 2 dependencies, httpx, isn't really maintained anymore. Pydantic picked it up as httpx2: https://pydantic.dev/docs/httpx2", "context": "", "use_case": "", "switched_from": "", "story": "Litelm: LiteLLM Without the Bloat"}, {"id": 791811520, "item_id": 49488220, "url": "https://news.ycombinator.com/item?id=49488220", "by": "duskdozer", "date": "2026-08-29", "stance": "neutral", "quote": "The contributors provided the source of the project under these terms, which are stated up front.", "excerpt": "From the software license: >THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (IN", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791769344, "item_id": 49485584, "url": "https://news.ycombinator.com/item?id=49485584", "by": "12_throw_away", "date": "2026-08-28", "stance": "recommend", "quote": "I personally find the httpx API is much cleaner and more composable", "excerpt": "Async. And it comes with WSGI and ASGI transport adapters [1], which are amazing for testing/debugging with the client and server in a single process. And I personally find the httpx API is much cleaner and more composable, but ymmv. [1] https://www.python-httpx.org/advanced/transports/#wsgi-transport", "context": "", "use_case": "Async HTTP client", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791733136, "item_id": 49483321, "url": "https://news.ycombinator.com/item?id=49483321", "by": "jelenzelen", "date": "2026-08-28", "stance": "warn", "quote": "Biggest problem with httpx I see is authors sanity", "excerpt": "Biggest problem with httpx I see is authors sanity https://github.com/encode/httpx/discussions/3784. I do not even understand what is his problem (too much or too little woke internet?).", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791695745, "item_id": 49480984, "url": "https://news.ycombinator.com/item?id=49480984", "by": "karpetrosyan", "date": "2026-08-28", "stance": "warn", "quote": "Better migrate to https://zapros.dev from httpx maintainer", "excerpt": "Better migrate to https://zapros.dev from httpx maintainer", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791678305, "item_id": 49479894, "url": "https://news.ycombinator.com/item?id=49479894", "by": "jtbaker", "date": "2026-08-28", "stance": "compare", "quote": "Winner: niquests (4.8x faster by wall clock)", "excerpt": "Same! Recently ported some code from httpx -> niquests and the experience has been good, although admittedly the governance of the project seems a little unclear. I (ok, Qwen 3.7 27B) wrote some benchmarking code to compare throughput, and niquests seems to be substantially more performant for traffic that doesn't need to traverse the public web, e.g. intra cluster service to service communication: https://gist.githu", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791668480, "item_id": 49479280, "url": "https://news.ycombinator.com/item?id=49479280", "by": "t098i3", "date": "2026-08-28", "stance": "warn", "quote": "Read for yourself: https://github.com/encode/httpx/discussions/3784", "excerpt": "Read for yourself: https://github.com/encode/httpx/discussions/3784 They also effectively killed off MkDocs: https://github.com/mkdocs/mkdocs/discussions/3677", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791662337, "item_id": 49478896, "url": "https://news.ycombinator.com/item?id=49478896", "by": "nateb2022", "date": "2026-08-28", "stance": "warn", "quote": "", "excerpt": "pyreqwest has been delightful so far: https://github.com/MarkusSintonen/pyreqwest It's been a pleasure to use, has a httpx compatibility layer, and it's fast (https://github.com/MarkusSintonen/pyreqwest/blob/main/docs/benchmarks.md)", "context": "", "use_case": "", "switched_from": "", "story": "HTTPX2 \u2013 A next-generation HTTP client for Python"}, {"id": 791656192, "item_id": 49478512, "url": "https://news.ycombinator.com/item?id=49478512", "by": "simonw", "date": "2026-08-28", "stance": "neutral", "quote": "Unfortunately that 1.0 work is happening in a private repository.", "excerpt": "HTTPX stable hasn't had a release since December 2024, but there have been two dev releases of the 1.0 branch this month (after a gap since September 2025.) Unfortunately that 1.0 work is happening in a private repository. https://pypi.org/project/httpx/#history", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791656001, "item_id": 49478500, "url": "https://news.ycombinator.com/item?id=49478500", "by": "kelvinjps10", "date": "2026-08-28", "stance": "warn", "quote": "there was no activity on HTTPX", "excerpt": "in their README >Important We started this fork because there was no activity on HTTPX, a very popular Python HTTP library. A few weeks later, Pydantic started their own fork called HTTPX2. We decided to embrace this and support HTTPX2. We're upstreaming our fixes to HTTPX2 and in our opinion it should be the \"blessed\" fork. Pydantic can make this more successful than we ever can. See also https://tildeweb.nl/~michie", "context": "", "use_case": "", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 791640129, "item_id": 49477508, "url": "https://news.ycombinator.com/item?id=49477508", "by": "simonw", "date": "2026-08-28", "stance": "warn", "quote": "The problem with httpx as a dependency is that it's currently working towards a 1.0 release which will be full of breaking changes.", "excerpt": "Anthropic made the same change a few weeks after OpenAI did: https://github.com/anthropics/anthropic-sdk-python/releases/tag/v1.0.0 The problem with httpx as a dependency is that it's currently working towards a 1.0 release which will be full of breaking changes. The httpx2 project is essentially a fork that promises not to break the existing API, which makes it a more stable dependency to build against. I wrote a pr", "context": "", "use_case": "HTTP client dependency", "switched_from": "", "story": "Migrating to HTTPX2"}, {"id": 770103696, "item_id": 48131481, "url": "https://news.ycombinator.com/item?id=48131481", "by": "JimDabell", "date": "2026-05-13", "stance": "warn", "quote": "I've closed off access to issues and discussions.", "excerpt": "> I made a PR to fix it but the maintainers haven't applied it. :-( https://github.com/encode/httpx/pull/3733 Unfortunately, you may be the wrong gender to contribute to Encode repositories like httpx: > I've closed off access to issues and discussions. > I don't want to continue allowing an online environment with such an absurdly skewed gender representation. I find it intensely unwelcoming, and it's not reflective", "context": "", "use_case": "Python HTTP client", "switched_from": "", "story": "Reverting the incremental GC in Python 3.14 and 3.15"}, {"id": 770057552, "item_id": 48128597, "url": "https://news.ycombinator.com/item?id=48128597", "by": "nas", "date": "2026-05-13", "stance": "warn", "quote": "it's likely caused by a reference cycle", "excerpt": "If you are using \"httpx\", it's likely caused by a reference cycle. I made a PR to fix it but the maintainers haven't applied it. :-( https://github.com/encode/httpx/pull/3733 The reference cycle httpx creates is kind of a worst-case scenario for the incremental GC issue. Both the generational (3.13 and older) and incremental GC are triggered by the net new \"container\" objects (objects that have references to others, ", "context": "", "use_case": "Python HTTP client", "switched_from": "", "story": "Reverting the incremental GC in Python 3.14 and 3.15"}, {"id": 763881761, "item_id": 47742610, "url": "https://news.ycombinator.com/item?id=47742610", "by": "heyFFFF", "date": "2026-04-12", "stance": "neutral", "quote": "Stack: Python, HTTPX, Playwright.", "excerpt": "API-Engine \u2013 A list of 180+ APIs with daily health checks I built a lister that doesn't suck. Most public API lists are full of 404s, so I automated the maintenance. - Stack: Python, HTTPX, Playwright. - Data: 180+ APIs in a clean api.json. - Automation: GitHub Action adds 5-10 new APIs daily. - Validation: We ping every URL daily; if it's dead, we show it. Site: https://api-engine.vercel.app/ Repo: https://github.co", "context": "", "use_case": "", "switched_from": "", "story": "I build a modern APIs listing engine"}, {"id": 760266129, "item_id": 47516633, "url": "https://news.ycombinator.com/item?id=47516633", "by": "joouha", "date": "2026-03-25", "stance": "neutral", "quote": "", "excerpt": "This sounds like an ideal use case for modshim [0] One of its intended use cases is bridging contribution gaps: while contributing upstream is ideal, maintainers may be slow to merge contributions for various reasons. Forking in response creates a permanent schism and a significant maintenance burden for what might be a small change. Modshim would allow you to create a new Python package containing only the fixes for", "context": "", "use_case": "", "switched_from": "", "story": "I Forked Httpx"}, {"id": 760260000, "item_id": 47516250, "url": "https://news.ycombinator.com/item?id=47516250", "by": "roywashere", "date": "2026-03-25", "stance": "neutral", "quote": "", "excerpt": "thanks, I hope I fixed the https://pythonleiden.nl website now", "context": "", "use_case": "", "switched_from": "", "story": "I Forked Httpx"}, {"id": 760242672, "item_id": 47515167, "url": "https://news.ycombinator.com/item?id=47515167", "by": "localuser13", "date": "2026-03-25", "stance": "recommend", "quote": "modern problems (async, http2) required modern solutions (httpx)", "excerpt": ">Honestly the thing that consistently surprises me is that requests hasn't been standardised and brought into the standard library Instead, official documentation seems comfortable with recommending a third party package: https://docs.python.org/3/library/urllib.request.html#module-urllib.request >The Requests package is recommended for a higher-level HTTP client interface. Which was fine when requests were the de-fa", "context": "", "use_case": "", "switched_from": "", "story": "I Forked Httpx"}, {"id": 760239458, "item_id": 47514966, "url": "https://news.ycombinator.com/item?id=47514966", "by": "mesahm", "date": "2026-03-25", "stance": "warn", "quote": "niquests easily beat aiohttp just using 10 conn and crush httpx", "excerpt": "aiohttp is an excellent library. very stable. I concurs, but! it's too heavily tied to HTTP/1, and well, I am not a fan of opening thousands of TCP conn just to keep up with HTTP/2 onward. niquests easily beat aiohttp just using 10 conn and crush httpx see https://gist.github.com/Ousret/9e99b07e66eec48ccea5811775ec116d fwiw, HTTP/2 is twelve years old, just saying.", "context": "", "use_case": "", "switched_from": "", "story": "I Forked Httpx"}, {"id": 760237504, "item_id": 47514844, "url": "https://news.ycombinator.com/item?id=47514844", "by": "mesahm", "date": "2026-03-25", "stance": "warn", "quote": "the http landscape is rather scary lately in Python. instead of forking join forces", "excerpt": "the http landscape is rather scary lately in Python. instead of forking join forces... See Niquests https://github.com/jawah/niquests I am trying to resolve what you've seen. For years of hard work.", "context": "", "use_case": "", "switched_from": "", "story": "I Forked Httpx"}, {"id": 759756337, "item_id": 47484771, "url": "https://news.ycombinator.com/item?id=47484771", "by": "localuser13", "date": "2026-03-22", "stance": "neutral", "quote": "As a mkdocs user and a httpx user", "excerpt": "A very surprising development indeed. The original author (who is also the leading maintainer of httpx, another huge package) started a crusade against male-dominated spaces such as... Github issues and discussions. >So\u2026 sharing the source isn\u2019t the problem here. The issue is the GitHub working environment. I\u2019m not interested in the smokey boys-only-club atmosphere, it feels starkly unprofessional. >We\u2019re not having ", "context": "", "use_case": "Python HTTP client", "switched_from": "", "story": "The Slow Collapse of MkDocs"}, {"id": 755349456, "item_id": 47209341, "url": "https://news.ycombinator.com/item?id=47209341", "by": "nateb2022", "date": "2026-03-01", "stance": "warn", "quote": "Not only is httpx an actual supply chain risk now, but also it shows an unwillingness to fix outstanding bugs and issues", "excerpt": "This is yet another of several reasons why we've switched from httpx to pyreqwest[0]. Not only is httpx an actual supply chain risk now, but also it shows an unwillingness to fix outstanding bugs and issues, which is problematic in a project that has been adopted by so many users. For those migrating, pyreqwest provides a completely httpx-compatible wrapper.[1] [0]: https://github.com/MarkusSintonen/pyreqwest [1]: ht", "context": "", "use_case": "HTTP client", "switched_from": "", "story": "Httpx closing down issues and discussions due to \"skewed gender representation\""}, {"id": 755099280, "item_id": 47193705, "url": "https://news.ycombinator.com/item?id=47193705", "by": "jjgreen", "date": "2026-02-28", "stance": "warn", "quote": "Leaves some broken links on their contributing page", "excerpt": "Leaves some broken links on their contributing page: https://www.python-httpx.org/contributing/", "context": "", "use_case": "", "switched_from": "", "story": "Httpx closing down issues and discussions due to \"skewed gender representation\""}, {"id": 749206692, "item_id": 46825418, "url": "https://news.ycombinator.com/item?id=46825418", "by": "ashwaa101", "date": "2026-01-30", "stance": "neutral", "quote": "current stack includes Nuclei, OWASP ZAP, Nmap, httpx", "excerpt": "Hi HN \u2014 I\u2019m building Thandev, a \u201csecurity control room\u201d for web app scanning. I started it because running multiple tools (Nuclei, ZAP, Nmap, etc.) often produces a lot of duplicated alerts and messy outputs, and it\u2019s hard to turn scans into a short, actionable list. Thandev tries to normalize + dedupe findings across tools and present them as something you can actually work through. What it does today Takes a target", "context": "", "use_case": "HTTP probing", "switched_from": "", "story": null}, {"id": 745665527, "item_id": 46604095, "url": "https://news.ycombinator.com/item?id=46604095", "by": "victor_y", "date": "2026-01-13", "stance": "neutral", "quote": "Security tools: Nuclei, SQLMap, httpx", "excerpt": "Hi HN, I'm Victor. AI is making attacks cheaper and faster. Automated vulnerability scanners, LLM-assisted exploit generation, and attack frameworks that used to require expertise are now accessible to anyone with a prompt. Security testing needs to keep pace. I built ModernPentest to run continuous automated pentests on any web application or API. Setup takes 5 minutes, and you get a full report with exploitable vul", "context": "", "use_case": "", "switched_from": "", "story": "Show HN: ModernPentest \u2013 Continuous automated pentesting for web apps and APIs"}, {"id": 742870690, "item_id": 46429418, "url": "https://news.ycombinator.com/item?id=46429418", "by": "BonoboIO", "date": "2025-12-29", "stance": "recommend", "quote": "httpx over requests", "excerpt": "Different approach: I continuously refine my global CLAUDE.md (~/.claude/CLAUDE.md) instead of external memory systems. I work primarily in Python and maintain extensive coding conventions there - patterns allowed/forbidden, preferred libs, error handling, etc. Custom slash commands like `/use-recommended-python` (loads my curated libs: pendulum over datetime, httpx over requests) and `/find-reinvented-the-wheel` to ", "context": "", "use_case": "Python HTTP client", "switched_from": "", "story": "Stop Claude Code from forgetting everything"}, {"id": 740264240, "item_id": 46266515, "url": "https://news.ycombinator.com/item?id=46266515", "by": "mmmaantu", "date": "2025-12-14", "stance": "warn", "quote": "Httpx/httpcore are abandoned and their connection pooling etc implementations are completely broken", "excerpt": "Httpx/httpcore are abandoned and their connection pooling etc implementations are completely broken https://github.com/encode/httpx/issues/3215 Many PRs trying to fix varying issues https://github.com/encode/httpcore/pulls But maintainer(s) are not intrested in fixing any of the issues.", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What Are You Working On? (December 2025)"}, {"id": 740261488, "item_id": 46266343, "url": "https://news.ycombinator.com/item?id=46266343", "by": "mmmaantu", "date": "2025-12-14", "stance": "warn", "quote": "Started after getting too annoyed with all the issues httpx has.", "excerpt": "Building pyreqwest, a high-performance Python HTTP client backed by Rust\u2019s reqwest. It has gotten quite feature rich: async and sync APIs, similar ergonomic interface of reqwest, full type hints, and built-in testing/mocking. It has no unsafe code, and no Python-side dependencies. (Started after getting too annoyed with all the issues httpx has.) https://github.com/MarkusSintonen/pyreqwest", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What Are You Working On? (December 2025)"}]}